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  }