github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/resource_aws_main_route_table_association_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws/awserr" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 func TestAccAWSMainRouteTableAssociation_basic(t *testing.T) { 13 resource.Test(t, resource.TestCase{ 14 PreCheck: func() { testAccPreCheck(t) }, 15 Providers: testAccProviders, 16 CheckDestroy: testAccCheckMainRouteTableAssociationDestroy, 17 Steps: []resource.TestStep{ 18 resource.TestStep{ 19 Config: testAccMainRouteTableAssociationConfig, 20 Check: resource.ComposeTestCheckFunc( 21 testAccCheckMainRouteTableAssociation( 22 "aws_main_route_table_association.foo", 23 "aws_vpc.foo", 24 "aws_route_table.foo", 25 ), 26 ), 27 }, 28 resource.TestStep{ 29 Config: testAccMainRouteTableAssociationConfigUpdate, 30 Check: resource.ComposeTestCheckFunc( 31 testAccCheckMainRouteTableAssociation( 32 "aws_main_route_table_association.foo", 33 "aws_vpc.foo", 34 "aws_route_table.bar", 35 ), 36 ), 37 }, 38 }, 39 }) 40 } 41 42 func testAccCheckMainRouteTableAssociationDestroy(s *terraform.State) error { 43 conn := testAccProvider.Meta().(*AWSClient).ec2conn 44 45 for _, rs := range s.RootModule().Resources { 46 if rs.Type != "aws_main_route_table_association" { 47 continue 48 } 49 50 mainAssociation, err := findMainRouteTableAssociation( 51 conn, 52 rs.Primary.Attributes["vpc_id"], 53 ) 54 if err != nil { 55 // Verify the error is what we want 56 if ae, ok := err.(awserr.Error); ok && ae.Code() == "ApplicationDoesNotExistException" { 57 continue 58 } 59 return err 60 } 61 62 if mainAssociation != nil { 63 return fmt.Errorf("still exists") 64 } 65 } 66 67 return nil 68 } 69 70 func testAccCheckMainRouteTableAssociation( 71 mainRouteTableAssociationResource string, 72 vpcResource string, 73 routeTableResource string) resource.TestCheckFunc { 74 return func(s *terraform.State) error { 75 rs, ok := s.RootModule().Resources[mainRouteTableAssociationResource] 76 if !ok { 77 return fmt.Errorf("Not found: %s", mainRouteTableAssociationResource) 78 } 79 80 if rs.Primary.ID == "" { 81 return fmt.Errorf("No ID is set") 82 } 83 84 vpc, ok := s.RootModule().Resources[vpcResource] 85 if !ok { 86 return fmt.Errorf("Not found: %s", vpcResource) 87 } 88 89 conn := testAccProvider.Meta().(*AWSClient).ec2conn 90 mainAssociation, err := findMainRouteTableAssociation(conn, vpc.Primary.ID) 91 if err != nil { 92 return err 93 } 94 95 if *mainAssociation.RouteTableAssociationId != rs.Primary.ID { 96 return fmt.Errorf("Found wrong main association: %s", 97 *mainAssociation.RouteTableAssociationId) 98 } 99 100 return nil 101 } 102 } 103 104 const testAccMainRouteTableAssociationConfig = ` 105 resource "aws_vpc" "foo" { 106 cidr_block = "10.1.0.0/16" 107 } 108 109 resource "aws_subnet" "foo" { 110 vpc_id = "${aws_vpc.foo.id}" 111 cidr_block = "10.1.1.0/24" 112 } 113 114 resource "aws_internet_gateway" "foo" { 115 vpc_id = "${aws_vpc.foo.id}" 116 } 117 118 resource "aws_route_table" "foo" { 119 vpc_id = "${aws_vpc.foo.id}" 120 route { 121 cidr_block = "10.0.0.0/8" 122 gateway_id = "${aws_internet_gateway.foo.id}" 123 } 124 } 125 126 resource "aws_main_route_table_association" "foo" { 127 vpc_id = "${aws_vpc.foo.id}" 128 route_table_id = "${aws_route_table.foo.id}" 129 } 130 ` 131 132 const testAccMainRouteTableAssociationConfigUpdate = ` 133 resource "aws_vpc" "foo" { 134 cidr_block = "10.1.0.0/16" 135 } 136 137 resource "aws_subnet" "foo" { 138 vpc_id = "${aws_vpc.foo.id}" 139 cidr_block = "10.1.1.0/24" 140 } 141 142 resource "aws_internet_gateway" "foo" { 143 vpc_id = "${aws_vpc.foo.id}" 144 } 145 146 // Need to keep the old route table around when we update the 147 // main_route_table_association, otherwise Terraform will try to destroy the 148 // route table too early, and will fail because it's still the main one 149 resource "aws_route_table" "foo" { 150 vpc_id = "${aws_vpc.foo.id}" 151 route { 152 cidr_block = "10.0.0.0/8" 153 gateway_id = "${aws_internet_gateway.foo.id}" 154 } 155 } 156 157 resource "aws_route_table" "bar" { 158 vpc_id = "${aws_vpc.foo.id}" 159 route { 160 cidr_block = "10.0.0.0/8" 161 gateway_id = "${aws_internet_gateway.foo.id}" 162 } 163 } 164 165 resource "aws_main_route_table_association" "foo" { 166 vpc_id = "${aws_vpc.foo.id}" 167 route_table_id = "${aws_route_table.bar.id}" 168 } 169 `