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