github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/google/resource_compute_backend_service_test.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	"google.golang.org/api/compute/v1"
    11  )
    12  
    13  func TestAccComputeBackendService_basic(t *testing.T) {
    14  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    15  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    16  	extraCheckName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    17  	var svc compute.BackendService
    18  
    19  	resource.Test(t, resource.TestCase{
    20  		PreCheck:     func() { testAccPreCheck(t) },
    21  		Providers:    testAccProviders,
    22  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
    23  		Steps: []resource.TestStep{
    24  			resource.TestStep{
    25  				Config: testAccComputeBackendService_basic(serviceName, checkName),
    26  				Check: resource.ComposeTestCheckFunc(
    27  					testAccCheckComputeBackendServiceExists(
    28  						"google_compute_backend_service.foobar", &svc),
    29  				),
    30  			},
    31  			resource.TestStep{
    32  				Config: testAccComputeBackendService_basicModified(
    33  					serviceName, checkName, extraCheckName),
    34  				Check: resource.ComposeTestCheckFunc(
    35  					testAccCheckComputeBackendServiceExists(
    36  						"google_compute_backend_service.foobar", &svc),
    37  				),
    38  			},
    39  		},
    40  	})
    41  }
    42  
    43  func TestAccComputeBackendService_withBackend(t *testing.T) {
    44  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    45  	igName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    46  	itName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    47  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    48  	var svc compute.BackendService
    49  	resource.Test(t, resource.TestCase{
    50  		PreCheck:     func() { testAccPreCheck(t) },
    51  		Providers:    testAccProviders,
    52  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
    53  		Steps: []resource.TestStep{
    54  			resource.TestStep{
    55  				Config: testAccComputeBackendService_withBackend(
    56  					serviceName, igName, itName, checkName, 10),
    57  				Check: resource.ComposeTestCheckFunc(
    58  					testAccCheckComputeBackendServiceExists(
    59  						"google_compute_backend_service.lipsum", &svc),
    60  				),
    61  			},
    62  		},
    63  	})
    64  
    65  	if svc.TimeoutSec != 10 {
    66  		t.Errorf("Expected TimeoutSec == 10, got %d", svc.TimeoutSec)
    67  	}
    68  	if svc.Protocol != "HTTP" {
    69  		t.Errorf("Expected Protocol to be HTTP, got %q", svc.Protocol)
    70  	}
    71  	if len(svc.Backends) != 1 {
    72  		t.Errorf("Expected 1 backend, got %d", len(svc.Backends))
    73  	}
    74  }
    75  
    76  func TestAccComputeBackendService_withBackendAndUpdate(t *testing.T) {
    77  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    78  	igName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    79  	itName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    80  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
    81  	var svc compute.BackendService
    82  	resource.Test(t, resource.TestCase{
    83  		PreCheck:     func() { testAccPreCheck(t) },
    84  		Providers:    testAccProviders,
    85  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
    86  		Steps: []resource.TestStep{
    87  			resource.TestStep{
    88  				Config: testAccComputeBackendService_withBackend(
    89  					serviceName, igName, itName, checkName, 10),
    90  				Check: resource.ComposeTestCheckFunc(
    91  					testAccCheckComputeBackendServiceExists(
    92  						"google_compute_backend_service.lipsum", &svc),
    93  				),
    94  			},
    95  			resource.TestStep{
    96  				Config: testAccComputeBackendService_withBackend(
    97  					serviceName, igName, itName, checkName, 20),
    98  				Check: resource.ComposeTestCheckFunc(
    99  					testAccCheckComputeBackendServiceExists(
   100  						"google_compute_backend_service.lipsum", &svc),
   101  				),
   102  			},
   103  		},
   104  	})
   105  
   106  	if svc.TimeoutSec != 20 {
   107  		t.Errorf("Expected TimeoutSec == 20, got %d", svc.TimeoutSec)
   108  	}
   109  	if svc.Protocol != "HTTP" {
   110  		t.Errorf("Expected Protocol to be HTTP, got %q", svc.Protocol)
   111  	}
   112  	if len(svc.Backends) != 1 {
   113  		t.Errorf("Expected 1 backend, got %d", len(svc.Backends))
   114  	}
   115  }
   116  
   117  func testAccCheckComputeBackendServiceDestroy(s *terraform.State) error {
   118  	config := testAccProvider.Meta().(*Config)
   119  
   120  	for _, rs := range s.RootModule().Resources {
   121  		if rs.Type != "google_compute_backend_service" {
   122  			continue
   123  		}
   124  
   125  		_, err := config.clientCompute.BackendServices.Get(
   126  			config.Project, rs.Primary.ID).Do()
   127  		if err == nil {
   128  			return fmt.Errorf("Backend service still exists")
   129  		}
   130  	}
   131  
   132  	return nil
   133  }
   134  
   135  func testAccCheckComputeBackendServiceExists(n string, svc *compute.BackendService) resource.TestCheckFunc {
   136  	return func(s *terraform.State) error {
   137  		rs, ok := s.RootModule().Resources[n]
   138  		if !ok {
   139  			return fmt.Errorf("Not found: %s", n)
   140  		}
   141  
   142  		if rs.Primary.ID == "" {
   143  			return fmt.Errorf("No ID is set")
   144  		}
   145  
   146  		config := testAccProvider.Meta().(*Config)
   147  
   148  		found, err := config.clientCompute.BackendServices.Get(
   149  			config.Project, rs.Primary.ID).Do()
   150  		if err != nil {
   151  			return err
   152  		}
   153  
   154  		if found.Name != rs.Primary.ID {
   155  			return fmt.Errorf("Backend service not found")
   156  		}
   157  
   158  		*svc = *found
   159  
   160  		return nil
   161  	}
   162  }
   163  
   164  func TestAccComputeBackendService_withCDNEnabled(t *testing.T) {
   165  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   166  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   167  	var svc compute.BackendService
   168  
   169  	resource.Test(t, resource.TestCase{
   170  		PreCheck:     func() { testAccPreCheck(t) },
   171  		Providers:    testAccProviders,
   172  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
   173  		Steps: []resource.TestStep{
   174  			resource.TestStep{
   175  				Config: testAccComputeBackendService_withCDNEnabled(
   176  					serviceName, checkName),
   177  				Check: resource.ComposeTestCheckFunc(
   178  					testAccCheckComputeBackendServiceExists(
   179  						"google_compute_backend_service.foobar", &svc),
   180  				),
   181  			},
   182  		},
   183  	})
   184  
   185  	if svc.EnableCDN != true {
   186  		t.Errorf("Expected EnableCDN == true, got %t", svc.EnableCDN)
   187  	}
   188  }
   189  
   190  func TestAccComputeBackendService_withSessionAffinity(t *testing.T) {
   191  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   192  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   193  	var svc compute.BackendService
   194  
   195  	resource.Test(t, resource.TestCase{
   196  		PreCheck:     func() { testAccPreCheck(t) },
   197  		Providers:    testAccProviders,
   198  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
   199  		Steps: []resource.TestStep{
   200  			resource.TestStep{
   201  				Config: testAccComputeBackendService_withSessionAffinity(
   202  					serviceName, checkName, "CLIENT_IP"),
   203  				Check: resource.ComposeTestCheckFunc(
   204  					testAccCheckComputeBackendServiceExists(
   205  						"google_compute_backend_service.foobar", &svc),
   206  				),
   207  			},
   208  			resource.TestStep{
   209  				Config: testAccComputeBackendService_withSessionAffinity(
   210  					serviceName, checkName, "GENERATED_COOKIE"),
   211  				Check: resource.ComposeTestCheckFunc(
   212  					testAccCheckComputeBackendServiceExists(
   213  						"google_compute_backend_service.foobar", &svc),
   214  				),
   215  			},
   216  		},
   217  	})
   218  
   219  	if svc.SessionAffinity != "GENERATED_COOKIE" {
   220  		t.Errorf("Expected SessionAffinity == \"GENERATED_COOKIE\", got %s", svc.SessionAffinity)
   221  	}
   222  }
   223  
   224  func testAccComputeBackendService_basic(serviceName, checkName string) string {
   225  	return fmt.Sprintf(`
   226  resource "google_compute_backend_service" "foobar" {
   227    name          = "%s"
   228    health_checks = ["${google_compute_http_health_check.zero.self_link}"]
   229  }
   230  
   231  resource "google_compute_http_health_check" "zero" {
   232    name               = "%s"
   233    request_path       = "/"
   234    check_interval_sec = 1
   235    timeout_sec        = 1
   236  }
   237  `, serviceName, checkName)
   238  }
   239  
   240  func testAccComputeBackendService_withCDNEnabled(serviceName, checkName string) string {
   241  	return fmt.Sprintf(`
   242  resource "google_compute_backend_service" "foobar" {
   243    name          = "%s"
   244    health_checks = ["${google_compute_http_health_check.zero.self_link}"]
   245    enable_cdn    = true
   246  }
   247  
   248  resource "google_compute_http_health_check" "zero" {
   249    name               = "%s"
   250    request_path       = "/"
   251    check_interval_sec = 1
   252    timeout_sec        = 1
   253  }
   254  `, serviceName, checkName)
   255  }
   256  
   257  func testAccComputeBackendService_basicModified(serviceName, checkOne, checkTwo string) string {
   258  	return fmt.Sprintf(`
   259  resource "google_compute_backend_service" "foobar" {
   260      name = "%s"
   261      health_checks = ["${google_compute_http_health_check.one.self_link}"]
   262  }
   263  
   264  resource "google_compute_http_health_check" "zero" {
   265      name = "%s"
   266      request_path = "/"
   267      check_interval_sec = 1
   268      timeout_sec = 1
   269  }
   270  
   271  resource "google_compute_http_health_check" "one" {
   272      name = "%s"
   273      request_path = "/one"
   274      check_interval_sec = 30
   275      timeout_sec = 30
   276  }
   277  `, serviceName, checkOne, checkTwo)
   278  }
   279  
   280  func testAccComputeBackendService_withBackend(
   281  	serviceName, igName, itName, checkName string, timeout int64) string {
   282  	return fmt.Sprintf(`
   283  resource "google_compute_backend_service" "lipsum" {
   284    name        = "%s"
   285    description = "Hello World 1234"
   286    port_name   = "http"
   287    protocol    = "HTTP"
   288    timeout_sec = %v
   289  
   290    backend {
   291      group = "${google_compute_instance_group_manager.foobar.instance_group}"
   292    }
   293  
   294    health_checks = ["${google_compute_http_health_check.default.self_link}"]
   295  }
   296  
   297  resource "google_compute_instance_group_manager" "foobar" {
   298    name               = "%s"
   299    instance_template  = "${google_compute_instance_template.foobar.self_link}"
   300    base_instance_name = "foobar"
   301    zone               = "us-central1-f"
   302    target_size        = 1
   303  }
   304  
   305  resource "google_compute_instance_template" "foobar" {
   306    name         = "%s"
   307    machine_type = "n1-standard-1"
   308  
   309    network_interface {
   310      network = "default"
   311    }
   312  
   313    disk {
   314      source_image = "debian-8-jessie-v20160803"
   315      auto_delete  = true
   316      boot         = true
   317    }
   318  }
   319  
   320  resource "google_compute_http_health_check" "default" {
   321    name               = "%s"
   322    request_path       = "/"
   323    check_interval_sec = 1
   324    timeout_sec        = 1
   325  }
   326  `, serviceName, timeout, igName, itName, checkName)
   327  }
   328  
   329  func testAccComputeBackendService_withSessionAffinity(serviceName, checkName, affinityName string) string {
   330  	return fmt.Sprintf(`
   331  resource "google_compute_backend_service" "foobar" {
   332    name             = "%s"
   333    health_checks    = ["${google_compute_http_health_check.zero.self_link}"]
   334    session_affinity = "%s"
   335  }
   336  
   337  resource "google_compute_http_health_check" "zero" {
   338    name               = "%s"
   339    request_path       = "/"
   340    check_interval_sec = 1
   341    timeout_sec        = 1
   342  }
   343  `, serviceName, affinityName, checkName)
   344  }