github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/google/resource_compute_region_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 TestAccComputeRegionBackendService_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: testAccCheckComputeRegionBackendServiceDestroy,
    23  		Steps: []resource.TestStep{
    24  			resource.TestStep{
    25  				Config: testAccComputeRegionBackendService_basic(serviceName, checkName),
    26  				Check: resource.ComposeTestCheckFunc(
    27  					testAccCheckComputeRegionBackendServiceExists(
    28  						"google_compute_region_backend_service.foobar", &svc),
    29  				),
    30  			},
    31  			resource.TestStep{
    32  				Config: testAccComputeRegionBackendService_basicModified(
    33  					serviceName, checkName, extraCheckName),
    34  				Check: resource.ComposeTestCheckFunc(
    35  					testAccCheckComputeRegionBackendServiceExists(
    36  						"google_compute_region_backend_service.foobar", &svc),
    37  				),
    38  			},
    39  		},
    40  	})
    41  }
    42  
    43  func TestAccComputeRegionBackendService_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: testAccCheckComputeRegionBackendServiceDestroy,
    53  		Steps: []resource.TestStep{
    54  			resource.TestStep{
    55  				Config: testAccComputeRegionBackendService_withBackend(
    56  					serviceName, igName, itName, checkName, 10),
    57  				Check: resource.ComposeTestCheckFunc(
    58  					testAccCheckComputeRegionBackendServiceExists(
    59  						"google_compute_region_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 != "TCP" {
    69  		t.Errorf("Expected Protocol to be TCP, 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 TestAccComputeRegionBackendService_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: testAccCheckComputeRegionBackendServiceDestroy,
    86  		Steps: []resource.TestStep{
    87  			resource.TestStep{
    88  				Config: testAccComputeRegionBackendService_withBackend(
    89  					serviceName, igName, itName, checkName, 10),
    90  				Check: resource.ComposeTestCheckFunc(
    91  					testAccCheckComputeRegionBackendServiceExists(
    92  						"google_compute_region_backend_service.lipsum", &svc),
    93  				),
    94  			},
    95  			resource.TestStep{
    96  				Config: testAccComputeRegionBackendService_withBackend(
    97  					serviceName, igName, itName, checkName, 20),
    98  				Check: resource.ComposeTestCheckFunc(
    99  					testAccCheckComputeRegionBackendServiceExists(
   100  						"google_compute_region_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 != "TCP" {
   110  		t.Errorf("Expected Protocol to be TCP, 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 TestAccComputeRegionBackendService_withSessionAffinity(t *testing.T) {
   118  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   119  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   120  	var svc compute.BackendService
   121  
   122  	resource.Test(t, resource.TestCase{
   123  		PreCheck:     func() { testAccPreCheck(t) },
   124  		Providers:    testAccProviders,
   125  		CheckDestroy: testAccCheckComputeRegionBackendServiceDestroy,
   126  		Steps: []resource.TestStep{
   127  			resource.TestStep{
   128  				Config: testAccComputeRegionBackendService_withSessionAffinity(
   129  					serviceName, checkName),
   130  				Check: resource.ComposeTestCheckFunc(
   131  					testAccCheckComputeRegionBackendServiceExists(
   132  						"google_compute_region_backend_service.foobar", &svc),
   133  				),
   134  			},
   135  		},
   136  	})
   137  
   138  	if svc.SessionAffinity != "CLIENT_IP" {
   139  		t.Errorf("Expected Protocol to be CLIENT_IP, got %q", svc.SessionAffinity)
   140  	}
   141  }
   142  
   143  func testAccCheckComputeRegionBackendServiceDestroy(s *terraform.State) error {
   144  	config := testAccProvider.Meta().(*Config)
   145  
   146  	for _, rs := range s.RootModule().Resources {
   147  		if rs.Type != "google_compute_region_backend_service" {
   148  			continue
   149  		}
   150  
   151  		_, err := config.clientCompute.RegionBackendServices.Get(
   152  			config.Project, config.Region, rs.Primary.ID).Do()
   153  		if err == nil {
   154  			return fmt.Errorf("Backend service still exists")
   155  		}
   156  	}
   157  
   158  	return nil
   159  }
   160  
   161  func testAccCheckComputeRegionBackendServiceExists(n string, svc *compute.BackendService) resource.TestCheckFunc {
   162  	return func(s *terraform.State) error {
   163  		rs, ok := s.RootModule().Resources[n]
   164  		if !ok {
   165  			return fmt.Errorf("Not found: %s", n)
   166  		}
   167  
   168  		if rs.Primary.ID == "" {
   169  			return fmt.Errorf("No ID is set")
   170  		}
   171  
   172  		config := testAccProvider.Meta().(*Config)
   173  
   174  		found, err := config.clientCompute.RegionBackendServices.Get(
   175  			config.Project, config.Region, rs.Primary.ID).Do()
   176  		if err != nil {
   177  			return err
   178  		}
   179  
   180  		if found.Name != rs.Primary.ID {
   181  			return fmt.Errorf("Backend service not found")
   182  		}
   183  
   184  		*svc = *found
   185  
   186  		return nil
   187  	}
   188  }
   189  
   190  func testAccComputeRegionBackendService_basic(serviceName, checkName string) string {
   191  	return fmt.Sprintf(`
   192  resource "google_compute_region_backend_service" "foobar" {
   193    name                  = "%s"
   194    health_checks         = ["${google_compute_health_check.zero.self_link}"]
   195    region                = "us-central1"
   196  }
   197  
   198  resource "google_compute_health_check" "zero" {
   199    name               = "%s"
   200    check_interval_sec = 1
   201    timeout_sec        = 1
   202  
   203    tcp_health_check {
   204      port = "80"
   205    }
   206  }
   207  `, serviceName, checkName)
   208  }
   209  
   210  func testAccComputeRegionBackendService_basicModified(serviceName, checkOne, checkTwo string) string {
   211  	return fmt.Sprintf(`
   212  resource "google_compute_region_backend_service" "foobar" {
   213      name = "%s"
   214      health_checks = ["${google_compute_health_check.one.self_link}"]
   215      region = "us-central1"
   216  }
   217  
   218  resource "google_compute_health_check" "zero" {
   219      name = "%s"
   220      check_interval_sec = 1
   221      timeout_sec = 1
   222  
   223      tcp_health_check {
   224      }
   225  }
   226  
   227  resource "google_compute_health_check" "one" {
   228      name = "%s"
   229      check_interval_sec = 30
   230      timeout_sec = 30
   231  
   232      tcp_health_check {
   233      }
   234  }
   235  `, serviceName, checkOne, checkTwo)
   236  }
   237  
   238  func testAccComputeRegionBackendService_withBackend(
   239  	serviceName, igName, itName, checkName string, timeout int64) string {
   240  	return fmt.Sprintf(`
   241  resource "google_compute_region_backend_service" "lipsum" {
   242    name        = "%s"
   243    description = "Hello World 1234"
   244    protocol    = "TCP"
   245    region      = "us-central1"
   246    timeout_sec = %v
   247  
   248    backend {
   249      group = "${google_compute_instance_group_manager.foobar.instance_group}"
   250    }
   251  
   252    health_checks = ["${google_compute_health_check.default.self_link}"]
   253  }
   254  
   255  resource "google_compute_instance_group_manager" "foobar" {
   256    name               = "%s"
   257    instance_template  = "${google_compute_instance_template.foobar.self_link}"
   258    base_instance_name = "foobar"
   259    zone               = "us-central1-f"
   260    target_size        = 1
   261  }
   262  
   263  resource "google_compute_instance_template" "foobar" {
   264    name         = "%s"
   265    machine_type = "n1-standard-1"
   266  
   267    network_interface {
   268      network = "default"
   269    }
   270  
   271    disk {
   272      source_image = "debian-8-jessie-v20160803"
   273      auto_delete  = true
   274      boot         = true
   275    }
   276  }
   277  
   278  resource "google_compute_health_check" "default" {
   279    name               = "%s"
   280    check_interval_sec = 1
   281    timeout_sec        = 1
   282  
   283    tcp_health_check {
   284  
   285    }
   286  }
   287  `, serviceName, timeout, igName, itName, checkName)
   288  }
   289  
   290  func testAccComputeRegionBackendService_withSessionAffinity(serviceName, checkName string) string {
   291  	return fmt.Sprintf(`
   292  resource "google_compute_region_backend_service" "foobar" {
   293    name                  = "%s"
   294    health_checks         = ["${google_compute_health_check.zero.self_link}"]
   295    region                = "us-central1"
   296    session_affinity      = "CLIENT_IP"
   297  
   298  }
   299  
   300  resource "google_compute_health_check" "zero" {
   301    name               = "%s"
   302    check_interval_sec = 1
   303    timeout_sec        = 1
   304  
   305    tcp_health_check {
   306      port = "80"
   307    }
   308  }
   309  `, serviceName, checkName)
   310  }