github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azurerm/resource_arm_loadbalancer_test.go (about)

     1  package azurerm
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     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 TestResourceAzureRMLoadBalancerPrivateIpAddressAllocation_validation(t *testing.T) {
    15  	cases := []struct {
    16  		Value    string
    17  		ErrCount int
    18  	}{
    19  		{
    20  			Value:    "Random",
    21  			ErrCount: 1,
    22  		},
    23  		{
    24  			Value:    "Static",
    25  			ErrCount: 0,
    26  		},
    27  		{
    28  			Value:    "Dynamic",
    29  			ErrCount: 0,
    30  		},
    31  		{
    32  			Value:    "STATIC",
    33  			ErrCount: 0,
    34  		},
    35  		{
    36  			Value:    "static",
    37  			ErrCount: 0,
    38  		},
    39  	}
    40  
    41  	for _, tc := range cases {
    42  		_, errors := validateLoadBalancerPrivateIpAddressAllocation(tc.Value, "azurerm_lb")
    43  
    44  		if len(errors) != tc.ErrCount {
    45  			t.Fatalf("Expected the Azure RM LoadBalancer private_ip_address_allocation to trigger a validation error")
    46  		}
    47  	}
    48  }
    49  
    50  func TestAccAzureRMLoadBalancer_basic(t *testing.T) {
    51  	var lb network.LoadBalancer
    52  	ri := acctest.RandInt()
    53  
    54  	resource.Test(t, resource.TestCase{
    55  		PreCheck:     func() { testAccPreCheck(t) },
    56  		Providers:    testAccProviders,
    57  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
    58  		Steps: []resource.TestStep{
    59  			{
    60  				Config: testAccAzureRMLoadBalancer_basic(ri),
    61  				Check: resource.ComposeTestCheckFunc(
    62  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
    63  				),
    64  			},
    65  		},
    66  	})
    67  }
    68  
    69  func TestAccAzureRMLoadBalancer_frontEndConfig(t *testing.T) {
    70  	var lb network.LoadBalancer
    71  	ri := acctest.RandInt()
    72  
    73  	resource.Test(t, resource.TestCase{
    74  		PreCheck:     func() { testAccPreCheck(t) },
    75  		Providers:    testAccProviders,
    76  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
    77  		Steps: []resource.TestStep{
    78  			{
    79  				Config: testAccAzureRMLoadBalancer_frontEndConfig(ri),
    80  				Check: resource.ComposeTestCheckFunc(
    81  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
    82  					resource.TestCheckResourceAttr(
    83  						"azurerm_lb.test", "frontend_ip_configuration.#", "2"),
    84  				),
    85  			},
    86  			{
    87  				Config: testAccAzureRMLoadBalancer_frontEndConfigRemoval(ri),
    88  				Check: resource.ComposeTestCheckFunc(
    89  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
    90  					resource.TestCheckResourceAttr(
    91  						"azurerm_lb.test", "frontend_ip_configuration.#", "1"),
    92  				),
    93  			},
    94  		},
    95  	})
    96  }
    97  
    98  func TestAccAzureRMLoadBalancer_tags(t *testing.T) {
    99  	var lb network.LoadBalancer
   100  	ri := acctest.RandInt()
   101  
   102  	resource.Test(t, resource.TestCase{
   103  		PreCheck:     func() { testAccPreCheck(t) },
   104  		Providers:    testAccProviders,
   105  		CheckDestroy: testCheckAzureRMLoadBalancerDestroy,
   106  		Steps: []resource.TestStep{
   107  			{
   108  				Config: testAccAzureRMLoadBalancer_basic(ri),
   109  				Check: resource.ComposeTestCheckFunc(
   110  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   111  					resource.TestCheckResourceAttr(
   112  						"azurerm_lb.test", "tags.%", "2"),
   113  					resource.TestCheckResourceAttr(
   114  						"azurerm_lb.test", "tags.Environment", "production"),
   115  					resource.TestCheckResourceAttr(
   116  						"azurerm_lb.test", "tags.Purpose", "AcceptanceTests"),
   117  				),
   118  			},
   119  			{
   120  				Config: testAccAzureRMLoadBalancer_updatedTags(ri),
   121  				Check: resource.ComposeTestCheckFunc(
   122  					testCheckAzureRMLoadBalancerExists("azurerm_lb.test", &lb),
   123  					resource.TestCheckResourceAttr(
   124  						"azurerm_lb.test", "tags.%", "1"),
   125  					resource.TestCheckResourceAttr(
   126  						"azurerm_lb.test", "tags.Purpose", "AcceptanceTests"),
   127  				),
   128  			},
   129  		},
   130  	})
   131  }
   132  
   133  func testCheckAzureRMLoadBalancerExists(name string, lb *network.LoadBalancer) resource.TestCheckFunc {
   134  	return func(s *terraform.State) error {
   135  		rs, ok := s.RootModule().Resources[name]
   136  		if !ok {
   137  			return fmt.Errorf("Not found: %s", name)
   138  		}
   139  
   140  		loadbalancerName := rs.Primary.Attributes["name"]
   141  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   142  		if !hasResourceGroup {
   143  			return fmt.Errorf("Bad: no resource group found in state for loadbalancer: %s", loadbalancerName)
   144  		}
   145  
   146  		conn := testAccProvider.Meta().(*ArmClient).loadBalancerClient
   147  
   148  		resp, err := conn.Get(resourceGroup, loadbalancerName, "")
   149  		if err != nil {
   150  			if resp.StatusCode == http.StatusNotFound {
   151  				return fmt.Errorf("Bad: LoadBalancer %q (resource group: %q) does not exist", loadbalancerName, resourceGroup)
   152  			}
   153  
   154  			return fmt.Errorf("Bad: Get on loadBalancerClient: %s", err)
   155  		}
   156  
   157  		*lb = resp
   158  
   159  		return nil
   160  	}
   161  }
   162  
   163  func testCheckAzureRMLoadBalancerDestroy(s *terraform.State) error {
   164  	conn := testAccProvider.Meta().(*ArmClient).loadBalancerClient
   165  
   166  	for _, rs := range s.RootModule().Resources {
   167  		if rs.Type != "azurerm_lb" {
   168  			continue
   169  		}
   170  
   171  		name := rs.Primary.Attributes["name"]
   172  		resourceGroup := rs.Primary.Attributes["resource_group_name"]
   173  
   174  		resp, err := conn.Get(resourceGroup, name, "")
   175  
   176  		if err != nil {
   177  			return nil
   178  		}
   179  
   180  		if resp.StatusCode != http.StatusNotFound {
   181  			return fmt.Errorf("LoadBalancer still exists:\n%#v", resp.LoadBalancerPropertiesFormat)
   182  		}
   183  	}
   184  
   185  	return nil
   186  }
   187  
   188  func testAccAzureRMLoadBalancer_basic(rInt int) string {
   189  	return fmt.Sprintf(`
   190  
   191  resource "azurerm_resource_group" "test" {
   192      name = "acctestrg-%d"
   193      location = "West US"
   194  }
   195  
   196  resource "azurerm_lb" "test" {
   197      name = "arm-test-loadbalancer-%d"
   198      location = "West US"
   199      resource_group_name = "${azurerm_resource_group.test.name}"
   200  
   201      tags {
   202      	Environment = "production"
   203      	Purpose = "AcceptanceTests"
   204      }
   205  
   206  }`, rInt, rInt)
   207  }
   208  
   209  func testAccAzureRMLoadBalancer_updatedTags(rInt int) string {
   210  	return fmt.Sprintf(`
   211  
   212  resource "azurerm_resource_group" "test" {
   213      name = "acctestrg-%d"
   214      location = "West US"
   215  }
   216  
   217  resource "azurerm_lb" "test" {
   218      name = "arm-test-loadbalancer-%d"
   219      location = "West US"
   220      resource_group_name = "${azurerm_resource_group.test.name}"
   221  
   222      tags {
   223      	Purpose = "AcceptanceTests"
   224      }
   225  
   226  }`, rInt, rInt)
   227  }
   228  
   229  func testAccAzureRMLoadBalancer_frontEndConfig(rInt int) string {
   230  	return fmt.Sprintf(`
   231  
   232  resource "azurerm_resource_group" "test" {
   233      name = "acctestrg-%d"
   234      location = "West US"
   235  }
   236  
   237  resource "azurerm_public_ip" "test" {
   238      name = "test-ip-%d"
   239      location = "West US"
   240      resource_group_name = "${azurerm_resource_group.test.name}"
   241      public_ip_address_allocation = "static"
   242  }
   243  
   244  resource "azurerm_public_ip" "test1" {
   245      name = "another-test-ip-%d"
   246      location = "West US"
   247      resource_group_name = "${azurerm_resource_group.test.name}"
   248      public_ip_address_allocation = "static"
   249  }
   250  
   251  resource "azurerm_lb" "test" {
   252      name = "arm-test-loadbalancer-%d"
   253      location = "West US"
   254      resource_group_name = "${azurerm_resource_group.test.name}"
   255  
   256      frontend_ip_configuration {
   257        name = "one-%d"
   258        public_ip_address_id = "${azurerm_public_ip.test.id}"
   259      }
   260  
   261      frontend_ip_configuration {
   262        name = "two-%d"
   263        public_ip_address_id = "${azurerm_public_ip.test1.id}"
   264      }
   265  }`, rInt, rInt, rInt, rInt, rInt, rInt)
   266  }
   267  
   268  func testAccAzureRMLoadBalancer_frontEndConfigRemoval(rInt int) string {
   269  	return fmt.Sprintf(`
   270  
   271  resource "azurerm_resource_group" "test" {
   272      name = "acctestrg-%d"
   273      location = "West US"
   274  }
   275  
   276  resource "azurerm_public_ip" "test" {
   277      name = "test-ip-%d"
   278      location = "West US"
   279      resource_group_name = "${azurerm_resource_group.test.name}"
   280      public_ip_address_allocation = "static"
   281  }
   282  
   283  resource "azurerm_lb" "test" {
   284      name = "arm-test-loadbalancer-%d"
   285      location = "West US"
   286      resource_group_name = "${azurerm_resource_group.test.name}"
   287  
   288      frontend_ip_configuration {
   289        name = "one-%d"
   290        public_ip_address_id = "${azurerm_public_ip.test.id}"
   291      }
   292  }`, rInt, rInt, rInt, rInt)
   293  }