diff --git a/builtin/providers/google/resource_compute_backend_service.go b/builtin/providers/google/resource_compute_backend_service.go index dcc3410e56e4..08eb432f0319 100644 --- a/builtin/providers/google/resource_compute_backend_service.go +++ b/builtin/providers/google/resource_compute_backend_service.go @@ -255,20 +255,21 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{ HealthChecks: healthChecks, } - if d.HasChange("backend") { - service.Backends = expandBackends(d.Get("backend").(*schema.Set).List()) + // Optional things + if v, ok := d.GetOk("backend"); ok { + service.Backends = expandBackends(v.(*schema.Set).List()) } - if d.HasChange("description") { - service.Description = d.Get("description").(string) + if v, ok := d.GetOk("description"); ok { + service.Description = v.(string) } - if d.HasChange("port_name") { - service.PortName = d.Get("port_name").(string) + if v, ok := d.GetOk("port_name"); ok { + service.PortName = v.(string) } - if d.HasChange("protocol") { - service.Protocol = d.Get("protocol").(string) + if v, ok := d.GetOk("protocol"); ok { + service.Protocol = v.(string) } - if d.HasChange("timeout_sec") { - service.TimeoutSec = int64(d.Get("timeout_sec").(int)) + if v, ok := d.GetOk("timeout_sec"); ok { + service.TimeoutSec = int64(v.(int)) } if d.HasChange("enable_cdn") { diff --git a/builtin/providers/google/resource_compute_backend_service_test.go b/builtin/providers/google/resource_compute_backend_service_test.go index 01b0d3d383de..41be583c14f8 100644 --- a/builtin/providers/google/resource_compute_backend_service_test.go +++ b/builtin/providers/google/resource_compute_backend_service_test.go @@ -46,7 +46,6 @@ func TestAccComputeBackendService_withBackend(t *testing.T) { itName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) var svc compute.BackendService - resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, @@ -54,7 +53,7 @@ func TestAccComputeBackendService_withBackend(t *testing.T) { Steps: []resource.TestStep{ resource.TestStep{ Config: testAccComputeBackendService_withBackend( - serviceName, igName, itName, checkName), + serviceName, igName, itName, checkName, 10), Check: resource.ComposeTestCheckFunc( testAccCheckComputeBackendServiceExists( "google_compute_backend_service.lipsum", &svc), @@ -74,6 +73,47 @@ func TestAccComputeBackendService_withBackend(t *testing.T) { } } +func TestAccComputeBackendService_withBackendAndUpdate(t *testing.T) { + serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + igName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + itName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + var svc compute.BackendService + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckComputeBackendServiceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccComputeBackendService_withBackend( + serviceName, igName, itName, checkName, 10), + Check: resource.ComposeTestCheckFunc( + testAccCheckComputeBackendServiceExists( + "google_compute_backend_service.lipsum", &svc), + ), + }, + resource.TestStep{ + Config: testAccComputeBackendService_withBackend( + serviceName, igName, itName, checkName, 20), + Check: resource.ComposeTestCheckFunc( + testAccCheckComputeBackendServiceExists( + "google_compute_backend_service.lipsum", &svc), + ), + }, + }, + }) + + if svc.TimeoutSec != 20 { + t.Errorf("Expected TimeoutSec == 20, got %d", svc.TimeoutSec) + } + if svc.Protocol != "HTTP" { + t.Errorf("Expected Protocol to be HTTP, got %q", svc.Protocol) + } + if len(svc.Backends) != 1 { + t.Errorf("Expected 1 backend, got %d", len(svc.Backends)) + } +} + func testAccCheckComputeBackendServiceDestroy(s *terraform.State) error { config := testAccProvider.Meta().(*Config) @@ -204,14 +244,14 @@ resource "google_compute_http_health_check" "one" { } func testAccComputeBackendService_withBackend( - serviceName, igName, itName, checkName string) string { + serviceName, igName, itName, checkName string, timeout int64) string { return fmt.Sprintf(` resource "google_compute_backend_service" "lipsum" { name = "%s" description = "Hello World 1234" port_name = "http" protocol = "HTTP" - timeout_sec = 10 + timeout_sec = %v backend { group = "${google_compute_instance_group_manager.foobar.instance_group}" @@ -249,5 +289,5 @@ resource "google_compute_http_health_check" "default" { check_interval_sec = 1 timeout_sec = 1 } -`, serviceName, igName, itName, checkName) +`, serviceName, timeout, igName, itName, checkName) }