github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/builtin/providers/azurerm/resource_arm_route_table_test.go (about)

     1  package azurerm
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  )
    11  
    12  func TestResourceAzureRMRouteTableNextHopType_validation(t *testing.T) {
    13  	cases := []struct {
    14  		Value    string
    15  		ErrCount int
    16  	}{
    17  		{
    18  			Value:    "Random",
    19  			ErrCount: 1,
    20  		},
    21  		{
    22  			Value:    "VirtualNetworkGateway",
    23  			ErrCount: 0,
    24  		},
    25  		{
    26  			Value:    "VNETLocal",
    27  			ErrCount: 0,
    28  		},
    29  		{
    30  			Value:    "Internet",
    31  			ErrCount: 0,
    32  		},
    33  		{
    34  			Value:    "VirtualAppliance",
    35  			ErrCount: 0,
    36  		},
    37  		{
    38  			Value:    "None",
    39  			ErrCount: 0,
    40  		},
    41  		{
    42  			Value:    "VIRTUALNETWORKGATEWAY",
    43  			ErrCount: 0,
    44  		},
    45  		{
    46  			Value:    "virtualnetworkgateway",
    47  			ErrCount: 0,
    48  		},
    49  	}
    50  
    51  	for _, tc := range cases {
    52  		_, errors := validateRouteTableNextHopType(tc.Value, "azurerm_route_table")
    53  
    54  		if len(errors) != tc.ErrCount {
    55  			t.Fatalf("Expected the Azure RM Route Table nextHopType to trigger a validation error")
    56  		}
    57  	}
    58  }
    59  
    60  func TestAccAzureRMRouteTable_basic(t *testing.T) {
    61  
    62  	resource.Test(t, resource.TestCase{
    63  		PreCheck:     func() { testAccPreCheck(t) },
    64  		Providers:    testAccProviders,
    65  		CheckDestroy: testCheckAzureRMRouteTableDestroy,
    66  		Steps: []resource.TestStep{
    67  			resource.TestStep{
    68  				Config: testAccAzureRMRouteTable_basic,
    69  				Check: resource.ComposeTestCheckFunc(
    70  					testCheckAzureRMRouteTableExists("azurerm_route_table.test"),
    71  				),
    72  			},
    73  		},
    74  	})
    75  }
    76  
    77  func TestAccAzureRMRouteTable_withTags(t *testing.T) {
    78  
    79  	resource.Test(t, resource.TestCase{
    80  		PreCheck:     func() { testAccPreCheck(t) },
    81  		Providers:    testAccProviders,
    82  		CheckDestroy: testCheckAzureRMRouteTableDestroy,
    83  		Steps: []resource.TestStep{
    84  			resource.TestStep{
    85  				Config: testAccAzureRMRouteTable_withTags,
    86  				Check: resource.ComposeTestCheckFunc(
    87  					testCheckAzureRMRouteTableExists("azurerm_route_table.test"),
    88  					resource.TestCheckResourceAttr(
    89  						"azurerm_route_table.test", "tags.#", "2"),
    90  					resource.TestCheckResourceAttr(
    91  						"azurerm_route_table.test", "tags.environment", "Production"),
    92  					resource.TestCheckResourceAttr(
    93  						"azurerm_route_table.test", "tags.cost_center", "MSFT"),
    94  				),
    95  			},
    96  
    97  			resource.TestStep{
    98  				Config: testAccAzureRMRouteTable_withTagsUpdate,
    99  				Check: resource.ComposeTestCheckFunc(
   100  					testCheckAzureRMRouteTableExists("azurerm_route_table.test"),
   101  					resource.TestCheckResourceAttr(
   102  						"azurerm_route_table.test", "tags.#", "1"),
   103  					resource.TestCheckResourceAttr(
   104  						"azurerm_route_table.test", "tags.environment", "staging"),
   105  				),
   106  			},
   107  		},
   108  	})
   109  }
   110  
   111  func TestAccAzureRMRouteTable_multipleRoutes(t *testing.T) {
   112  
   113  	resource.Test(t, resource.TestCase{
   114  		PreCheck:     func() { testAccPreCheck(t) },
   115  		Providers:    testAccProviders,
   116  		CheckDestroy: testCheckAzureRMRouteTableDestroy,
   117  		Steps: []resource.TestStep{
   118  			resource.TestStep{
   119  				Config: testAccAzureRMRouteTable_basic,
   120  				Check: resource.ComposeTestCheckFunc(
   121  					testCheckAzureRMRouteTableExists("azurerm_route_table.test"),
   122  					resource.TestCheckResourceAttr(
   123  						"azurerm_route_table.test", "route.#", "1"),
   124  				),
   125  			},
   126  
   127  			resource.TestStep{
   128  				Config: testAccAzureRMRouteTable_multipleRoutes,
   129  				Check: resource.ComposeTestCheckFunc(
   130  					testCheckAzureRMRouteTableExists("azurerm_route_table.test"),
   131  					resource.TestCheckResourceAttr(
   132  						"azurerm_route_table.test", "route.#", "2"),
   133  				),
   134  			},
   135  		},
   136  	})
   137  }
   138  
   139  func testCheckAzureRMRouteTableExists(name string) resource.TestCheckFunc {
   140  	return func(s *terraform.State) error {
   141  
   142  		rs, ok := s.RootModule().Resources[name]
   143  		if !ok {
   144  			return fmt.Errorf("Not found: %s", name)
   145  		}
   146  
   147  		name := rs.Primary.Attributes["name"]
   148  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   149  		if !hasResourceGroup {
   150  			return fmt.Errorf("Bad: no resource group found in state for route table: %s", name)
   151  		}
   152  
   153  		conn := testAccProvider.Meta().(*ArmClient).routeTablesClient
   154  
   155  		resp, err := conn.Get(resourceGroup, name, "")
   156  		if err != nil {
   157  			return fmt.Errorf("Bad: Get on routeTablesClient: %s", err)
   158  		}
   159  
   160  		if resp.StatusCode == http.StatusNotFound {
   161  			return fmt.Errorf("Bad: Route Table %q (resource group: %q) does not exist", name, resourceGroup)
   162  		}
   163  
   164  		return nil
   165  	}
   166  }
   167  
   168  func testCheckAzureRMRouteTableDestroy(s *terraform.State) error {
   169  	conn := testAccProvider.Meta().(*ArmClient).routeTablesClient
   170  
   171  	for _, rs := range s.RootModule().Resources {
   172  		if rs.Type != "azurerm_route_table" {
   173  			continue
   174  		}
   175  
   176  		name := rs.Primary.Attributes["name"]
   177  		resourceGroup := rs.Primary.Attributes["resource_group_name"]
   178  
   179  		resp, err := conn.Get(resourceGroup, name, "")
   180  
   181  		if err != nil {
   182  			return nil
   183  		}
   184  
   185  		if resp.StatusCode != http.StatusNotFound {
   186  			return fmt.Errorf("Route Table still exists:\n%#v", resp.Properties)
   187  		}
   188  	}
   189  
   190  	return nil
   191  }
   192  
   193  var testAccAzureRMRouteTable_basic = `
   194  resource "azurerm_resource_group" "test" {
   195      name = "acceptanceTestResourceGroup1"
   196      location = "West US"
   197  }
   198  
   199  resource "azurerm_route_table" "test" {
   200      name = "acceptanceTestSecurityGroup1"
   201      location = "West US"
   202      resource_group_name = "${azurerm_resource_group.test.name}"
   203  
   204      route {
   205      	name = "route1"
   206      	address_prefix = "*"
   207      	next_hop_type = "internet"
   208      }
   209  }
   210  `
   211  
   212  var testAccAzureRMRouteTable_multipleRoutes = `
   213  resource "azurerm_resource_group" "test" {
   214      name = "acceptanceTestResourceGroup1"
   215      location = "West US"
   216  }
   217  
   218  resource "azurerm_route_table" "test" {
   219      name = "acceptanceTestSecurityGroup1"
   220      location = "West US"
   221      resource_group_name = "${azurerm_resource_group.test.name}"
   222  
   223      route {
   224      	name = "route1"
   225      	address_prefix = "*"
   226      	next_hop_type = "internet"
   227      }
   228  
   229      route {
   230      	name = "route2"
   231      	address_prefix = "*"
   232      	next_hop_type = "virtualappliance"
   233      }
   234  }
   235  `
   236  
   237  var testAccAzureRMRouteTable_withTags = `
   238  resource "azurerm_resource_group" "test" {
   239      name = "acceptanceTestResourceGroup1"
   240      location = "West US"
   241  }
   242  
   243  resource "azurerm_route_table" "test" {
   244      name = "acceptanceTestSecurityGroup1"
   245      location = "West US"
   246      resource_group_name = "${azurerm_resource_group.test.name}"
   247  
   248      route {
   249      	name = "route1"
   250      	address_prefix = "*"
   251      	next_hop_type = "internet"
   252      }
   253  
   254      tags {
   255  	environment = "Production"
   256  	cost_center = "MSFT"
   257      }
   258  }
   259  `
   260  
   261  var testAccAzureRMRouteTable_withTagsUpdate = `
   262  resource "azurerm_resource_group" "test" {
   263      name = "acceptanceTestResourceGroup1"
   264      location = "West US"
   265  }
   266  
   267  resource "azurerm_route_table" "test" {
   268      name = "acceptanceTestSecurityGroup1"
   269      location = "West US"
   270      resource_group_name = "${azurerm_resource_group.test.name}"
   271  
   272      route {
   273      	name = "route1"
   274      	address_prefix = "*"
   275      	next_hop_type = "internet"
   276      }
   277  
   278      tags {
   279  	environment = "staging"
   280      }
   281  }
   282  `