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