github.com/ves/terraform@v0.8.0-beta2/builtin/providers/azurerm/resource_arm_loadbalancer_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 TestResourceAzureRMLoadBalancerRuleNameLabel_validation(t *testing.T) {
    17  	cases := []struct {
    18  		Value    string
    19  		ErrCount int
    20  	}{
    21  		{
    22  			Value:    "-word",
    23  			ErrCount: 1,
    24  		},
    25  		{
    26  			Value:    "testing-",
    27  			ErrCount: 1,
    28  		},
    29  		{
    30  			Value:    "test#test",
    31  			ErrCount: 1,
    32  		},
    33  		{
    34  			Value:    acctest.RandStringFromCharSet(81, "abcdedfed"),
    35  			ErrCount: 1,
    36  		},
    37  		{
    38  			Value:    "test.rule",
    39  			ErrCount: 0,
    40  		},
    41  		{
    42  			Value:    "test_rule",
    43  			ErrCount: 0,
    44  		},
    45  		{
    46  			Value:    "test-rule",
    47  			ErrCount: 0,
    48  		},
    49  		{
    50  			Value:    "TestRule",
    51  			ErrCount: 0,
    52  		},
    53  		{
    54  			Value:    "Test123Rule",
    55  			ErrCount: 0,
    56  		},
    57  		{
    58  			Value:    "TestRule",
    59  			ErrCount: 0,
    60  		},
    61  	}
    62  
    63  	for _, tc := range cases {
    64  		_, errors := validateArmLoadBalancerRuleName(tc.Value, "azurerm_lb_rule")
    65  
    66  		if len(errors) != tc.ErrCount {
    67  			t.Fatalf("Expected the Azure RM LoadBalancer Rule Name Label to trigger a validation error")
    68  		}
    69  	}
    70  }
    71  
    72  func TestAccAzureRMLoadBalancerRule_basic(t *testing.T) {
    73  	var lb network.LoadBalancer
    74  	ri := acctest.RandInt()
    75  	lbRuleName := fmt.Sprintf("LbRule-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
    76  
    77  	subscriptionID := os.Getenv("ARM_SUBSCRIPTION_ID")
    78  	lbRule_id := fmt.Sprintf(
    79  		"/subscriptions/%s/resourceGroups/acctestrg-%d/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-%d/loadBalancingRules/%s",
    80  		subscriptionID, ri, ri, lbRuleName)
    81  
    82  	resource.Test(t, resource.TestCase{
    83  		PreCheck:     func() { testAccPreCheck(t) },
    84  		Providers:    testAccProviders,
    85  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
    86  		Steps: []resource.TestStep{
    87  			{
    88  				Config: testAccAzureRMLoadBalancerRule_basic(ri, lbRuleName),
    89  				Check: resource.ComposeTestCheckFunc(
    90  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
    91  					testCheckAzureRMLoadBalancerRuleExists(lbRuleName, &lb),
    92  					resource.TestCheckResourceAttr(
    93  						"azurerm_lb_rule.test", "id", lbRule_id),
    94  				),
    95  			},
    96  		},
    97  	})
    98  }
    99  
   100  func TestAccAzureRMLoadBalancerRule_removal(t *testing.T) {
   101  	var lb network.LoadBalancer
   102  	ri := acctest.RandInt()
   103  	lbRuleName := fmt.Sprintf("LbRule-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   104  
   105  	resource.Test(t, resource.TestCase{
   106  		PreCheck:     func() { testAccPreCheck(t) },
   107  		Providers:    testAccProviders,
   108  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
   109  		Steps: []resource.TestStep{
   110  			{
   111  				Config: testAccAzureRMLoadBalancerRule_basic(ri, lbRuleName),
   112  				Check: resource.ComposeTestCheckFunc(
   113  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   114  					testCheckAzureRMLoadBalancerRuleExists(lbRuleName, &lb),
   115  				),
   116  			},
   117  			{
   118  				Config: testAccAzureRMLoadBalancerRule_removal(ri),
   119  				Check: resource.ComposeTestCheckFunc(
   120  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   121  					testCheckAzureRMLoadBalancerRuleNotExists(lbRuleName, &lb),
   122  				),
   123  			},
   124  		},
   125  	})
   126  }
   127  
   128  // https://github.com/hashicorp/terraform/issues/9424
   129  func TestAccAzureRMLoadBalancerRule_inconsistentReads(t *testing.T) {
   130  	var lb network.LoadBalancer
   131  	ri := acctest.RandInt()
   132  	backendPoolName := fmt.Sprintf("LbPool-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   133  	lbRuleName := fmt.Sprintf("LbRule-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   134  	probeName := fmt.Sprintf("LbProbe-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   135  
   136  	resource.Test(t, resource.TestCase{
   137  		PreCheck:     func() { testAccPreCheck(t) },
   138  		Providers:    testAccProviders,
   139  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
   140  		Steps: []resource.TestStep{
   141  			{
   142  				Config: testAccAzureRMLoadBalancerRule_inconsistentRead(ri, backendPoolName, probeName, lbRuleName),
   143  				Check: resource.ComposeTestCheckFunc(
   144  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   145  					testCheckAzureRMLoadBalancerBackEndAddressPoolExists(backendPoolName, &lb),
   146  					testCheckAzureRMLoadBalancerRuleExists(lbRuleName, &lb),
   147  					testCheckAzureRMLoadBalancerProbeExists(probeName, &lb),
   148  				),
   149  			},
   150  		},
   151  	})
   152  }
   153  
   154  func TestAccAzureRMLoadBalancerRule_update(t *testing.T) {
   155  	var lb network.LoadBalancer
   156  	ri := acctest.RandInt()
   157  	lbRuleName := fmt.Sprintf("LbRule-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   158  	lbRule2Name := fmt.Sprintf("LbRule-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   159  
   160  	subscriptionID := os.Getenv("ARM_SUBSCRIPTION_ID")
   161  	lbRuleID := fmt.Sprintf(
   162  		"/subscriptions/%s/resourceGroups/acctestrg-%d/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-%d/loadBalancingRules/%s",
   163  		subscriptionID, ri, ri, lbRuleName)
   164  
   165  	lbRule2ID := fmt.Sprintf(
   166  		"/subscriptions/%s/resourceGroups/acctestrg-%d/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-%d/loadBalancingRules/%s",
   167  		subscriptionID, ri, ri, lbRule2Name)
   168  
   169  	resource.Test(t, resource.TestCase{
   170  		PreCheck:     func() { testAccPreCheck(t) },
   171  		Providers:    testAccProviders,
   172  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
   173  		Steps: []resource.TestStep{
   174  			{
   175  				Config: testAccAzureRMLoadBalancerRule_multipleRules(ri, lbRuleName, lbRule2Name),
   176  				Check: resource.ComposeTestCheckFunc(
   177  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   178  					testCheckAzureRMLoadBalancerRuleExists(lbRuleName, &lb),
   179  					testCheckAzureRMLoadBalancerRuleExists(lbRule2Name, &lb),
   180  					resource.TestCheckResourceAttr("azurerm_lb_rule.test", "id", lbRuleID),
   181  					resource.TestCheckResourceAttr("azurerm_lb_rule.test2", "id", lbRule2ID),
   182  					resource.TestCheckResourceAttr("azurerm_lb_rule.test2", "frontend_port", "3390"),
   183  					resource.TestCheckResourceAttr("azurerm_lb_rule.test2", "backend_port", "3390"),
   184  				),
   185  			},
   186  			{
   187  				Config: testAccAzureRMLoadBalancerRule_multipleRulesUpdate(ri, lbRuleName, lbRule2Name),
   188  				Check: resource.ComposeTestCheckFunc(
   189  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   190  					testCheckAzureRMLoadBalancerRuleExists(lbRuleName, &lb),
   191  					testCheckAzureRMLoadBalancerRuleExists(lbRule2Name, &lb),
   192  					resource.TestCheckResourceAttr("azurerm_lb_rule.test", "id", lbRuleID),
   193  					resource.TestCheckResourceAttr("azurerm_lb_rule.test2", "id", lbRule2ID),
   194  					resource.TestCheckResourceAttr("azurerm_lb_rule.test2", "frontend_port", "3391"),
   195  					resource.TestCheckResourceAttr("azurerm_lb_rule.test2", "backend_port", "3391"),
   196  				),
   197  			},
   198  		},
   199  	})
   200  }
   201  
   202  func TestAccAzureRMLoadBalancerRule_duplicateRules(t *testing.T) {
   203  	var lb network.LoadBalancer
   204  	ri := acctest.RandInt()
   205  	lbRuleName := fmt.Sprintf("LbRule-%s", acctest.RandStringFromCharSet(8, acctest.CharSetAlpha))
   206  
   207  	subscriptionID := os.Getenv("ARM_SUBSCRIPTION_ID")
   208  	lbRuleID := fmt.Sprintf(
   209  		"/subscriptions/%s/resourceGroups/acctestrg-%d/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-%d/loadBalancingRules/%s",
   210  		subscriptionID, ri, ri, lbRuleName)
   211  
   212  	resource.Test(t, resource.TestCase{
   213  		PreCheck:     func() { testAccPreCheck(t) },
   214  		Providers:    testAccProviders,
   215  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
   216  		Steps: []resource.TestStep{
   217  			{
   218  				Config: testAccAzureRMLoadBalancerRule_multipleRules(ri, lbRuleName, lbRuleName),
   219  				Check: resource.ComposeTestCheckFunc(
   220  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   221  					testCheckAzureRMLoadBalancerRuleExists(lbRuleName, &lb),
   222  					resource.TestCheckResourceAttr("azurerm_lb_rule.test", "id", lbRuleID),
   223  				),
   224  				ExpectError: regexp.MustCompile(fmt.Sprintf("A LoadBalancer Rule with name %q already exists.", lbRuleName)),
   225  			},
   226  		},
   227  	})
   228  }
   229  
   230  func testCheckAzureRMLoadBalancerRuleExists(lbRuleName string, lb *network.LoadBalancer) resource.TestCheckFunc {
   231  	return func(s *terraform.State) error {
   232  		_, _, exists := findLoadBalancerRuleByName(lb, lbRuleName)
   233  		if !exists {
   234  			return fmt.Errorf("A LoadBalancer Rule with name %q cannot be found.", lbRuleName)
   235  		}
   236  
   237  		return nil
   238  	}
   239  }
   240  
   241  func testCheckAzureRMLoadBalancerRuleNotExists(lbRuleName string, lb *network.LoadBalancer) resource.TestCheckFunc {
   242  	return func(s *terraform.State) error {
   243  		_, _, exists := findLoadBalancerRuleByName(lb, lbRuleName)
   244  		if exists {
   245  			return fmt.Errorf("A LoadBalancer Rule with name %q has been found.", lbRuleName)
   246  		}
   247  
   248  		return nil
   249  	}
   250  }
   251  
   252  func testAccAzureRMLoadBalancerRule_basic(rInt int, lbRuleName string) string {
   253  	return fmt.Sprintf(`
   254  resource "azurerm_resource_group" "test" {
   255      name = "acctestrg-%d"
   256      location = "West US"
   257  }
   258  
   259  resource "azurerm_public_ip" "test" {
   260      name = "test-ip-%d"
   261      location = "West US"
   262      resource_group_name = "${azurerm_resource_group.test.name}"
   263      public_ip_address_allocation = "static"
   264  }
   265  
   266  resource "azurerm_lb" "test" {
   267      name = "arm-test-loadbalancer-%d"
   268      location = "West US"
   269      resource_group_name = "${azurerm_resource_group.test.name}"
   270  
   271      frontend_ip_configuration {
   272        name = "one-%d"
   273        public_ip_address_id = "${azurerm_public_ip.test.id}"
   274      }
   275  }
   276  
   277  resource "azurerm_lb_rule" "test" {
   278    location = "West US"
   279    resource_group_name = "${azurerm_resource_group.test.name}"
   280    loadbalancer_id = "${azurerm_lb.test.id}"
   281    name = "%s"
   282    protocol = "Tcp"
   283    frontend_port = 3389
   284    backend_port = 3389
   285    frontend_ip_configuration_name = "one-%d"
   286  }
   287  
   288  `, rInt, rInt, rInt, rInt, lbRuleName, rInt)
   289  }
   290  
   291  func testAccAzureRMLoadBalancerRule_removal(rInt int) string {
   292  	return fmt.Sprintf(`
   293  resource "azurerm_resource_group" "test" {
   294      name = "acctestrg-%d"
   295      location = "West US"
   296  }
   297  
   298  resource "azurerm_public_ip" "test" {
   299      name = "test-ip-%d"
   300      location = "West US"
   301      resource_group_name = "${azurerm_resource_group.test.name}"
   302      public_ip_address_allocation = "static"
   303  }
   304  
   305  resource "azurerm_lb" "test" {
   306      name = "arm-test-loadbalancer-%d"
   307      location = "West US"
   308      resource_group_name = "${azurerm_resource_group.test.name}"
   309  
   310      frontend_ip_configuration {
   311        name = "one-%d"
   312        public_ip_address_id = "${azurerm_public_ip.test.id}"
   313      }
   314  }
   315  `, rInt, rInt, rInt, rInt)
   316  }
   317  
   318  // https://github.com/hashicorp/terraform/issues/9424
   319  func testAccAzureRMLoadBalancerRule_inconsistentRead(rInt int, backendPoolName, probeName, lbRuleName string) string {
   320  	return fmt.Sprintf(`
   321  resource "azurerm_resource_group" "test" {
   322      name = "acctestrg-%d"
   323      location = "West US"
   324  }
   325  
   326  resource "azurerm_public_ip" "test" {
   327      name = "test-ip-%d"
   328      location = "West US"
   329      resource_group_name = "${azurerm_resource_group.test.name}"
   330      public_ip_address_allocation = "static"
   331  }
   332  
   333  resource "azurerm_lb" "test" {
   334      name = "arm-test-loadbalancer-%d"
   335      location = "West US"
   336      resource_group_name = "${azurerm_resource_group.test.name}"
   337  
   338      frontend_ip_configuration {
   339        name = "one-%d"
   340        public_ip_address_id = "${azurerm_public_ip.test.id}"
   341      }
   342  }
   343  
   344  resource "azurerm_lb_backend_address_pool" "teset" {
   345    name                = "%s"
   346    location            = "West US"
   347    resource_group_name = "${azurerm_resource_group.test.name}"
   348    loadbalancer_id     = "${azurerm_lb.test.id}"
   349  }
   350  
   351  resource "azurerm_lb_probe" "test" {
   352    name                = "%s"
   353    location            = "West US"
   354    resource_group_name = "${azurerm_resource_group.test.name}"
   355    loadbalancer_id     = "${azurerm_lb.test.id}"
   356    protocol            = "Tcp"
   357    port                = 443
   358  }
   359  
   360  resource "azurerm_lb_rule" "test" {
   361    name = "%s"
   362    location = "West US"
   363    resource_group_name = "${azurerm_resource_group.test.name}"
   364    loadbalancer_id = "${azurerm_lb.test.id}"
   365    protocol = "Tcp"
   366    frontend_port = 3389
   367    backend_port = 3389
   368    frontend_ip_configuration_name = "one-%d"
   369  }
   370  `, rInt, rInt, rInt, rInt, backendPoolName, probeName, lbRuleName, rInt)
   371  }
   372  
   373  func testAccAzureRMLoadBalancerRule_multipleRules(rInt int, lbRuleName, lbRule2Name string) string {
   374  	return fmt.Sprintf(`
   375  resource "azurerm_resource_group" "test" {
   376      name = "acctestrg-%d"
   377      location = "West US"
   378  }
   379  
   380  resource "azurerm_public_ip" "test" {
   381      name = "test-ip-%d"
   382      location = "West US"
   383      resource_group_name = "${azurerm_resource_group.test.name}"
   384      public_ip_address_allocation = "static"
   385  }
   386  
   387  resource "azurerm_lb" "test" {
   388      name = "arm-test-loadbalancer-%d"
   389      location = "West US"
   390      resource_group_name = "${azurerm_resource_group.test.name}"
   391  
   392      frontend_ip_configuration {
   393        name = "one-%d"
   394        public_ip_address_id = "${azurerm_public_ip.test.id}"
   395      }
   396  }
   397  
   398  resource "azurerm_lb_rule" "test" {
   399    location = "West US"
   400    resource_group_name = "${azurerm_resource_group.test.name}"
   401    loadbalancer_id = "${azurerm_lb.test.id}"
   402    name = "%s"
   403    protocol = "Udp"
   404    frontend_port = 3389
   405    backend_port = 3389
   406    frontend_ip_configuration_name = "one-%d"
   407  }
   408  
   409  resource "azurerm_lb_rule" "test2" {
   410    location = "West US"
   411    resource_group_name = "${azurerm_resource_group.test.name}"
   412    loadbalancer_id = "${azurerm_lb.test.id}"
   413    name = "%s"
   414    protocol = "Udp"
   415    frontend_port = 3390
   416    backend_port = 3390
   417    frontend_ip_configuration_name = "one-%d"
   418  }
   419  
   420  `, rInt, rInt, rInt, rInt, lbRuleName, rInt, lbRule2Name, rInt)
   421  }
   422  
   423  func testAccAzureRMLoadBalancerRule_multipleRulesUpdate(rInt int, lbRuleName, lbRule2Name string) string {
   424  	return fmt.Sprintf(`
   425  resource "azurerm_resource_group" "test" {
   426      name = "acctestrg-%d"
   427      location = "West US"
   428  }
   429  
   430  resource "azurerm_public_ip" "test" {
   431      name = "test-ip-%d"
   432      location = "West US"
   433      resource_group_name = "${azurerm_resource_group.test.name}"
   434      public_ip_address_allocation = "static"
   435  }
   436  
   437  resource "azurerm_lb" "test" {
   438      name = "arm-test-loadbalancer-%d"
   439      location = "West US"
   440      resource_group_name = "${azurerm_resource_group.test.name}"
   441  
   442      frontend_ip_configuration {
   443        name = "one-%d"
   444        public_ip_address_id = "${azurerm_public_ip.test.id}"
   445      }
   446  }
   447  
   448  resource "azurerm_lb_rule" "test" {
   449    location = "West US"
   450    resource_group_name = "${azurerm_resource_group.test.name}"
   451    loadbalancer_id = "${azurerm_lb.test.id}"
   452    name = "%s"
   453    protocol = "Udp"
   454    frontend_port = 3389
   455    backend_port = 3389
   456    frontend_ip_configuration_name = "one-%d"
   457  }
   458  
   459  resource "azurerm_lb_rule" "test2" {
   460    location = "West US"
   461    resource_group_name = "${azurerm_resource_group.test.name}"
   462    loadbalancer_id = "${azurerm_lb.test.id}"
   463    name = "%s"
   464    protocol = "Udp"
   465    frontend_port = 3391
   466    backend_port = 3391
   467    frontend_ip_configuration_name = "one-%d"
   468  }
   469  
   470  `, rInt, rInt, rInt, rInt, lbRuleName, rInt, lbRule2Name, rInt)
   471  }