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 `