github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_route_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/service/ec2" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 func TestAccAWSRoute_basic(t *testing.T) { 13 var route ec2.Route 14 15 //aws creates a default route 16 testCheck := func(s *terraform.State) error { 17 if *route.DestinationCidrBlock != "10.3.0.0/16" { 18 return fmt.Errorf("Destination Cidr (Expected=%s, Actual=%s)\n", "10.3.0.0/16", *route.DestinationCidrBlock) 19 } 20 21 name := "aws_internet_gateway.foo" 22 gwres, ok := s.RootModule().Resources[name] 23 if !ok { 24 return fmt.Errorf("Not found: %s\n", name) 25 } 26 27 if *route.GatewayId != gwres.Primary.ID { 28 return fmt.Errorf("Internet Gateway Id (Expected=%s, Actual=%s)\n", gwres.Primary.ID, *route.GatewayId) 29 } 30 31 return nil 32 } 33 34 resource.Test(t, resource.TestCase{ 35 PreCheck: func() { 36 testAccPreCheck(t) 37 }, 38 Providers: testAccProviders, 39 CheckDestroy: testAccCheckAWSRouteDestroy, 40 Steps: []resource.TestStep{ 41 resource.TestStep{ 42 Config: testAccAWSRouteBasicConfig, 43 Check: resource.ComposeTestCheckFunc( 44 testAccCheckAWSRouteExists("aws_route.bar", &route), 45 testCheck, 46 ), 47 }, 48 }, 49 }) 50 } 51 52 func TestAccAWSRoute_changeCidr(t *testing.T) { 53 var route ec2.Route 54 var routeTable ec2.RouteTable 55 56 //aws creates a default route 57 testCheck := func(s *terraform.State) error { 58 if *route.DestinationCidrBlock != "10.3.0.0/16" { 59 return fmt.Errorf("Destination Cidr (Expected=%s, Actual=%s)\n", "10.3.0.0/16", *route.DestinationCidrBlock) 60 } 61 62 name := "aws_internet_gateway.foo" 63 gwres, ok := s.RootModule().Resources[name] 64 if !ok { 65 return fmt.Errorf("Not found: %s\n", name) 66 } 67 68 if *route.GatewayId != gwres.Primary.ID { 69 return fmt.Errorf("Internet Gateway Id (Expected=%s, Actual=%s)\n", gwres.Primary.ID, *route.GatewayId) 70 } 71 72 return nil 73 } 74 75 testCheckChange := func(s *terraform.State) error { 76 if *route.DestinationCidrBlock != "10.2.0.0/16" { 77 return fmt.Errorf("Destination Cidr (Expected=%s, Actual=%s)\n", "10.2.0.0/16", *route.DestinationCidrBlock) 78 } 79 80 name := "aws_internet_gateway.foo" 81 gwres, ok := s.RootModule().Resources[name] 82 if !ok { 83 return fmt.Errorf("Not found: %s\n", name) 84 } 85 86 if *route.GatewayId != gwres.Primary.ID { 87 return fmt.Errorf("Internet Gateway Id (Expected=%s, Actual=%s)\n", gwres.Primary.ID, *route.GatewayId) 88 } 89 90 if rtlen := len(routeTable.Routes); rtlen != 2 { 91 return fmt.Errorf("Route Table has too many routes (Expected=%d, Actual=%d)\n", rtlen, 2) 92 } 93 94 return nil 95 } 96 97 resource.Test(t, resource.TestCase{ 98 PreCheck: func() { 99 testAccPreCheck(t) 100 }, 101 Providers: testAccProviders, 102 CheckDestroy: testAccCheckAWSRouteDestroy, 103 Steps: []resource.TestStep{ 104 resource.TestStep{ 105 Config: testAccAWSRouteBasicConfig, 106 Check: resource.ComposeTestCheckFunc( 107 testAccCheckAWSRouteExists("aws_route.bar", &route), 108 testCheck, 109 ), 110 }, 111 resource.TestStep{ 112 Config: testAccAWSRouteBasicConfigChangeCidr, 113 Check: resource.ComposeTestCheckFunc( 114 testAccCheckAWSRouteExists("aws_route.bar", &route), 115 testAccCheckRouteTableExists("aws_route_table.foo", &routeTable), 116 testCheckChange, 117 ), 118 }, 119 }, 120 }) 121 } 122 123 func TestAccAWSRoute_noopdiff(t *testing.T) { 124 var route ec2.Route 125 var routeTable ec2.RouteTable 126 127 testCheck := func(s *terraform.State) error { 128 return nil 129 } 130 131 testCheckChange := func(s *terraform.State) error { 132 return nil 133 } 134 135 resource.Test(t, resource.TestCase{ 136 PreCheck: func() { 137 testAccPreCheck(t) 138 }, 139 Providers: testAccProviders, 140 CheckDestroy: testAccCheckAWSRouteDestroy, 141 Steps: []resource.TestStep{ 142 resource.TestStep{ 143 Config: testAccAWSRouteNoopChange, 144 Check: resource.ComposeTestCheckFunc( 145 testAccCheckAWSRouteExists("aws_route.test", &route), 146 testCheck, 147 ), 148 }, 149 resource.TestStep{ 150 Config: testAccAWSRouteNoopChange, 151 Check: resource.ComposeTestCheckFunc( 152 testAccCheckAWSRouteExists("aws_route.test", &route), 153 testAccCheckRouteTableExists("aws_route_table.test", &routeTable), 154 testCheckChange, 155 ), 156 }, 157 }, 158 }) 159 } 160 161 // Acceptance test if mixed inline and external routes are implemented 162 /* 163 func TestAccAWSRoute_mix(t *testing.T) { 164 var rt ec2.RouteTable 165 var route ec2.Route 166 167 //aws creates a default route 168 testCheck := func(s *terraform.State) error { 169 if *route.DestinationCidrBlock != "0.0.0.0/0" { 170 return fmt.Errorf("Destination Cidr (Expected=%s, Actual=%s)\n", "0.0.0.0/0", *route.DestinationCidrBlock) 171 } 172 173 name := "aws_internet_gateway.foo" 174 gwres, ok := s.RootModule().Resources[name] 175 if !ok { 176 return fmt.Errorf("Not found: %s\n", name) 177 } 178 179 if *route.GatewayId != gwres.Primary.ID { 180 return fmt.Errorf("Internet Gateway Id (Expected=%s, Actual=%s)\n", gwres.Primary.ID, *route.GatewayId) 181 } 182 183 if len(rt.Routes) != 3 { 184 return fmt.Errorf("bad routes: %#v", rt.Routes) 185 } 186 187 routes := make(map[string]*ec2.Route) 188 for _, r := range rt.Routes { 189 routes[*r.DestinationCidrBlock] = r 190 } 191 192 if _, ok := routes["10.1.0.0/16"]; !ok { 193 return fmt.Errorf("Missing route %s: %#v", "10.1.0.0/16", rt.Routes) 194 } 195 if _, ok := routes["10.2.0.0/16"]; !ok { 196 return fmt.Errorf("Missing route %s: %#v", "10.2.0.0/16", rt.Routes) 197 } 198 if _, ok := routes["0.0.0.0/0"]; !ok { 199 return fmt.Errorf("Missing route %s: %#v", "0.0.0.0/0", rt.Routes) 200 } 201 202 return nil 203 } 204 205 resource.Test(t, resource.TestCase{ 206 PreCheck: func() { testAccPreCheck(t) }, 207 Providers: testAccProviders, 208 CheckDestroy: testAccCheckAWSRouteDestroy, 209 Steps: []resource.TestStep{ 210 resource.TestStep{ 211 Config: testAccAWSRouteMixConfig, 212 Check: resource.ComposeTestCheckFunc( 213 testAccCheckRouteTableExists("aws_route_table.foo", &rt), 214 testAccCheckAWSRouteExists("aws_route.bar", &route), 215 testCheck, 216 ), 217 }, 218 }, 219 }) 220 } 221 */ 222 223 func testAccCheckAWSRouteExists(n string, res *ec2.Route) resource.TestCheckFunc { 224 return func(s *terraform.State) error { 225 rs, ok := s.RootModule().Resources[n] 226 if !ok { 227 return fmt.Errorf("Not found: %s\n", n) 228 } 229 230 if rs.Primary.ID == "" { 231 return fmt.Errorf("No ID is set") 232 } 233 234 conn := testAccProvider.Meta().(*AWSClient).ec2conn 235 r, err := findResourceRoute( 236 conn, 237 rs.Primary.Attributes["route_table_id"], 238 rs.Primary.Attributes["destination_cidr_block"], 239 ) 240 241 if err != nil { 242 return err 243 } 244 245 if r == nil { 246 return fmt.Errorf("Route not found") 247 } 248 249 *res = *r 250 251 return nil 252 } 253 } 254 255 func testAccCheckAWSRouteDestroy(s *terraform.State) error { 256 for _, rs := range s.RootModule().Resources { 257 if rs.Type != "aws_route" { 258 continue 259 } 260 261 conn := testAccProvider.Meta().(*AWSClient).ec2conn 262 route, err := findResourceRoute( 263 conn, 264 rs.Primary.Attributes["route_table_id"], 265 rs.Primary.Attributes["destination_cidr_block"], 266 ) 267 268 if route == nil && err == nil { 269 return nil 270 } 271 } 272 273 return nil 274 } 275 276 var testAccAWSRouteBasicConfig = fmt.Sprint(` 277 resource "aws_vpc" "foo" { 278 cidr_block = "10.1.0.0/16" 279 } 280 281 resource "aws_internet_gateway" "foo" { 282 vpc_id = "${aws_vpc.foo.id}" 283 } 284 285 resource "aws_route_table" "foo" { 286 vpc_id = "${aws_vpc.foo.id}" 287 } 288 289 resource "aws_route" "bar" { 290 route_table_id = "${aws_route_table.foo.id}" 291 destination_cidr_block = "10.3.0.0/16" 292 gateway_id = "${aws_internet_gateway.foo.id}" 293 } 294 `) 295 296 var testAccAWSRouteBasicConfigChangeCidr = fmt.Sprint(` 297 resource "aws_vpc" "foo" { 298 cidr_block = "10.1.0.0/16" 299 } 300 301 resource "aws_internet_gateway" "foo" { 302 vpc_id = "${aws_vpc.foo.id}" 303 } 304 305 resource "aws_route_table" "foo" { 306 vpc_id = "${aws_vpc.foo.id}" 307 } 308 309 resource "aws_route" "bar" { 310 route_table_id = "${aws_route_table.foo.id}" 311 destination_cidr_block = "10.2.0.0/16" 312 gateway_id = "${aws_internet_gateway.foo.id}" 313 } 314 `) 315 316 // Acceptance test if mixed inline and external routes are implemented 317 var testAccAWSRouteMixConfig = fmt.Sprint(` 318 resource "aws_vpc" "foo" { 319 cidr_block = "10.1.0.0/16" 320 } 321 322 resource "aws_internet_gateway" "foo" { 323 vpc_id = "${aws_vpc.foo.id}" 324 } 325 326 resource "aws_route_table" "foo" { 327 vpc_id = "${aws_vpc.foo.id}" 328 329 route { 330 cidr_block = "10.2.0.0/16" 331 gateway_id = "${aws_internet_gateway.foo.id}" 332 } 333 } 334 335 resource "aws_route" "bar" { 336 route_table_id = "${aws_route_table.foo.id}" 337 destination_cidr_block = "0.0.0.0/0" 338 gateway_id = "${aws_internet_gateway.foo.id}" 339 } 340 `) 341 342 var testAccAWSRouteNoopChange = fmt.Sprint(` 343 resource "aws_vpc" "test" { 344 cidr_block = "10.10.0.0/16" 345 } 346 347 resource "aws_route_table" "test" { 348 vpc_id = "${aws_vpc.test.id}" 349 } 350 351 resource "aws_subnet" "test" { 352 vpc_id = "${aws_vpc.test.id}" 353 cidr_block = "10.10.10.0/24" 354 } 355 356 resource "aws_route" "test" { 357 route_table_id = "${aws_route_table.test.id}" 358 destination_cidr_block = "0.0.0.0/0" 359 instance_id = "${aws_instance.nat.id}" 360 } 361 362 resource "aws_instance" "nat" { 363 ami = "ami-9abea4fb" 364 instance_type = "t2.nano" 365 subnet_id = "${aws_subnet.test.id}" 366 } 367 `)