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  }