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