github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azurerm/resource_arm_loadbalancer_probe_test.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/Azure/azure-sdk-for-go/arm/network" 9 "github.com/hashicorp/terraform/helper/acctest" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAzureRMLoadBalancerProbe_basic(t *testing.T) { 15 var lb network.LoadBalancer 16 ri := acctest.RandInt() 17 probeName := fmt.Sprintf("probe-%d", ri) 18 19 subscriptionID := os.Getenv("ARM_SUBSCRIPTION_ID") 20 probe_id := fmt.Sprintf( 21 "/subscriptions/%s/resourceGroups/acctestrg-%d/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-%d/probes/%s", 22 subscriptionID, ri, ri, probeName) 23 24 resource.Test(t, resource.TestCase{ 25 PreCheck: func() { testAccPreCheck(t) }, 26 Providers: testAccProviders, 27 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 28 Steps: []resource.TestStep{ 29 { 30 Config: testAccAzureRMLoadBalancerProbe_basic(ri, probeName), 31 Check: resource.ComposeTestCheckFunc( 32 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 33 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 34 resource.TestCheckResourceAttr( 35 "azurerm_lb_probe.test", "id", probe_id), 36 ), 37 }, 38 }, 39 }) 40 } 41 42 func TestAccAzureRMLoadBalancerProbe_removal(t *testing.T) { 43 var lb network.LoadBalancer 44 ri := acctest.RandInt() 45 probeName := fmt.Sprintf("probe-%d", ri) 46 47 resource.Test(t, resource.TestCase{ 48 PreCheck: func() { testAccPreCheck(t) }, 49 Providers: testAccProviders, 50 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 51 Steps: []resource.TestStep{ 52 { 53 Config: testAccAzureRMLoadBalancerProbe_basic(ri, probeName), 54 Check: resource.ComposeTestCheckFunc( 55 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 56 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 57 ), 58 }, 59 { 60 Config: testAccAzureRMLoadBalancerProbe_removal(ri), 61 Check: resource.ComposeTestCheckFunc( 62 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 63 testCheckAzureRMLoadBalancerProbeNotExists(probeName, &lb), 64 ), 65 }, 66 }, 67 }) 68 } 69 70 func TestAccAzureRMLoadBalancerProbe_update(t *testing.T) { 71 var lb network.LoadBalancer 72 ri := acctest.RandInt() 73 probeName := fmt.Sprintf("probe-%d", ri) 74 probe2Name := fmt.Sprintf("probe-%d", acctest.RandInt()) 75 76 resource.Test(t, resource.TestCase{ 77 PreCheck: func() { testAccPreCheck(t) }, 78 Providers: testAccProviders, 79 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 80 Steps: []resource.TestStep{ 81 { 82 Config: testAccAzureRMLoadBalancerProbe_multipleProbes(ri, probeName, probe2Name), 83 Check: resource.ComposeTestCheckFunc( 84 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 85 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 86 testCheckAzureRMLoadBalancerProbeExists(probe2Name, &lb), 87 resource.TestCheckResourceAttr("azurerm_lb_probe.test2", "port", "80"), 88 ), 89 }, 90 { 91 Config: testAccAzureRMLoadBalancerProbe_multipleProbesUpdate(ri, probeName, probe2Name), 92 Check: resource.ComposeTestCheckFunc( 93 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 94 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 95 testCheckAzureRMLoadBalancerProbeExists(probe2Name, &lb), 96 resource.TestCheckResourceAttr("azurerm_lb_probe.test2", "port", "8080"), 97 ), 98 }, 99 }, 100 }) 101 } 102 103 func TestAccAzureRMLoadBalancerProbe_updateProtocol(t *testing.T) { 104 var lb network.LoadBalancer 105 ri := acctest.RandInt() 106 probeName := fmt.Sprintf("probe-%d", ri) 107 108 resource.Test(t, resource.TestCase{ 109 PreCheck: func() { testAccPreCheck(t) }, 110 Providers: testAccProviders, 111 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 112 Steps: []resource.TestStep{ 113 { 114 Config: testAccAzureRMLoadBalancerProbe_updateProtocolBefore(ri, probeName), 115 Check: resource.ComposeTestCheckFunc( 116 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 117 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 118 resource.TestCheckResourceAttr("azurerm_lb_probe.test", "protocol", "Http"), 119 ), 120 }, 121 { 122 Config: testAccAzureRMLoadBalancerProbe_updateProtocolAfter(ri, probeName), 123 Check: resource.ComposeTestCheckFunc( 124 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 125 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 126 resource.TestCheckResourceAttr("azurerm_lb_probe.test", "protocol", "Tcp"), 127 ), 128 }, 129 }, 130 }) 131 } 132 133 func TestAccAzureRMLoadBalancerProbe_reapply(t *testing.T) { 134 var lb network.LoadBalancer 135 ri := acctest.RandInt() 136 probeName := fmt.Sprintf("probe-%d", ri) 137 138 deleteProbeState := func(s *terraform.State) error { 139 return s.Remove("azurerm_lb_probe.test") 140 } 141 142 resource.Test(t, resource.TestCase{ 143 PreCheck: func() { testAccPreCheck(t) }, 144 Providers: testAccProviders, 145 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 146 Steps: []resource.TestStep{ 147 { 148 Config: testAccAzureRMLoadBalancerProbe_basic(ri, probeName), 149 Check: resource.ComposeTestCheckFunc( 150 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 151 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 152 deleteProbeState, 153 ), 154 ExpectNonEmptyPlan: true, 155 }, 156 { 157 Config: testAccAzureRMLoadBalancerProbe_basic(ri, probeName), 158 Check: resource.ComposeTestCheckFunc( 159 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 160 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 161 ), 162 }, 163 }, 164 }) 165 } 166 167 func TestAccAzureRMLoadBalancerProbe_disappears(t *testing.T) { 168 var lb network.LoadBalancer 169 ri := acctest.RandInt() 170 probeName := fmt.Sprintf("probe-%d", ri) 171 172 resource.Test(t, resource.TestCase{ 173 PreCheck: func() { testAccPreCheck(t) }, 174 Providers: testAccProviders, 175 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 176 Steps: []resource.TestStep{ 177 { 178 Config: testAccAzureRMLoadBalancerProbe_basic(ri, probeName), 179 Check: resource.ComposeTestCheckFunc( 180 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 181 testCheckAzureRMLoadBalancerProbeExists(probeName, &lb), 182 testCheckAzureRMLoadBalancerProbeDisappears(probeName, &lb), 183 ), 184 ExpectNonEmptyPlan: true, 185 }, 186 }, 187 }) 188 } 189 190 func testCheckAzureRMLoadBalancerProbeExists(natRuleName string, lb *network.LoadBalancer) resource.TestCheckFunc { 191 return func(s *terraform.State) error { 192 _, _, exists := findLoadBalancerProbeByName(lb, natRuleName) 193 if !exists { 194 return fmt.Errorf("A Probe with name %q cannot be found.", natRuleName) 195 } 196 197 return nil 198 } 199 } 200 201 func testCheckAzureRMLoadBalancerProbeNotExists(natRuleName string, lb *network.LoadBalancer) resource.TestCheckFunc { 202 return func(s *terraform.State) error { 203 _, _, exists := findLoadBalancerProbeByName(lb, natRuleName) 204 if exists { 205 return fmt.Errorf("A Probe with name %q has been found.", natRuleName) 206 } 207 208 return nil 209 } 210 } 211 212 func testCheckAzureRMLoadBalancerProbeDisappears(addressPoolName string, lb *network.LoadBalancer) resource.TestCheckFunc { 213 return func(s *terraform.State) error { 214 conn := testAccProvider.Meta().(*ArmClient).loadBalancerClient 215 216 _, i, exists := findLoadBalancerProbeByName(lb, addressPoolName) 217 if !exists { 218 return fmt.Errorf("A Probe with name %q cannot be found.", addressPoolName) 219 } 220 221 currentProbes := *lb.LoadBalancerPropertiesFormat.Probes 222 probes := append(currentProbes[:i], currentProbes[i+1:]...) 223 lb.LoadBalancerPropertiesFormat.Probes = &probes 224 225 id, err := parseAzureResourceID(*lb.ID) 226 if err != nil { 227 return err 228 } 229 230 _, err = conn.CreateOrUpdate(id.ResourceGroup, *lb.Name, *lb, make(chan struct{})) 231 if err != nil { 232 return fmt.Errorf("Error Creating/Updating LoadBalancer %s", err) 233 } 234 235 _, err = conn.Get(id.ResourceGroup, *lb.Name, "") 236 return err 237 } 238 } 239 240 func testAccAzureRMLoadBalancerProbe_basic(rInt int, probeName string) string { 241 return fmt.Sprintf(` 242 resource "azurerm_resource_group" "test" { 243 name = "acctestrg-%d" 244 location = "West US" 245 } 246 247 resource "azurerm_public_ip" "test" { 248 name = "test-ip-%d" 249 location = "West US" 250 resource_group_name = "${azurerm_resource_group.test.name}" 251 public_ip_address_allocation = "static" 252 } 253 254 resource "azurerm_lb" "test" { 255 name = "arm-test-loadbalancer-%d" 256 location = "West US" 257 resource_group_name = "${azurerm_resource_group.test.name}" 258 259 frontend_ip_configuration { 260 name = "one-%d" 261 public_ip_address_id = "${azurerm_public_ip.test.id}" 262 } 263 } 264 265 resource "azurerm_lb_probe" "test" { 266 location = "West US" 267 resource_group_name = "${azurerm_resource_group.test.name}" 268 loadbalancer_id = "${azurerm_lb.test.id}" 269 name = "%s" 270 port = 22 271 } 272 `, rInt, rInt, rInt, rInt, probeName) 273 } 274 275 func testAccAzureRMLoadBalancerProbe_removal(rInt int) string { 276 return fmt.Sprintf(` 277 resource "azurerm_resource_group" "test" { 278 name = "acctestrg-%d" 279 location = "West US" 280 } 281 282 resource "azurerm_public_ip" "test" { 283 name = "test-ip-%d" 284 location = "West US" 285 resource_group_name = "${azurerm_resource_group.test.name}" 286 public_ip_address_allocation = "static" 287 } 288 289 resource "azurerm_lb" "test" { 290 name = "arm-test-loadbalancer-%d" 291 location = "West US" 292 resource_group_name = "${azurerm_resource_group.test.name}" 293 294 frontend_ip_configuration { 295 name = "one-%d" 296 public_ip_address_id = "${azurerm_public_ip.test.id}" 297 } 298 } 299 `, rInt, rInt, rInt, rInt) 300 } 301 302 func testAccAzureRMLoadBalancerProbe_multipleProbes(rInt int, probeName, probe2Name string) string { 303 return fmt.Sprintf(` 304 resource "azurerm_resource_group" "test" { 305 name = "acctestrg-%d" 306 location = "West US" 307 } 308 309 resource "azurerm_public_ip" "test" { 310 name = "test-ip-%d" 311 location = "West US" 312 resource_group_name = "${azurerm_resource_group.test.name}" 313 public_ip_address_allocation = "static" 314 } 315 316 resource "azurerm_lb" "test" { 317 name = "arm-test-loadbalancer-%d" 318 location = "West US" 319 resource_group_name = "${azurerm_resource_group.test.name}" 320 321 frontend_ip_configuration { 322 name = "one-%d" 323 public_ip_address_id = "${azurerm_public_ip.test.id}" 324 } 325 } 326 327 resource "azurerm_lb_probe" "test" { 328 location = "West US" 329 resource_group_name = "${azurerm_resource_group.test.name}" 330 loadbalancer_id = "${azurerm_lb.test.id}" 331 name = "%s" 332 port = 22 333 } 334 335 resource "azurerm_lb_probe" "test2" { 336 location = "West US" 337 resource_group_name = "${azurerm_resource_group.test.name}" 338 loadbalancer_id = "${azurerm_lb.test.id}" 339 name = "%s" 340 port = 80 341 } 342 `, rInt, rInt, rInt, rInt, probeName, probe2Name) 343 } 344 345 func testAccAzureRMLoadBalancerProbe_multipleProbesUpdate(rInt int, probeName, probe2Name string) string { 346 return fmt.Sprintf(` 347 resource "azurerm_resource_group" "test" { 348 name = "acctestrg-%d" 349 location = "West US" 350 } 351 352 resource "azurerm_public_ip" "test" { 353 name = "test-ip-%d" 354 location = "West US" 355 resource_group_name = "${azurerm_resource_group.test.name}" 356 public_ip_address_allocation = "static" 357 } 358 359 resource "azurerm_lb" "test" { 360 name = "arm-test-loadbalancer-%d" 361 location = "West US" 362 resource_group_name = "${azurerm_resource_group.test.name}" 363 364 frontend_ip_configuration { 365 name = "one-%d" 366 public_ip_address_id = "${azurerm_public_ip.test.id}" 367 } 368 } 369 370 resource "azurerm_lb_probe" "test" { 371 location = "West US" 372 resource_group_name = "${azurerm_resource_group.test.name}" 373 loadbalancer_id = "${azurerm_lb.test.id}" 374 name = "%s" 375 port = 22 376 } 377 378 resource "azurerm_lb_probe" "test2" { 379 location = "West US" 380 resource_group_name = "${azurerm_resource_group.test.name}" 381 loadbalancer_id = "${azurerm_lb.test.id}" 382 name = "%s" 383 port = 8080 384 } 385 `, rInt, rInt, rInt, rInt, probeName, probe2Name) 386 } 387 388 func testAccAzureRMLoadBalancerProbe_updateProtocolBefore(rInt int, probeName string) string { 389 return fmt.Sprintf(` 390 resource "azurerm_resource_group" "test" { 391 name = "acctestrg-%d" 392 location = "West US" 393 } 394 395 resource "azurerm_public_ip" "test" { 396 name = "test-ip-%d" 397 location = "West US" 398 resource_group_name = "${azurerm_resource_group.test.name}" 399 public_ip_address_allocation = "static" 400 } 401 402 resource "azurerm_lb" "test" { 403 name = "arm-test-loadbalancer-%d" 404 location = "West US" 405 resource_group_name = "${azurerm_resource_group.test.name}" 406 407 frontend_ip_configuration { 408 name = "one-%d" 409 public_ip_address_id = "${azurerm_public_ip.test.id}" 410 } 411 } 412 413 resource "azurerm_lb_probe" "test" { 414 location = "West US" 415 resource_group_name = "${azurerm_resource_group.test.name}" 416 loadbalancer_id = "${azurerm_lb.test.id}" 417 name = "%s" 418 protocol = "Http" 419 request_path = "/" 420 port = 80 421 } 422 `, rInt, rInt, rInt, rInt, probeName) 423 } 424 425 func testAccAzureRMLoadBalancerProbe_updateProtocolAfter(rInt int, probeName string) string { 426 return fmt.Sprintf(` 427 resource "azurerm_resource_group" "test" { 428 name = "acctestrg-%d" 429 location = "West US" 430 } 431 432 resource "azurerm_public_ip" "test" { 433 name = "test-ip-%d" 434 location = "West US" 435 resource_group_name = "${azurerm_resource_group.test.name}" 436 public_ip_address_allocation = "static" 437 } 438 439 resource "azurerm_lb" "test" { 440 name = "arm-test-loadbalancer-%d" 441 location = "West US" 442 resource_group_name = "${azurerm_resource_group.test.name}" 443 444 frontend_ip_configuration { 445 name = "one-%d" 446 public_ip_address_id = "${azurerm_public_ip.test.id}" 447 } 448 } 449 450 resource "azurerm_lb_probe" "test" { 451 location = "West US" 452 resource_group_name = "${azurerm_resource_group.test.name}" 453 loadbalancer_id = "${azurerm_lb.test.id}" 454 name = "%s" 455 protocol = "Tcp" 456 port = 80 457 } 458 `, rInt, rInt, rInt, rInt, probeName) 459 }