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  }