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 }