github.com/boyvanduuren/terraform@v0.7.0-rc2.0.20160805175930-de822d909c40/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  
    50  	resource.Test(t, resource.TestCase{
    51  		PreCheck:     func() { testAccPreCheck(t) },
    52  		Providers:    testAccProviders,
    53  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
    54  		Steps: []resource.TestStep{
    55  			resource.TestStep{
    56  				Config: testAccComputeBackendService_withBackend(
    57  					serviceName, igName, itName, checkName),
    58  				Check: resource.ComposeTestCheckFunc(
    59  					testAccCheckComputeBackendServiceExists(
    60  						"google_compute_backend_service.lipsum", &svc),
    61  				),
    62  			},
    63  		},
    64  	})
    65  
    66  	if svc.TimeoutSec != 10 {
    67  		t.Errorf("Expected TimeoutSec == 10, got %d", svc.TimeoutSec)
    68  	}
    69  	if svc.Protocol != "HTTP" {
    70  		t.Errorf("Expected Protocol to be HTTP, got %q", svc.Protocol)
    71  	}
    72  	if len(svc.Backends) != 1 {
    73  		t.Errorf("Expected 1 backend, got %d", len(svc.Backends))
    74  	}
    75  }
    76  
    77  func testAccCheckComputeBackendServiceDestroy(s *terraform.State) error {
    78  	config := testAccProvider.Meta().(*Config)
    79  
    80  	for _, rs := range s.RootModule().Resources {
    81  		if rs.Type != "google_compute_backend_service" {
    82  			continue
    83  		}
    84  
    85  		_, err := config.clientCompute.BackendServices.Get(
    86  			config.Project, rs.Primary.ID).Do()
    87  		if err == nil {
    88  			return fmt.Errorf("Backend service still exists")
    89  		}
    90  	}
    91  
    92  	return nil
    93  }
    94  
    95  func testAccCheckComputeBackendServiceExists(n string, svc *compute.BackendService) resource.TestCheckFunc {
    96  	return func(s *terraform.State) error {
    97  		rs, ok := s.RootModule().Resources[n]
    98  		if !ok {
    99  			return fmt.Errorf("Not found: %s", n)
   100  		}
   101  
   102  		if rs.Primary.ID == "" {
   103  			return fmt.Errorf("No ID is set")
   104  		}
   105  
   106  		config := testAccProvider.Meta().(*Config)
   107  
   108  		found, err := config.clientCompute.BackendServices.Get(
   109  			config.Project, rs.Primary.ID).Do()
   110  		if err != nil {
   111  			return err
   112  		}
   113  
   114  		if found.Name != rs.Primary.ID {
   115  			return fmt.Errorf("Backend service not found")
   116  		}
   117  
   118  		*svc = *found
   119  
   120  		return nil
   121  	}
   122  }
   123  
   124  func TestAccComputeBackendService_withCDNEnabled(t *testing.T) {
   125  	serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   126  	checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
   127  	var svc compute.BackendService
   128  
   129  	resource.Test(t, resource.TestCase{
   130  		PreCheck:     func() { testAccPreCheck(t) },
   131  		Providers:    testAccProviders,
   132  		CheckDestroy: testAccCheckComputeBackendServiceDestroy,
   133  		Steps: []resource.TestStep{
   134  			resource.TestStep{
   135  				Config: testAccComputeBackendService_withCDNEnabled(
   136  					serviceName, checkName),
   137  				Check: resource.ComposeTestCheckFunc(
   138  					testAccCheckComputeBackendServiceExists(
   139  						"google_compute_backend_service.foobar", &svc),
   140  				),
   141  			},
   142  		},
   143  	})
   144  
   145  	if svc.EnableCDN != true {
   146  		t.Errorf("Expected EnableCDN == true, got %t", svc.EnableCDN)
   147  	}
   148  }
   149  
   150  func testAccComputeBackendService_basic(serviceName, checkName string) string {
   151  	return fmt.Sprintf(`
   152  resource "google_compute_backend_service" "foobar" {
   153    name          = "%s"
   154    health_checks = ["${google_compute_http_health_check.zero.self_link}"]
   155  }
   156  
   157  resource "google_compute_http_health_check" "zero" {
   158    name               = "%s"
   159    request_path       = "/"
   160    check_interval_sec = 1
   161    timeout_sec        = 1
   162  }
   163  `, serviceName, checkName)
   164  }
   165  
   166  func testAccComputeBackendService_withCDNEnabled(serviceName, checkName string) string {
   167  	return fmt.Sprintf(`
   168  resource "google_compute_backend_service" "foobar" {
   169    name          = "%s"
   170    health_checks = ["${google_compute_http_health_check.zero.self_link}"]
   171    enable_cdn    = true
   172  }
   173  
   174  resource "google_compute_http_health_check" "zero" {
   175    name               = "%s"
   176    request_path       = "/"
   177    check_interval_sec = 1
   178    timeout_sec        = 1
   179  }
   180  `, serviceName, checkName)
   181  }
   182  
   183  func testAccComputeBackendService_basicModified(serviceName, checkOne, checkTwo string) string {
   184  	return fmt.Sprintf(`
   185  resource "google_compute_backend_service" "foobar" {
   186      name = "%s"
   187      health_checks = ["${google_compute_http_health_check.one.self_link}"]
   188  }
   189  
   190  resource "google_compute_http_health_check" "zero" {
   191      name = "%s"
   192      request_path = "/"
   193      check_interval_sec = 1
   194      timeout_sec = 1
   195  }
   196  
   197  resource "google_compute_http_health_check" "one" {
   198      name = "%s"
   199      request_path = "/one"
   200      check_interval_sec = 30
   201      timeout_sec = 30
   202  }
   203  `, serviceName, checkOne, checkTwo)
   204  }
   205  
   206  func testAccComputeBackendService_withBackend(
   207  	serviceName, igName, itName, checkName string) string {
   208  	return fmt.Sprintf(`
   209  resource "google_compute_backend_service" "lipsum" {
   210    name        = "%s"
   211    description = "Hello World 1234"
   212    port_name   = "http"
   213    protocol    = "HTTP"
   214    timeout_sec = 10
   215  
   216    backend {
   217      group = "${google_compute_instance_group_manager.foobar.instance_group}"
   218    }
   219  
   220    health_checks = ["${google_compute_http_health_check.default.self_link}"]
   221  }
   222  
   223  resource "google_compute_instance_group_manager" "foobar" {
   224    name               = "%s"
   225    instance_template  = "${google_compute_instance_template.foobar.self_link}"
   226    base_instance_name = "foobar"
   227    zone               = "us-central1-f"
   228    target_size        = 1
   229  }
   230  
   231  resource "google_compute_instance_template" "foobar" {
   232    name         = "%s"
   233    machine_type = "n1-standard-1"
   234  
   235    network_interface {
   236      network = "default"
   237    }
   238  
   239    disk {
   240      source_image = "debian-7-wheezy-v20160301"
   241      auto_delete  = true
   242      boot         = true
   243    }
   244  }
   245  
   246  resource "google_compute_http_health_check" "default" {
   247    name               = "%s"
   248    request_path       = "/"
   249    check_interval_sec = 1
   250    timeout_sec        = 1
   251  }
   252  `, serviceName, igName, itName, checkName)
   253  }