github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azurerm/resource_arm_traffic_manager_endpoint_test.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "net/http" 6 "path" 7 "testing" 8 9 "github.com/hashicorp/terraform/helper/acctest" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAzureRMTrafficManagerEndpoint_basic(t *testing.T) { 15 ri := acctest.RandInt() 16 config := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_basic, ri, ri, ri, ri, ri, ri, ri) 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testCheckAzureRMTrafficManagerEndpointDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: config, 25 Check: resource.ComposeTestCheckFunc( 26 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testAzure"), 27 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 28 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testAzure", "endpoint_status", "Enabled"), 29 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "endpoint_status", "Enabled"), 30 ), 31 }, 32 }, 33 }) 34 } 35 36 func TestAccAzureRMTrafficManagerEndpoint_disappears(t *testing.T) { 37 ri := acctest.RandInt() 38 config := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_basic, ri, ri, ri, ri, ri, ri, ri) 39 40 resource.Test(t, resource.TestCase{ 41 PreCheck: func() { testAccPreCheck(t) }, 42 Providers: testAccProviders, 43 CheckDestroy: testCheckAzureRMTrafficManagerEndpointDestroy, 44 Steps: []resource.TestStep{ 45 resource.TestStep{ 46 Config: config, 47 Check: resource.ComposeTestCheckFunc( 48 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testAzure"), 49 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 50 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testAzure", "endpoint_status", "Enabled"), 51 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "endpoint_status", "Enabled"), 52 testCheckAzureRMTrafficManagerEndpointDisappears("azurerm_traffic_manager_endpoint.testAzure"), 53 ), 54 ExpectNonEmptyPlan: true, 55 }, 56 }, 57 }) 58 } 59 60 func TestAccAzureRMTrafficManagerEndpoint_basicDisableExternal(t *testing.T) { 61 ri := acctest.RandInt() 62 preConfig := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_basic, ri, ri, ri, ri, ri, ri, ri) 63 postConfig := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_basicDisableExternal, ri, ri, ri, ri, ri, ri, ri) 64 65 resource.Test(t, resource.TestCase{ 66 PreCheck: func() { testAccPreCheck(t) }, 67 Providers: testAccProviders, 68 CheckDestroy: testCheckAzureRMTrafficManagerEndpointDestroy, 69 Steps: []resource.TestStep{ 70 { 71 Config: preConfig, 72 Check: resource.ComposeTestCheckFunc( 73 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testAzure"), 74 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 75 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testAzure", "endpoint_status", "Enabled"), 76 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "endpoint_status", "Enabled"), 77 ), 78 }, 79 { 80 Config: postConfig, 81 Check: resource.ComposeTestCheckFunc( 82 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testAzure"), 83 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 84 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testAzure", "endpoint_status", "Enabled"), 85 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "endpoint_status", "Disabled"), 86 ), 87 }, 88 }, 89 }) 90 } 91 92 // Altering weight might be used to ramp up migration traffic 93 func TestAccAzureRMTrafficManagerEndpoint_updateWeight(t *testing.T) { 94 ri := acctest.RandInt() 95 preConfig := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_weight, ri, ri, ri, ri, ri) 96 postConfig := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_updateWeight, ri, ri, ri, ri, ri) 97 98 resource.Test(t, resource.TestCase{ 99 PreCheck: func() { testAccPreCheck(t) }, 100 Providers: testAccProviders, 101 CheckDestroy: testCheckAzureRMTrafficManagerEndpointDestroy, 102 Steps: []resource.TestStep{ 103 { 104 Config: preConfig, 105 Check: resource.ComposeTestCheckFunc( 106 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 107 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternalNew"), 108 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "weight", "50"), 109 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternalNew", "weight", "50"), 110 ), 111 }, 112 { 113 Config: postConfig, 114 Check: resource.ComposeTestCheckFunc( 115 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 116 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternalNew"), 117 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "weight", "25"), 118 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternalNew", "weight", "75"), 119 ), 120 }, 121 }, 122 }) 123 } 124 125 // Altering priority might be used to switch failover/active roles 126 func TestAccAzureRMTrafficManagerEndpoint_updatePriority(t *testing.T) { 127 ri := acctest.RandInt() 128 preConfig := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_priority, ri, ri, ri, ri, ri) 129 postConfig := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_updatePriority, ri, ri, ri, ri, ri) 130 131 resource.Test(t, resource.TestCase{ 132 PreCheck: func() { testAccPreCheck(t) }, 133 Providers: testAccProviders, 134 CheckDestroy: testCheckAzureRMTrafficManagerEndpointDestroy, 135 Steps: []resource.TestStep{ 136 { 137 Config: preConfig, 138 Check: resource.ComposeTestCheckFunc( 139 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 140 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternalNew"), 141 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "priority", "1"), 142 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternalNew", "priority", "2"), 143 ), 144 }, 145 { 146 Config: postConfig, 147 Check: resource.ComposeTestCheckFunc( 148 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternal"), 149 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.testExternalNew"), 150 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternal", "priority", "3"), 151 resource.TestCheckResourceAttr("azurerm_traffic_manager_endpoint.testExternalNew", "priority", "2"), 152 ), 153 }, 154 }, 155 }) 156 } 157 158 func TestAccAzureRMTrafficManagerEndpoint_nestedEndpoints(t *testing.T) { 159 ri := acctest.RandInt() 160 config := fmt.Sprintf(testAccAzureRMTrafficManagerEndpoint_nestedEndpoints, ri, ri, ri, ri, ri, ri, ri) 161 162 resource.Test(t, resource.TestCase{ 163 PreCheck: func() { testAccPreCheck(t) }, 164 Providers: testAccProviders, 165 CheckDestroy: testCheckAzureRMTrafficManagerEndpointDestroy, 166 Steps: []resource.TestStep{ 167 { 168 Config: config, 169 Check: resource.ComposeTestCheckFunc( 170 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.nested"), 171 testCheckAzureRMTrafficManagerEndpointExists("azurerm_traffic_manager_endpoint.externalChild"), 172 ), 173 }, 174 }, 175 }) 176 } 177 178 func testCheckAzureRMTrafficManagerEndpointExists(name string) resource.TestCheckFunc { 179 return func(s *terraform.State) error { 180 // Ensure we have enough information in state to look up in API 181 rs, ok := s.RootModule().Resources[name] 182 if !ok { 183 return fmt.Errorf("Not found: %s", name) 184 } 185 186 name := rs.Primary.Attributes["name"] 187 endpointType := rs.Primary.Attributes["type"] 188 profileName := rs.Primary.Attributes["profile_name"] 189 resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"] 190 if !hasResourceGroup { 191 return fmt.Errorf("Bad: no resource group found in state for Traffic Manager Profile: %s", name) 192 } 193 194 // Ensure resource group/virtual network combination exists in API 195 conn := testAccProvider.Meta().(*ArmClient).trafficManagerEndpointsClient 196 197 resp, err := conn.Get(resourceGroup, profileName, path.Base(endpointType), name) 198 if err != nil { 199 return fmt.Errorf("Bad: Get on trafficManagerEndpointsClient: %s", err) 200 } 201 202 if resp.StatusCode == http.StatusNotFound { 203 return fmt.Errorf("Bad: Traffic Manager Endpoint %q (resource group: %q) does not exist", name, resourceGroup) 204 } 205 206 return nil 207 } 208 } 209 210 func testCheckAzureRMTrafficManagerEndpointDisappears(name string) resource.TestCheckFunc { 211 return func(s *terraform.State) error { 212 // Ensure we have enough information in state to look up in API 213 rs, ok := s.RootModule().Resources[name] 214 if !ok { 215 return fmt.Errorf("Not found: %s", name) 216 } 217 218 name := rs.Primary.Attributes["name"] 219 endpointType := rs.Primary.Attributes["type"] 220 profileName := rs.Primary.Attributes["profile_name"] 221 resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"] 222 if !hasResourceGroup { 223 return fmt.Errorf("Bad: no resource group found in state for Traffic Manager Profile: %s", name) 224 } 225 226 // Ensure resource group/virtual network combination exists in API 227 conn := testAccProvider.Meta().(*ArmClient).trafficManagerEndpointsClient 228 229 _, err := conn.Delete(resourceGroup, profileName, path.Base(endpointType), name) 230 if err != nil { 231 return fmt.Errorf("Bad: Delete on trafficManagerEndpointsClient: %s", err) 232 } 233 234 return nil 235 } 236 } 237 238 func testCheckAzureRMTrafficManagerEndpointDestroy(s *terraform.State) error { 239 conn := testAccProvider.Meta().(*ArmClient).trafficManagerEndpointsClient 240 241 for _, rs := range s.RootModule().Resources { 242 if rs.Type != "azurerm_traffic_manager_endpoint" { 243 continue 244 } 245 246 name := rs.Primary.Attributes["name"] 247 endpointType := rs.Primary.Attributes["type"] 248 profileName := rs.Primary.Attributes["profile_name"] 249 resourceGroup := rs.Primary.Attributes["resource_group_name"] 250 251 resp, err := conn.Get(resourceGroup, profileName, path.Base(endpointType), name) 252 if err != nil { 253 return nil 254 } 255 256 if resp.StatusCode != http.StatusNotFound { 257 return fmt.Errorf("Traffic Manager Endpoint sitll exists:\n%#v", resp.EndpointProperties) 258 } 259 } 260 261 return nil 262 } 263 264 var testAccAzureRMTrafficManagerEndpoint_basic = ` 265 resource "azurerm_resource_group" "test" { 266 name = "acctestRG-%d" 267 location = "West US" 268 } 269 270 resource "azurerm_traffic_manager_profile" "test" { 271 name = "acctesttmp%d" 272 resource_group_name = "${azurerm_resource_group.test.name}" 273 traffic_routing_method = "Weighted" 274 275 dns_config { 276 relative_name = "acctesttmp%d" 277 ttl = 30 278 } 279 280 monitor_config { 281 protocol = "https" 282 port = 443 283 path = "/" 284 } 285 } 286 287 resource "azurerm_public_ip" "test" { 288 name = "acctestpublicip-%d" 289 location = "West US" 290 resource_group_name = "${azurerm_resource_group.test.name}" 291 public_ip_address_allocation = "static" 292 domain_name_label = "acctestpublicip-%d" 293 } 294 295 resource "azurerm_traffic_manager_endpoint" "testAzure" { 296 name = "acctestend-azure%d" 297 type = "azureEndpoints" 298 target_resource_id = "${azurerm_public_ip.test.id}" 299 weight = 3 300 profile_name = "${azurerm_traffic_manager_profile.test.name}" 301 resource_group_name = "${azurerm_resource_group.test.name}" 302 } 303 304 resource "azurerm_traffic_manager_endpoint" "testExternal" { 305 name = "acctestend-external%d" 306 type = "externalEndpoints" 307 target = "terraform.io" 308 weight = 3 309 profile_name = "${azurerm_traffic_manager_profile.test.name}" 310 resource_group_name = "${azurerm_resource_group.test.name}" 311 } 312 ` 313 314 var testAccAzureRMTrafficManagerEndpoint_basicDisableExternal = ` 315 resource "azurerm_resource_group" "test" { 316 name = "acctestRG-%d" 317 location = "West US" 318 } 319 320 resource "azurerm_traffic_manager_profile" "test" { 321 name = "acctesttmp%d" 322 resource_group_name = "${azurerm_resource_group.test.name}" 323 traffic_routing_method = "Weighted" 324 325 dns_config { 326 relative_name = "acctesttmp%d" 327 ttl = 30 328 } 329 330 monitor_config { 331 protocol = "https" 332 port = 443 333 path = "/" 334 } 335 } 336 337 resource "azurerm_public_ip" "test" { 338 name = "acctestpublicip-%d" 339 location = "West US" 340 resource_group_name = "${azurerm_resource_group.test.name}" 341 public_ip_address_allocation = "static" 342 domain_name_label = "acctestpublicip-%d" 343 } 344 345 resource "azurerm_traffic_manager_endpoint" "testAzure" { 346 name = "acctestend-azure%d" 347 type = "azureEndpoints" 348 target_resource_id = "${azurerm_public_ip.test.id}" 349 weight = 3 350 profile_name = "${azurerm_traffic_manager_profile.test.name}" 351 resource_group_name = "${azurerm_resource_group.test.name}" 352 } 353 354 resource "azurerm_traffic_manager_endpoint" "testExternal" { 355 name = "acctestend-external%d" 356 endpoint_status = "Disabled" 357 type = "externalEndpoints" 358 target = "terraform.io" 359 weight = 3 360 profile_name = "${azurerm_traffic_manager_profile.test.name}" 361 resource_group_name = "${azurerm_resource_group.test.name}" 362 } 363 ` 364 365 var testAccAzureRMTrafficManagerEndpoint_weight = ` 366 resource "azurerm_resource_group" "test" { 367 name = "acctestRG-%d" 368 location = "West US" 369 } 370 371 resource "azurerm_traffic_manager_profile" "test" { 372 name = "acctesttmp%d" 373 resource_group_name = "${azurerm_resource_group.test.name}" 374 traffic_routing_method = "Weighted" 375 376 dns_config { 377 relative_name = "acctesttmp%d" 378 ttl = 30 379 } 380 381 monitor_config { 382 protocol = "https" 383 port = 443 384 path = "/" 385 } 386 } 387 388 resource "azurerm_traffic_manager_endpoint" "testExternal" { 389 name = "acctestend-external%d" 390 type = "externalEndpoints" 391 target = "terraform.io" 392 weight = 50 393 profile_name = "${azurerm_traffic_manager_profile.test.name}" 394 resource_group_name = "${azurerm_resource_group.test.name}" 395 } 396 397 resource "azurerm_traffic_manager_endpoint" "testExternalNew" { 398 name = "acctestend-external%d-2" 399 type = "externalEndpoints" 400 target = "www.terraform.io" 401 weight = 50 402 profile_name = "${azurerm_traffic_manager_profile.test.name}" 403 resource_group_name = "${azurerm_resource_group.test.name}" 404 } 405 ` 406 407 var testAccAzureRMTrafficManagerEndpoint_updateWeight = ` 408 resource "azurerm_resource_group" "test" { 409 name = "acctestRG-%d" 410 location = "West US" 411 } 412 413 resource "azurerm_traffic_manager_profile" "test" { 414 name = "acctesttmp%d" 415 resource_group_name = "${azurerm_resource_group.test.name}" 416 traffic_routing_method = "Weighted" 417 418 dns_config { 419 relative_name = "acctesttmp%d" 420 ttl = 30 421 } 422 423 monitor_config { 424 protocol = "https" 425 port = 443 426 path = "/" 427 } 428 } 429 430 resource "azurerm_traffic_manager_endpoint" "testExternal" { 431 name = "acctestend-external%d" 432 type = "externalEndpoints" 433 target = "terraform.io" 434 weight = 25 435 profile_name = "${azurerm_traffic_manager_profile.test.name}" 436 resource_group_name = "${azurerm_resource_group.test.name}" 437 } 438 439 resource "azurerm_traffic_manager_endpoint" "testExternalNew" { 440 name = "acctestend-external%d-2" 441 type = "externalEndpoints" 442 target = "www.terraform.io" 443 weight = 75 444 profile_name = "${azurerm_traffic_manager_profile.test.name}" 445 resource_group_name = "${azurerm_resource_group.test.name}" 446 } 447 ` 448 449 var testAccAzureRMTrafficManagerEndpoint_priority = ` 450 resource "azurerm_resource_group" "test" { 451 name = "acctestRG-%d" 452 location = "West US" 453 } 454 455 resource "azurerm_traffic_manager_profile" "test" { 456 name = "acctesttmp%d" 457 resource_group_name = "${azurerm_resource_group.test.name}" 458 traffic_routing_method = "Priority" 459 460 dns_config { 461 relative_name = "acctesttmp%d" 462 ttl = 30 463 } 464 465 monitor_config { 466 protocol = "https" 467 port = 443 468 path = "/" 469 } 470 } 471 472 resource "azurerm_traffic_manager_endpoint" "testExternal" { 473 name = "acctestend-external%d" 474 type = "externalEndpoints" 475 target = "terraform.io" 476 priority = 1 477 profile_name = "${azurerm_traffic_manager_profile.test.name}" 478 resource_group_name = "${azurerm_resource_group.test.name}" 479 } 480 481 resource "azurerm_traffic_manager_endpoint" "testExternalNew" { 482 name = "acctestend-external%d-2" 483 type = "externalEndpoints" 484 target = "www.terraform.io" 485 priority = 2 486 profile_name = "${azurerm_traffic_manager_profile.test.name}" 487 resource_group_name = "${azurerm_resource_group.test.name}" 488 } 489 ` 490 491 var testAccAzureRMTrafficManagerEndpoint_updatePriority = ` 492 resource "azurerm_resource_group" "test" { 493 name = "acctestRG-%d" 494 location = "West US" 495 } 496 497 resource "azurerm_traffic_manager_profile" "test" { 498 name = "acctesttmp%d" 499 resource_group_name = "${azurerm_resource_group.test.name}" 500 traffic_routing_method = "Priority" 501 502 dns_config { 503 relative_name = "acctesttmp%d" 504 ttl = 30 505 } 506 507 monitor_config { 508 protocol = "https" 509 port = 443 510 path = "/" 511 } 512 } 513 514 resource "azurerm_traffic_manager_endpoint" "testExternal" { 515 name = "acctestend-external%d" 516 type = "externalEndpoints" 517 target = "terraform.io" 518 priority = 3 519 profile_name = "${azurerm_traffic_manager_profile.test.name}" 520 resource_group_name = "${azurerm_resource_group.test.name}" 521 } 522 523 resource "azurerm_traffic_manager_endpoint" "testExternalNew" { 524 name = "acctestend-external%d-2" 525 type = "externalEndpoints" 526 target = "www.terraform.io" 527 priority = 2 528 profile_name = "${azurerm_traffic_manager_profile.test.name}" 529 resource_group_name = "${azurerm_resource_group.test.name}" 530 } 531 ` 532 533 var testAccAzureRMTrafficManagerEndpoint_nestedEndpoints = ` 534 resource "azurerm_resource_group" "test" { 535 name = "acctestRG-%d" 536 location = "West US" 537 } 538 539 resource "azurerm_traffic_manager_profile" "parent" { 540 name = "acctesttmpparent%d" 541 resource_group_name = "${azurerm_resource_group.test.name}" 542 traffic_routing_method = "Priority" 543 544 dns_config { 545 relative_name = "acctestparent%d" 546 ttl = 30 547 } 548 549 monitor_config { 550 protocol = "https" 551 port = 443 552 path = "/" 553 } 554 } 555 556 resource "azurerm_traffic_manager_profile" "child" { 557 name = "acctesttmpchild%d" 558 resource_group_name = "${azurerm_resource_group.test.name}" 559 traffic_routing_method = "Priority" 560 561 dns_config { 562 relative_name = "acctesttmpchild%d" 563 ttl = 30 564 } 565 566 monitor_config { 567 protocol = "https" 568 port = 443 569 path = "/" 570 } 571 } 572 573 resource "azurerm_traffic_manager_endpoint" "nested" { 574 name = "acctestend-parent%d" 575 type = "nestedEndpoints" 576 target_resource_id = "${azurerm_traffic_manager_profile.child.id}" 577 priority = 1 578 profile_name = "${azurerm_traffic_manager_profile.parent.name}" 579 resource_group_name = "${azurerm_resource_group.test.name}" 580 min_child_endpoints = 1 581 } 582 583 resource "azurerm_traffic_manager_endpoint" "externalChild" { 584 name = "acctestend-child%d" 585 type = "externalEndpoints" 586 target = "terraform.io" 587 priority = 1 588 profile_name = "${azurerm_traffic_manager_profile.child.name}" 589 resource_group_name = "${azurerm_resource_group.test.name}" 590 } 591 `