From 1e3b1da4c983226fb454af04729f2c7e8212c408 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 7 Dec 2020 12:07:55 -0500 Subject: [PATCH] tests/resource/aws_default_route_table: Refactor acceptance tests in preparation for future fixes/enhancements (#14012) * r/aws_default_route_table: Rework 'TestAccAWSDefaultRouteTable_basic' and 'TestAccAWSDefaultRouteTable_disappears_Vpc'. Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_basic' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_basic -timeout 120m === RUN TestAccAWSDefaultRouteTable_basic === PAUSE TestAccAWSDefaultRouteTable_basic === CONT TestAccAWSDefaultRouteTable_basic --- PASS: TestAccAWSDefaultRouteTable_basic (53.01s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 53.064s $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_disappears_Vpc' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_disappears_Vpc -timeout 120m === RUN TestAccAWSDefaultRouteTable_disappears_Vpc === PAUSE TestAccAWSDefaultRouteTable_disappears_Vpc === CONT TestAccAWSDefaultRouteTable_disappears_Vpc --- PASS: TestAccAWSDefaultRouteTable_disappears_Vpc (24.54s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 24.591s * r/aws_default_route_table: Rename 'TestAccAWSDefaultRouteTable_Route' to 'TestAccAWSDefaultRouteTable_Route_ConfigMode' to match r/aws_route_table. Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_Route_ConfigMode' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_Route_ConfigMode -timeout 120m === RUN TestAccAWSDefaultRouteTable_Route_ConfigMode === PAUSE TestAccAWSDefaultRouteTable_Route_ConfigMode === CONT TestAccAWSDefaultRouteTable_Route_ConfigMode --- PASS: TestAccAWSDefaultRouteTable_Route_ConfigMode (102.58s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 102.647s * r/aws_default_route_table: Rework 'TestAccAWSDefaultRouteTable_swap'. Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_swap' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_swap -timeout 120m === RUN TestAccAWSDefaultRouteTable_swap === PAUSE TestAccAWSDefaultRouteTable_swap === CONT TestAccAWSDefaultRouteTable_swap --- PASS: TestAccAWSDefaultRouteTable_swap (109.41s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 109.499s * r/aws_default_route_table: 'TestAccAWSDefaultRouteTable_disappears_Vpc' -> 'TestAccAWSDefaultRouteTable_vpcDisappears'. * r/aws_default_route_table: Rework 'TestAccAWSDefaultRouteTable_ConditionalCidrBlock'. Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_ConditionalCidrBlock' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_ConditionalCidrBlock -timeout 120m === RUN TestAccAWSDefaultRouteTable_ConditionalCidrBlock === PAUSE TestAccAWSDefaultRouteTable_ConditionalCidrBlock === CONT TestAccAWSDefaultRouteTable_ConditionalCidrBlock --- PASS: TestAccAWSDefaultRouteTable_ConditionalCidrBlock (79.63s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 80.192s * r/aws_default_route_table: Rename 'TestAccAWSDefaultRouteTable_vpc_endpoint' to 'TestAccAWSDefaultRouteTable_VpcEndpointAssociation'. Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_VpcEndpointAssociation' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_VpcEndpointAssociation -timeout 120m === RUN TestAccAWSDefaultRouteTable_VpcEndpointAssociation === PAUSE TestAccAWSDefaultRouteTable_VpcEndpointAssociation === CONT TestAccAWSDefaultRouteTable_VpcEndpointAssociation --- PASS: TestAccAWSDefaultRouteTable_VpcEndpointAssociation (57.87s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 57.930s * r/aws_default_route_table: Rename 'TestAccAWSDefaultRouteTable_Route_TransitGatewayID' to 'TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway'. Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway -timeout 120m === RUN TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway === PAUSE TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway === CONT TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway --- PASS: TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway (317.38s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 317.429s * r/aws_default_route_table: Add 'testAccCheckAWSDefaultRouteTableRoute'. * r/aws_default_route_table: Use 'testAccAvailableAZsNoOptInExcludeConfig'. * Use 'testAccAvailableAZsNoOptInDefaultExcludeConfig'. * r/aws_default_route_table: Add acceptance tests from #16131. * Rename 'TestAccAWSDefaultRouteTable_Route_VpcEndpointId' to 'TestAccAWSDefaultRouteTable_IPv4_To_VpcEndpoint'. * r/aws_default_route_table: Missing commit from rebase. * Update aws/resource_aws_default_route_table_test.go Co-authored-by: Brian Flad Co-authored-by: Brian Flad --- aws/resource_aws_default_route_table_test.go | 467 +++++++++++-------- aws/resource_aws_route_table_test.go | 10 + 2 files changed, 283 insertions(+), 194 deletions(-) diff --git a/aws/resource_aws_default_route_table_test.go b/aws/resource_aws_default_route_table_test.go index e83d9ce8fe35..69a2ec8100bf 100644 --- a/aws/resource_aws_default_route_table_test.go +++ b/aws/resource_aws_default_route_table_test.go @@ -13,9 +13,10 @@ import ( ) func TestAccAWSDefaultRouteTable_basic(t *testing.T) { - var routeTable1 ec2.RouteTable + var routeTable ec2.RouteTable resourceName := "aws_default_route_table.test" vpcResourceName := "aws_vpc.test" + rName := acctest.RandomWithPrefix("tf-acc-test") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -33,9 +34,9 @@ func TestAccAWSDefaultRouteTable_basic(t *testing.T) { ExpectError: regexp.MustCompile(`EC2 Default Route Table \(vpc-00000000\): not found`), }, { - Config: testAccDefaultRouteTableConfigRequired(), + Config: testAccDefaultRouteTableConfigBasic(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists(resourceName, &routeTable1), + testAccCheckRouteTableExists(resourceName, &routeTable), testAccCheckResourceAttrAccountID(resourceName, "owner_id"), resource.TestCheckResourceAttr(resourceName, "propagating_vgws.#", "0"), resource.TestCheckResourceAttr(resourceName, "route.#", "0"), @@ -54,10 +55,11 @@ func TestAccAWSDefaultRouteTable_basic(t *testing.T) { } func TestAccAWSDefaultRouteTable_disappears_Vpc(t *testing.T) { - var routeTable1 ec2.RouteTable - var vpc1 ec2.Vpc + var routeTable ec2.RouteTable + var vpc ec2.Vpc resourceName := "aws_default_route_table.test" vpcResourceName := "aws_vpc.test" + rName := acctest.RandomWithPrefix("tf-acc-test") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -65,11 +67,11 @@ func TestAccAWSDefaultRouteTable_disappears_Vpc(t *testing.T) { CheckDestroy: testAccCheckRouteTableDestroy, Steps: []resource.TestStep{ { - Config: testAccDefaultRouteTableConfigRequired(), + Config: testAccDefaultRouteTableConfigBasic(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists(resourceName, &routeTable1), - testAccCheckVpcExists(vpcResourceName, &vpc1), - testAccCheckVpcDisappears(&vpc1), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckVpcExists(vpcResourceName, &vpc), + testAccCheckResourceDisappears(testAccProvider, resourceAwsVpc(), vpcResourceName), ), ExpectNonEmptyPlan: true, }, @@ -77,9 +79,12 @@ func TestAccAWSDefaultRouteTable_disappears_Vpc(t *testing.T) { }) } -func TestAccAWSDefaultRouteTable_Route(t *testing.T) { - var v ec2.RouteTable - resourceName := "aws_default_route_table.foo" +func TestAccAWSDefaultRouteTable_Route_ConfigMode(t *testing.T) { + var routeTable ec2.RouteTable + resourceName := "aws_default_route_table.test" + igwResourceName := "aws_internet_gateway.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + destinationCidr := "10.2.0.0/16" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -88,10 +93,16 @@ func TestAccAWSDefaultRouteTable_Route(t *testing.T) { CheckDestroy: testAccCheckDefaultRouteTableDestroy, Steps: []resource.TestStep{ { - Config: testAccDefaultRouteTableConfig, + Config: testAccDefaultRouteTableConfigIpv4InternetGateway(rName, destinationCidr), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists(resourceName, &v), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), testAccCheckResourceAttrAccountID(resourceName, "owner_id"), + resource.TestCheckResourceAttr(resourceName, "propagating_vgws.#", "0"), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr, "gateway_id", igwResourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.Name", rName), ), }, { @@ -101,19 +112,32 @@ func TestAccAWSDefaultRouteTable_Route(t *testing.T) { ImportStateVerify: true, }, { - Config: testAccDefaultRouteTableConfig_noRouteBlock, + Config: testAccDefaultRouteTableConfigNoRouteBlock(rName), Check: resource.ComposeTestCheckFunc( + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), + testAccCheckResourceAttrAccountID(resourceName, "owner_id"), + resource.TestCheckResourceAttr(resourceName, "propagating_vgws.#", "0"), // The route block from the previous step should still be // present, because no blocks means "ignore existing blocks". resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr, "gateway_id", igwResourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.Name", rName), ), }, { - Config: testAccDefaultRouteTableConfig_routeBlocksExplicitZero, + Config: testAccDefaultRouteTableConfigRouteBlocksExplicitZero(rName), Check: resource.ComposeTestCheckFunc( + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 1), + testAccCheckResourceAttrAccountID(resourceName, "owner_id"), + resource.TestCheckResourceAttr(resourceName, "propagating_vgws.#", "0"), // This config uses attribute syntax to set zero routes // explicitly, so should remove the one we created before. resource.TestCheckResourceAttr(resourceName, "route.#", "0"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.Name", rName), ), }, }, @@ -121,8 +145,13 @@ func TestAccAWSDefaultRouteTable_Route(t *testing.T) { } func TestAccAWSDefaultRouteTable_swap(t *testing.T) { - var v ec2.RouteTable - resourceName := "aws_default_route_table.foo" + var routeTable ec2.RouteTable + resourceName := "aws_default_route_table.test" + igwResourceName := "aws_internet_gateway.test" + rtResourceName := "aws_route_table.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + destinationCidr1 := "10.2.0.0/16" + destinationCidr2 := "10.3.0.0/16" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -131,10 +160,16 @@ func TestAccAWSDefaultRouteTable_swap(t *testing.T) { CheckDestroy: testAccCheckDefaultRouteTableDestroy, Steps: []resource.TestStep{ { - Config: testAccDefaultRouteTable_change, + Config: testAccDefaultRouteTableConfigIpv4InternetGateway(rName, destinationCidr1), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists( - resourceName, &v), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), + testAccCheckResourceAttrAccountID(resourceName, "owner_id"), + resource.TestCheckResourceAttr(resourceName, "propagating_vgws.#", "0"), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr1, "gateway_id", igwResourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.Name", rName), ), }, { @@ -150,20 +185,38 @@ func TestAccAWSDefaultRouteTable_swap(t *testing.T) { // this case) a diff as the table now needs to be updated to match the // config { - Config: testAccDefaultRouteTable_change_mod, + Config: testAccDefaultRouteTableConfigSwap(rName, destinationCidr1, destinationCidr2), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists( - resourceName, &v), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr1, "gateway_id", igwResourceName, "id"), ), ExpectNonEmptyPlan: true, }, + { + Config: testAccDefaultRouteTableConfigSwap(rName, destinationCidr1, destinationCidr2), + Check: resource.ComposeTestCheckFunc( + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr1, "gateway_id", igwResourceName, "id"), + resource.TestCheckResourceAttrPair(resourceName, "id", rtResourceName, "id"), + ), + // Follow up plan will now show a diff as the destination CIDR on the aws_route_table + // (now also the aws_default_route_table) will change from destinationCidr1 to destinationCidr2. + ExpectNonEmptyPlan: true, + }, }, }) } -func TestAccAWSDefaultRouteTable_Route_TransitGatewayID(t *testing.T) { - var routeTable1 ec2.RouteTable +func TestAccAWSDefaultRouteTable_IPv4_To_TransitGateway(t *testing.T) { + var routeTable ec2.RouteTable resourceName := "aws_default_route_table.test" + tgwResourceName := "aws_ec2_transit_gateway.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + destinationCidr := "10.2.0.0/16" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -171,9 +224,12 @@ func TestAccAWSDefaultRouteTable_Route_TransitGatewayID(t *testing.T) { CheckDestroy: testAccCheckRouteTableDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSDefaultRouteTableConfigRouteTransitGatewayID(), + Config: testAccDefaultRouteTableConfigIpv4TransitGateway(rName, destinationCidr), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists(resourceName, &routeTable1), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr, "transit_gateway_id", tgwResourceName, "id"), ), }, { @@ -186,10 +242,12 @@ func TestAccAWSDefaultRouteTable_Route_TransitGatewayID(t *testing.T) { }) } -func TestAccAWSDefaultRouteTable_Route_VpcEndpointId(t *testing.T) { - var routeTable1 ec2.RouteTable - rName := acctest.RandomWithPrefix("tf-acc-test") +func TestAccAWSDefaultRouteTable_IPv4_To_VpcEndpoint(t *testing.T) { + var routeTable ec2.RouteTable resourceName := "aws_default_route_table.test" + vpceResourceName := "aws_vpc_endpoint.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + destinationCidr := "0.0.0.0/0" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -197,9 +255,12 @@ func TestAccAWSDefaultRouteTable_Route_VpcEndpointId(t *testing.T) { CheckDestroy: testAccCheckRouteTableDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSDefaultRouteTableConfigRouteVpcEndpointId(rName), + Config: testAccDefaultRouteTableConfigIpv4VpcEndpoint(rName, destinationCidr), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists(resourceName, &routeTable1), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 2), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr, "vpc_endpoint_id", vpceResourceName, "id"), ), }, { @@ -212,18 +273,21 @@ func TestAccAWSDefaultRouteTable_Route_VpcEndpointId(t *testing.T) { // VPC Endpoints will not delete unless the route is removed prior, otherwise will error: // InvalidParameter: Endpoint must be removed from route table before deletion { - Config: testAccAWSDefaultRouteTableConfigRouteVpcEndpointIdNoRoute(rName), + Config: testAccDefaultRouteTableConfigIpv4VpcEndpointNoRoute(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists(resourceName, &routeTable1), + testAccCheckRouteTableExists(resourceName, &routeTable), ), }, }, }) } -func TestAccAWSDefaultRouteTable_vpc_endpoint(t *testing.T) { - var v ec2.RouteTable - resourceName := "aws_default_route_table.foo" +func TestAccAWSDefaultRouteTable_VpcEndpointAssociation(t *testing.T) { + var routeTable ec2.RouteTable + resourceName := "aws_default_route_table.test" + igwResourceName := "aws_internet_gateway.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + destinationCidr := "10.2.0.0/16" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -232,10 +296,12 @@ func TestAccAWSDefaultRouteTable_vpc_endpoint(t *testing.T) { CheckDestroy: testAccCheckDefaultRouteTableDestroy, Steps: []resource.TestStep{ { - Config: testAccDefaultRouteTable_vpc_endpoint, + Config: testAccDefaultRouteTableConfigVpcEndpointAssociation(rName, destinationCidr), Check: resource.ComposeTestCheckFunc( - testAccCheckRouteTableExists( - resourceName, &v), + testAccCheckRouteTableExists(resourceName, &routeTable), + testAccCheckAWSRouteTableNumberOfRoutes(&routeTable, 3), + resource.TestCheckResourceAttr(resourceName, "route.#", "1"), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr, "gateway_id", igwResourceName, "id"), ), }, { @@ -290,7 +356,10 @@ func TestAccAWSDefaultRouteTable_tags(t *testing.T) { func TestAccAWSDefaultRouteTable_ConditionalCidrBlock(t *testing.T) { var routeTable ec2.RouteTable resourceName := "aws_default_route_table.test" + igwResourceName := "aws_internet_gateway.test" rName := acctest.RandomWithPrefix("tf-acc-test") + destinationCidr := "10.2.0.0/16" + destinationIpv6Cidr := "::/0" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -298,23 +367,17 @@ func TestAccAWSDefaultRouteTable_ConditionalCidrBlock(t *testing.T) { CheckDestroy: testAccCheckAWSRouteDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSDefaultRouteTableConfigConditionalIpv4Ipv6(rName, false), + Config: testAccDefaultRouteTableConfigConditionalIpv4Ipv6(rName, destinationCidr, destinationIpv6Cidr, false), Check: resource.ComposeTestCheckFunc( testAccCheckRouteTableExists(resourceName, &routeTable), - resource.TestCheckTypeSetElemNestedAttrs(resourceName, "route.*", map[string]string{ - "cidr_block": "0.0.0.0/0", - "ipv6_cidr_block": "", - }), + testAccCheckDefaultRouteTableRoute(resourceName, "cidr_block", destinationCidr, "gateway_id", igwResourceName, "id"), ), }, { - Config: testAccAWSDefaultRouteTableConfigConditionalIpv4Ipv6(rName, true), + Config: testAccDefaultRouteTableConfigConditionalIpv4Ipv6(rName, destinationCidr, destinationIpv6Cidr, true), Check: resource.ComposeTestCheckFunc( testAccCheckRouteTableExists(resourceName, &routeTable), - resource.TestCheckTypeSetElemNestedAttrs(resourceName, "route.*", map[string]string{ - "cidr_block": "", - "ipv6_cidr_block": "::/0", - }), + testAccCheckDefaultRouteTableRoute(resourceName, "ipv6_cidr_block", destinationIpv6Cidr, "gateway_id", igwResourceName, "id"), ), }, { @@ -356,6 +419,25 @@ func testAccCheckDefaultRouteTableDestroy(s *terraform.State) error { return nil } +func testAccCheckDefaultRouteTableRoute(resourceName, destinationAttr, destination, targetAttr, targetResourceName, targetResourceAttr string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[targetResourceName] + if !ok { + return fmt.Errorf("Not found: %s", targetResourceName) + } + + target := rs.Primary.Attributes[targetResourceAttr] + if target == "" { + return fmt.Errorf("Not found: %s.%s", targetResourceName, targetResourceAttr) + } + + return resource.TestCheckTypeSetElemNestedAttrs(resourceName, "route.*", map[string]string{ + destinationAttr: destination, + targetAttr: target, + })(s) + } +} + func testAccDefaultRouteTableConfigDefaultRouteTableId(defaultRouteTableId string) string { return fmt.Sprintf(` resource "aws_default_route_table" "test" { @@ -364,222 +446,189 @@ resource "aws_default_route_table" "test" { `, defaultRouteTableId) } -func testAccDefaultRouteTableConfigRequired() string { - return ` +func testAccDefaultRouteTableConfigBasic(rName string) string { + return fmt.Sprintf(` resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16" + + tags = { + Name = %[1]q + } } resource "aws_default_route_table" "test" { default_route_table_id = aws_vpc.test.default_route_table_id } -` +`, rName) } -const testAccDefaultRouteTableConfig = ` -resource "aws_vpc" "foo" { +func testAccDefaultRouteTableConfigIpv4InternetGateway(rName, destinationCidr string) string { + return fmt.Sprintf(` +resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16" enable_dns_hostnames = true tags = { - Name = "terraform-testacc-default-route-table" + Name = %[1]q } } -resource "aws_default_route_table" "foo" { - default_route_table_id = aws_vpc.foo.default_route_table_id +resource "aws_default_route_table" "test" { + default_route_table_id = aws_vpc.test.default_route_table_id route { - cidr_block = "10.0.1.0/32" - gateway_id = aws_internet_gateway.gw.id + cidr_block = %[2]q + gateway_id = aws_internet_gateway.test.id } tags = { - Name = "tf-default-route-table-test" + Name = %[1]q } } -resource "aws_internet_gateway" "gw" { - vpc_id = aws_vpc.foo.id - - tags = { - Name = "tf-default-route-table-test" - } -}` - -const testAccDefaultRouteTableConfig_noRouteBlock = ` -resource "aws_vpc" "foo" { - cidr_block = "10.1.0.0/16" - enable_dns_hostnames = true +resource "aws_internet_gateway" "test" { + vpc_id = aws_vpc.test.id tags = { - Name = "terraform-testacc-default-route-table" + Name = %[1]q } } - -resource "aws_default_route_table" "foo" { - default_route_table_id = aws_vpc.foo.default_route_table_id - - tags = { - Name = "tf-default-route-table-test" - } +`, rName, destinationCidr) } -resource "aws_internet_gateway" "gw" { - vpc_id = aws_vpc.foo.id - - tags = { - Name = "tf-default-route-table-test" - } -}` - -const testAccDefaultRouteTableConfig_routeBlocksExplicitZero = ` -resource "aws_vpc" "foo" { +func testAccDefaultRouteTableConfigNoRouteBlock(rName string) string { + return fmt.Sprintf(` +resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16" enable_dns_hostnames = true tags = { - Name = "terraform-testacc-default-route-table" + Name = %[1]q } } -resource "aws_default_route_table" "foo" { - default_route_table_id = aws_vpc.foo.default_route_table_id - - route = [] +resource "aws_default_route_table" "test" { + default_route_table_id = aws_vpc.test.default_route_table_id tags = { - Name = "tf-default-route-table-test" + Name = %[1]q } } -resource "aws_internet_gateway" "gw" { - vpc_id = aws_vpc.foo.id +resource "aws_internet_gateway" "test" { + vpc_id = aws_vpc.test.id tags = { - Name = "tf-default-route-table-test" + Name = %[1]q } -}` +}`, rName) +} -const testAccDefaultRouteTable_change = ` -resource "aws_vpc" "foo" { +func testAccDefaultRouteTableConfigRouteBlocksExplicitZero(rName string) string { + return fmt.Sprintf(` +resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16" enable_dns_hostnames = true tags = { - Name = "terraform-testacc-default-route-table-change" + Name = %[1]q } } -resource "aws_default_route_table" "foo" { - default_route_table_id = aws_vpc.foo.default_route_table_id - - route { - cidr_block = "10.0.1.0/32" - gateway_id = aws_internet_gateway.gw.id - } - - tags = { - Name = "this was the first main" - } -} +resource "aws_default_route_table" "test" { + default_route_table_id = aws_vpc.test.default_route_table_id -resource "aws_internet_gateway" "gw" { - vpc_id = aws_vpc.foo.id + route = [] tags = { - Name = "main-igw" + Name = %[1]q } } -# Thing to help testing changes -resource "aws_route_table" "r" { - vpc_id = aws_vpc.foo.id - - route { - cidr_block = "10.0.1.0/24" - gateway_id = aws_internet_gateway.gw.id - } +resource "aws_internet_gateway" "test" { + vpc_id = aws_vpc.test.id tags = { - Name = "other" + Name = %[1]q } +}`, rName) } -` -const testAccDefaultRouteTable_change_mod = ` -resource "aws_vpc" "foo" { +func testAccDefaultRouteTableConfigSwap(rName, destinationCidr1, destinationCidr2 string) string { + return fmt.Sprintf(` +resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16" enable_dns_hostnames = true tags = { - Name = "terraform-testacc-default-route-table-change" + Name = %[1]q } } -resource "aws_default_route_table" "foo" { - default_route_table_id = aws_vpc.foo.default_route_table_id +resource "aws_default_route_table" "test" { + default_route_table_id = aws_vpc.test.default_route_table_id route { - cidr_block = "10.0.1.0/32" - gateway_id = aws_internet_gateway.gw.id + cidr_block = %[2]q + gateway_id = aws_internet_gateway.test.id } tags = { - Name = "this was the first main" + Name = %[1]q } } -resource "aws_internet_gateway" "gw" { - vpc_id = aws_vpc.foo.id +resource "aws_internet_gateway" "test" { + vpc_id = aws_vpc.test.id tags = { - Name = "main-igw" + Name = %[1]q } } -# Thing to help testing changes -resource "aws_route_table" "r" { - vpc_id = aws_vpc.foo.id +resource "aws_route_table" "test" { + vpc_id = aws_vpc.test.id route { - cidr_block = "10.0.1.0/24" - gateway_id = aws_internet_gateway.gw.id + cidr_block = %[3]q + gateway_id = aws_internet_gateway.test.id } tags = { - Name = "other" + Name = %[1]q } } -resource "aws_main_route_table_association" "a" { - vpc_id = aws_vpc.foo.id - route_table_id = aws_route_table.r.id +resource "aws_main_route_table_association" "test" { + vpc_id = aws_vpc.test.id + route_table_id = aws_route_table.test.id +} +`, rName, destinationCidr1, destinationCidr2) } -` -func testAccAWSDefaultRouteTableConfigRouteTransitGatewayID() string { - return ` +func testAccDefaultRouteTableConfigIpv4TransitGateway(rName, destinationCidr string) string { + return composeConfig(testAccAvailableAZsNoOptInDefaultExcludeConfig(), fmt.Sprintf(` resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" + cidr_block = "10.1.0.0/16" tags = { - Name = "tf-acc-test-ec2-default-route-table-transit-gateway-id" + Name = %[1]q } } resource "aws_subnet" "test" { - cidr_block = "10.0.0.0/24" - vpc_id = aws_vpc.test.id + availability_zone = data.aws_availability_zones.available.names[0] + cidr_block = "10.1.1.0/24" + vpc_id = aws_vpc.test.id tags = { - Name = "tf-acc-test-ec2-default-route-table-transit-gateway-id" + Name = %[1]q } } resource "aws_ec2_transit_gateway" "test" { tags = { - Name = "tf-acc-test-ec2-default-route-table-transit-gateway-id" + Name = %[1]q } } @@ -589,7 +638,7 @@ resource "aws_ec2_transit_gateway_vpc_attachment" "test" { vpc_id = aws_vpc.test.id tags = { - Name = "tf-acc-test-ec2-default-route-table-transit-gateway-id" + Name = %[1]q } } @@ -597,14 +646,18 @@ resource "aws_default_route_table" "test" { default_route_table_id = aws_vpc.test.default_route_table_id route { - cidr_block = "0.0.0.0/0" + cidr_block = %[2]q transit_gateway_id = aws_ec2_transit_gateway_vpc_attachment.test.transit_gateway_id } + + tags = { + Name = %[1]q + } } -` +`, rName, destinationCidr)) } -func testAccAWSDefaultRouteTableConfigRouteVpcEndpointId(rName string) string { +func testAccDefaultRouteTableConfigIpv4VpcEndpoint(rName, destinationCidr string) string { return composeConfig( testAccAvailableAZsNoOptInConfig(), fmt.Sprintf(` @@ -614,13 +667,17 @@ resource "aws_vpc" "test" { cidr_block = "10.10.10.0/25" tags = { - Name = "tf-acc-test-load-balancer" + Name = %[1]q } } # Another route destination for update resource "aws_internet_gateway" "test" { vpc_id = aws_vpc.test.id + + tags = { + Name = %[1]q + } } resource "aws_subnet" "test" { @@ -629,7 +686,7 @@ resource "aws_subnet" "test" { vpc_id = aws_vpc.test.id tags = { - Name = "tf-acc-test-load-balancer" + Name = %[1]q } } @@ -646,6 +703,10 @@ resource "aws_vpc_endpoint_service" "test" { acceptance_required = false allowed_principals = [data.aws_caller_identity.current.arn] gateway_load_balancer_arns = [aws_lb.test.arn] + + tags = { + Name = %[1]q + } } resource "aws_vpc_endpoint" "test" { @@ -653,20 +714,28 @@ resource "aws_vpc_endpoint" "test" { subnet_ids = [aws_subnet.test.id] vpc_endpoint_type = aws_vpc_endpoint_service.test.service_type vpc_id = aws_vpc.test.id + + tags = { + Name = %[1]q + } } resource "aws_default_route_table" "test" { default_route_table_id = aws_vpc.test.default_route_table_id route { - cidr_block = "0.0.0.0/0" + cidr_block = %[2]q vpc_endpoint_id = aws_vpc_endpoint.test.id } + + tags = { + Name = %[1]q + } } -`, rName)) +`, rName, destinationCidr)) } -func testAccAWSDefaultRouteTableConfigRouteVpcEndpointIdNoRoute(rName string) string { +func testAccDefaultRouteTableConfigIpv4VpcEndpointNoRoute(rName string) string { return composeConfig( testAccAvailableAZsNoOptInConfig(), fmt.Sprintf(` @@ -676,13 +745,17 @@ resource "aws_vpc" "test" { cidr_block = "10.10.10.0/25" tags = { - Name = "tf-acc-test-load-balancer" + Name = %[1]q } } # Another route destination for update resource "aws_internet_gateway" "test" { vpc_id = aws_vpc.test.id + + tags = { + Name = %[1]q + } } resource "aws_subnet" "test" { @@ -691,7 +764,7 @@ resource "aws_subnet" "test" { vpc_id = aws_vpc.test.id tags = { - Name = "tf-acc-test-load-balancer" + Name = %[1]q } } @@ -708,6 +781,10 @@ resource "aws_vpc_endpoint_service" "test" { acceptance_required = false allowed_principals = [data.aws_caller_identity.current.arn] gateway_load_balancer_arns = [aws_lb.test.arn] + + tags = { + Name = %[1]q + } } resource "aws_vpc_endpoint" "test" { @@ -715,6 +792,10 @@ resource "aws_vpc_endpoint" "test" { subnet_ids = [aws_subnet.test.id] vpc_endpoint_type = aws_vpc_endpoint_service.test.service_type vpc_id = aws_vpc.test.id + + tags = { + Name = %[1]q + } } resource "aws_default_route_table" "test" { @@ -724,52 +805,58 @@ resource "aws_default_route_table" "test" { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.test.id } + + tags = { + Name = %[1]q + } } `, rName)) } -const testAccDefaultRouteTable_vpc_endpoint = ` +func testAccDefaultRouteTableConfigVpcEndpointAssociation(rName, destinationCidr string) string { + return fmt.Sprintf(` data "aws_region" "current" {} resource "aws_vpc" "test" { cidr_block = "10.0.0.0/16" tags = { - Name = "terraform-testacc-default-route-table-vpc-endpoint" + Name = %[1]q } } -resource "aws_internet_gateway" "igw" { +resource "aws_internet_gateway" "test" { vpc_id = aws_vpc.test.id tags = { - Name = "terraform-testacc-default-route-table-vpc-endpoint" + Name = %[1]q } } -resource "aws_vpc_endpoint" "s3" { +resource "aws_vpc_endpoint" "test" { vpc_id = aws_vpc.test.id service_name = "com.amazonaws.${data.aws_region.current.name}.s3" route_table_ids = [aws_vpc.test.default_route_table_id] tags = { - Name = "terraform-testacc-default-route-table-vpc-endpoint" + Name = %[1]q } } -resource "aws_default_route_table" "foo" { +resource "aws_default_route_table" "test" { default_route_table_id = aws_vpc.test.default_route_table_id tags = { - Name = "test" + Name = %[1]q } route { - cidr_block = "0.0.0.0/0" - gateway_id = aws_internet_gateway.igw.id + cidr_block = %[2]q + gateway_id = aws_internet_gateway.test.id } } -` +`, rName, destinationCidr) +} func testAccDefaultRouteTableConfigTags1(rName, tagKey1, tagValue1 string) string { return fmt.Sprintf(` @@ -812,7 +899,7 @@ resource "aws_default_route_table" "test" { `, rName, tagKey1, tagValue1, tagKey2, tagValue2) } -func testAccAWSDefaultRouteTableConfigConditionalIpv4Ipv6(rName string, ipv6Route bool) string { +func testAccDefaultRouteTableConfigConditionalIpv4Ipv6(rName, destinationCidr, destinationIpv6Cidr string, ipv6Route bool) string { return fmt.Sprintf(` resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16" @@ -824,14 +911,6 @@ resource "aws_vpc" "test" { } } -resource "aws_egress_only_internet_gateway" "test" { - vpc_id = aws_vpc.test.id - - tags = { - Name = %[1]q - } -} - resource "aws_internet_gateway" "test" { vpc_id = aws_vpc.test.id @@ -841,9 +920,9 @@ resource "aws_internet_gateway" "test" { } locals { - ipv6 = %[2]t - destination = "0.0.0.0/0" - destination_ipv6 = "::/0" + ipv6 = %[4]t + destination = %[2]q + destination_ipv6 = %[3]q } resource "aws_default_route_table" "test" { @@ -859,7 +938,7 @@ resource "aws_default_route_table" "test" { Name = %[1]q } } -`, rName, ipv6Route) +`, rName, destinationCidr, destinationIpv6Cidr, ipv6Route) } func testAccAWSDefaultRouteTableImportStateIdFunc(resourceName string) resource.ImportStateIdFunc { diff --git a/aws/resource_aws_route_table_test.go b/aws/resource_aws_route_table_test.go index 50cabed66036..244de46c8b97 100644 --- a/aws/resource_aws_route_table_test.go +++ b/aws/resource_aws_route_table_test.go @@ -630,6 +630,16 @@ func TestAccAWSRouteTable_ConditionalCidrBlock(t *testing.T) { }) } +func testAccCheckAWSRouteTableNumberOfRoutes(routeTable *ec2.RouteTable, n int) resource.TestCheckFunc { + return func(s *terraform.State) error { + if len := len(routeTable.Routes); len != n { + return fmt.Errorf("Route Table has incorrect number of routes (Expected=%d, Actual=%d)\n", n, len) + } + + return nil + } +} + const testAccRouteTableConfig = ` resource "aws_vpc" "test" { cidr_block = "10.1.0.0/16"