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