github.com/pbthorste/terraform@v0.8.6-0.20170127005045-deb56bd93da2/builtin/providers/azurerm/resource_arm_loadbalancer_nat_rule_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 TestAccAzureRMLoadBalancerNatRule_basic(t *testing.T) { 15 var lb network.LoadBalancer 16 ri := acctest.RandInt() 17 natRuleName := fmt.Sprintf("NatRule-%d", ri) 18 19 subscriptionID := os.Getenv("ARM_SUBSCRIPTION_ID") 20 natRule_id := fmt.Sprintf( 21 "/subscriptions/%s/resourceGroups/acctestrg-%d/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-%d/inboundNatRules/%s", 22 subscriptionID, ri, ri, natRuleName) 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: testAccAzureRMLoadBalancerNatRule_basic(ri, natRuleName), 31 Check: resource.ComposeTestCheckFunc( 32 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 33 testCheckAzureRMLoadBalancerNatRuleExists(natRuleName, &lb), 34 resource.TestCheckResourceAttr( 35 "azurerm_lb_nat_rule.test", "id", natRule_id), 36 ), 37 }, 38 }, 39 }) 40 } 41 42 func TestAccAzureRMLoadBalancerNatRule_removal(t *testing.T) { 43 var lb network.LoadBalancer 44 ri := acctest.RandInt() 45 natRuleName := fmt.Sprintf("NatRule-%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: testAccAzureRMLoadBalancerNatRule_basic(ri, natRuleName), 54 Check: resource.ComposeTestCheckFunc( 55 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 56 testCheckAzureRMLoadBalancerNatRuleExists(natRuleName, &lb), 57 ), 58 }, 59 { 60 Config: testAccAzureRMLoadBalancerNatRule_removal(ri), 61 Check: resource.ComposeTestCheckFunc( 62 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 63 testCheckAzureRMLoadBalancerNatRuleNotExists(natRuleName, &lb), 64 ), 65 }, 66 }, 67 }) 68 } 69 70 func TestAccAzureRMLoadBalancerNatRule_update(t *testing.T) { 71 var lb network.LoadBalancer 72 ri := acctest.RandInt() 73 natRuleName := fmt.Sprintf("NatRule-%d", ri) 74 natRule2Name := fmt.Sprintf("NatRule-%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: testAccAzureRMLoadBalancerNatRule_multipleRules(ri, natRuleName, natRule2Name), 83 Check: resource.ComposeTestCheckFunc( 84 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 85 testCheckAzureRMLoadBalancerNatRuleExists(natRuleName, &lb), 86 testCheckAzureRMLoadBalancerNatRuleExists(natRule2Name, &lb), 87 resource.TestCheckResourceAttr("azurerm_lb_nat_rule.test2", "frontend_port", "3390"), 88 resource.TestCheckResourceAttr("azurerm_lb_nat_rule.test2", "backend_port", "3390"), 89 ), 90 }, 91 { 92 Config: testAccAzureRMLoadBalancerNatRule_multipleRulesUpdate(ri, natRuleName, natRule2Name), 93 Check: resource.ComposeTestCheckFunc( 94 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 95 testCheckAzureRMLoadBalancerNatRuleExists(natRuleName, &lb), 96 testCheckAzureRMLoadBalancerNatRuleExists(natRule2Name, &lb), 97 resource.TestCheckResourceAttr("azurerm_lb_nat_rule.test2", "frontend_port", "3391"), 98 resource.TestCheckResourceAttr("azurerm_lb_nat_rule.test2", "backend_port", "3391"), 99 ), 100 }, 101 }, 102 }) 103 } 104 105 func TestAccAzureRMLoadBalancerNatRule_reapply(t *testing.T) { 106 var lb network.LoadBalancer 107 ri := acctest.RandInt() 108 natRuleName := fmt.Sprintf("NatRule-%d", ri) 109 110 deleteNatRuleState := func(s *terraform.State) error { 111 return s.Remove("azurerm_lb_nat_rule.test") 112 } 113 114 resource.Test(t, resource.TestCase{ 115 PreCheck: func() { testAccPreCheck(t) }, 116 Providers: testAccProviders, 117 CheckDestroy: testCheckAzureRMLoadBalancerDestroy, 118 Steps: []resource.TestStep{ 119 { 120 Config: testAccAzureRMLoadBalancerNatRule_basic(ri, natRuleName), 121 Check: resource.ComposeTestCheckFunc( 122 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 123 testCheckAzureRMLoadBalancerNatRuleExists(natRuleName, &lb), 124 deleteNatRuleState, 125 ), 126 ExpectNonEmptyPlan: true, 127 }, 128 { 129 Config: testAccAzureRMLoadBalancerNatRule_basic(ri, natRuleName), 130 Check: resource.ComposeTestCheckFunc( 131 testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb), 132 testCheckAzureRMLoadBalancerNatRuleExists(natRuleName, &lb), 133 ), 134 }, 135 }, 136 }) 137 } 138 139 func testCheckAzureRMLoadBalancerNatRuleExists(natRuleName string, lb *network.LoadBalancer) resource.TestCheckFunc { 140 return func(s *terraform.State) error { 141 _, _, exists := findLoadBalancerNatRuleByName(lb, natRuleName) 142 if !exists { 143 return fmt.Errorf("A NAT Rule with name %q cannot be found.", natRuleName) 144 } 145 146 return nil 147 } 148 } 149 150 func testCheckAzureRMLoadBalancerNatRuleNotExists(natRuleName string, lb *network.LoadBalancer) resource.TestCheckFunc { 151 return func(s *terraform.State) error { 152 _, _, exists := findLoadBalancerNatRuleByName(lb, natRuleName) 153 if exists { 154 return fmt.Errorf("A NAT Rule with name %q has been found.", natRuleName) 155 } 156 157 return nil 158 } 159 } 160 161 func testAccAzureRMLoadBalancerNatRule_basic(rInt int, natRuleName string) string { 162 return fmt.Sprintf(` 163 resource "azurerm_resource_group" "test" { 164 name = "acctestrg-%d" 165 location = "West US" 166 } 167 168 resource "azurerm_public_ip" "test" { 169 name = "test-ip-%d" 170 location = "West US" 171 resource_group_name = "${azurerm_resource_group.test.name}" 172 public_ip_address_allocation = "static" 173 } 174 175 resource "azurerm_lb" "test" { 176 name = "arm-test-loadbalancer-%d" 177 location = "West US" 178 resource_group_name = "${azurerm_resource_group.test.name}" 179 180 frontend_ip_configuration { 181 name = "one-%d" 182 public_ip_address_id = "${azurerm_public_ip.test.id}" 183 } 184 } 185 186 resource "azurerm_lb_nat_rule" "test" { 187 location = "West US" 188 resource_group_name = "${azurerm_resource_group.test.name}" 189 loadbalancer_id = "${azurerm_lb.test.id}" 190 name = "%s" 191 protocol = "Tcp" 192 frontend_port = 3389 193 backend_port = 3389 194 frontend_ip_configuration_name = "one-%d" 195 } 196 197 `, rInt, rInt, rInt, rInt, natRuleName, rInt) 198 } 199 200 func testAccAzureRMLoadBalancerNatRule_removal(rInt int) string { 201 return fmt.Sprintf(` 202 resource "azurerm_resource_group" "test" { 203 name = "acctestrg-%d" 204 location = "West US" 205 } 206 207 resource "azurerm_public_ip" "test" { 208 name = "test-ip-%d" 209 location = "West US" 210 resource_group_name = "${azurerm_resource_group.test.name}" 211 public_ip_address_allocation = "static" 212 } 213 214 resource "azurerm_lb" "test" { 215 name = "arm-test-loadbalancer-%d" 216 location = "West US" 217 resource_group_name = "${azurerm_resource_group.test.name}" 218 219 frontend_ip_configuration { 220 name = "one-%d" 221 public_ip_address_id = "${azurerm_public_ip.test.id}" 222 } 223 } 224 `, rInt, rInt, rInt, rInt) 225 } 226 227 func testAccAzureRMLoadBalancerNatRule_multipleRules(rInt int, natRuleName, natRule2Name string) string { 228 return fmt.Sprintf(` 229 resource "azurerm_resource_group" "test" { 230 name = "acctestrg-%d" 231 location = "West US" 232 } 233 234 resource "azurerm_public_ip" "test" { 235 name = "test-ip-%d" 236 location = "West US" 237 resource_group_name = "${azurerm_resource_group.test.name}" 238 public_ip_address_allocation = "static" 239 } 240 241 resource "azurerm_lb" "test" { 242 name = "arm-test-loadbalancer-%d" 243 location = "West US" 244 resource_group_name = "${azurerm_resource_group.test.name}" 245 246 frontend_ip_configuration { 247 name = "one-%d" 248 public_ip_address_id = "${azurerm_public_ip.test.id}" 249 } 250 } 251 252 resource "azurerm_lb_nat_rule" "test" { 253 location = "West US" 254 resource_group_name = "${azurerm_resource_group.test.name}" 255 loadbalancer_id = "${azurerm_lb.test.id}" 256 name = "%s" 257 protocol = "Tcp" 258 frontend_port = 3389 259 backend_port = 3389 260 frontend_ip_configuration_name = "one-%d" 261 } 262 263 resource "azurerm_lb_nat_rule" "test2" { 264 location = "West US" 265 resource_group_name = "${azurerm_resource_group.test.name}" 266 loadbalancer_id = "${azurerm_lb.test.id}" 267 name = "%s" 268 protocol = "Tcp" 269 frontend_port = 3390 270 backend_port = 3390 271 frontend_ip_configuration_name = "one-%d" 272 } 273 274 `, rInt, rInt, rInt, rInt, natRuleName, rInt, natRule2Name, rInt) 275 } 276 277 func testAccAzureRMLoadBalancerNatRule_multipleRulesUpdate(rInt int, natRuleName, natRule2Name string) string { 278 return fmt.Sprintf(` 279 resource "azurerm_resource_group" "test" { 280 name = "acctestrg-%d" 281 location = "West US" 282 } 283 284 resource "azurerm_public_ip" "test" { 285 name = "test-ip-%d" 286 location = "West US" 287 resource_group_name = "${azurerm_resource_group.test.name}" 288 public_ip_address_allocation = "static" 289 } 290 291 resource "azurerm_lb" "test" { 292 name = "arm-test-loadbalancer-%d" 293 location = "West US" 294 resource_group_name = "${azurerm_resource_group.test.name}" 295 296 frontend_ip_configuration { 297 name = "one-%d" 298 public_ip_address_id = "${azurerm_public_ip.test.id}" 299 } 300 } 301 302 resource "azurerm_lb_nat_rule" "test" { 303 location = "West US" 304 resource_group_name = "${azurerm_resource_group.test.name}" 305 loadbalancer_id = "${azurerm_lb.test.id}" 306 name = "%s" 307 protocol = "Tcp" 308 frontend_port = 3389 309 backend_port = 3389 310 frontend_ip_configuration_name = "one-%d" 311 } 312 313 resource "azurerm_lb_nat_rule" "test2" { 314 location = "West US" 315 resource_group_name = "${azurerm_resource_group.test.name}" 316 loadbalancer_id = "${azurerm_lb.test.id}" 317 name = "%s" 318 protocol = "Tcp" 319 frontend_port = 3391 320 backend_port = 3391 321 frontend_ip_configuration_name = "one-%d" 322 } 323 324 `, rInt, rInt, rInt, rInt, natRuleName, rInt, natRule2Name, rInt) 325 }