github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/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_basic(serviceName, checkName string) string {
   125  	return fmt.Sprintf(`
   126  resource "google_compute_backend_service" "foobar" {
   127    name          = "%s"
   128    health_checks = ["${google_compute_http_health_check.zero.self_link}"]
   129  }
   130  
   131  resource "google_compute_http_health_check" "zero" {
   132    name               = "%s"
   133    request_path       = "/"
   134    check_interval_sec = 1
   135    timeout_sec        = 1
   136  }
   137  `, serviceName, checkName)
   138  }
   139  
   140  func testAccComputeBackendService_basicModified(serviceName, checkOne, checkTwo string) string {
   141  	return fmt.Sprintf(`
   142  resource "google_compute_backend_service" "foobar" {
   143      name = "%s"
   144      health_checks = ["${google_compute_http_health_check.one.self_link}"]
   145  }
   146  
   147  resource "google_compute_http_health_check" "zero" {
   148      name = "%s"
   149      request_path = "/"
   150      check_interval_sec = 1
   151      timeout_sec = 1
   152  }
   153  
   154  resource "google_compute_http_health_check" "one" {
   155      name = "%s"
   156      request_path = "/one"
   157      check_interval_sec = 30
   158      timeout_sec = 30
   159  }
   160  `, serviceName, checkOne, checkTwo)
   161  }
   162  
   163  func testAccComputeBackendService_withBackend(
   164  	serviceName, igName, itName, checkName string) string {
   165  	return fmt.Sprintf(`
   166  resource "google_compute_backend_service" "lipsum" {
   167    name        = "%s"
   168    description = "Hello World 1234"
   169    port_name   = "http"
   170    protocol    = "HTTP"
   171    timeout_sec = 10
   172  
   173    backend {
   174      group = "${google_compute_instance_group_manager.foobar.instance_group}"
   175    }
   176  
   177    health_checks = ["${google_compute_http_health_check.default.self_link}"]
   178  }
   179  
   180  resource "google_compute_instance_group_manager" "foobar" {
   181    name               = "%s"
   182    instance_template  = "${google_compute_instance_template.foobar.self_link}"
   183    base_instance_name = "foobar"
   184    zone               = "us-central1-f"
   185    target_size        = 1
   186  }
   187  
   188  resource "google_compute_instance_template" "foobar" {
   189    name         = "%s"
   190    machine_type = "n1-standard-1"
   191  
   192    network_interface {
   193      network = "default"
   194    }
   195  
   196    disk {
   197      source_image = "debian-7-wheezy-v20140814"
   198      auto_delete  = true
   199      boot         = true
   200    }
   201  }
   202  
   203  resource "google_compute_http_health_check" "default" {
   204    name               = "%s"
   205    request_path       = "/"
   206    check_interval_sec = 1
   207    timeout_sec        = 1
   208  }
   209  `, serviceName, igName, itName, checkName)
   210  }