github.com/tam7t/terraform@v0.7.0-rc2.0.20160705125922-be2469a05c5e/builtin/providers/aws/resource_aws_vpc_peering_connection_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "testing" 8 9 "github.com/aws/aws-sdk-go/aws" 10 "github.com/aws/aws-sdk-go/service/ec2" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSVPCPeeringConnection_basic(t *testing.T) { 16 var connection ec2.VpcPeeringConnection 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { 20 testAccPreCheck(t) 21 if os.Getenv("AWS_ACCOUNT_ID") == "" { 22 t.Fatal("AWS_ACCOUNT_ID must be set") 23 } 24 }, 25 26 IDRefreshName: "aws_vpc_peering_connection.foo", 27 IDRefreshIgnore: []string{"auto_accept"}, 28 29 Providers: testAccProviders, 30 CheckDestroy: testAccCheckAWSVpcPeeringConnectionDestroy, 31 Steps: []resource.TestStep{ 32 resource.TestStep{ 33 Config: testAccVpcPeeringConfig, 34 Check: resource.ComposeTestCheckFunc( 35 testAccCheckAWSVpcPeeringConnectionExists("aws_vpc_peering_connection.foo", &connection), 36 ), 37 }, 38 }, 39 }) 40 } 41 42 func TestAccAWSVPCPeeringConnection_plan(t *testing.T) { 43 var connection ec2.VpcPeeringConnection 44 45 // reach out and DELETE the VPC Peering connection outside of Terraform 46 testDestroy := func(*terraform.State) error { 47 conn := testAccProvider.Meta().(*AWSClient).ec2conn 48 log.Printf("[DEBUG] Test deleting VPC Peering connection") 49 _, err := conn.DeleteVpcPeeringConnection( 50 &ec2.DeleteVpcPeeringConnectionInput{ 51 VpcPeeringConnectionId: connection.VpcPeeringConnectionId, 52 }) 53 if err != nil { 54 return err 55 } 56 return nil 57 } 58 59 resource.Test(t, resource.TestCase{ 60 PreCheck: func() { 61 testAccPreCheck(t) 62 if os.Getenv("AWS_ACCOUNT_ID") == "" { 63 t.Fatal("AWS_ACCOUNT_ID must be set") 64 } 65 }, 66 Providers: testAccProviders, 67 CheckDestroy: testAccCheckAWSVpcPeeringConnectionDestroy, 68 Steps: []resource.TestStep{ 69 resource.TestStep{ 70 Config: testAccVpcPeeringConfig, 71 Check: resource.ComposeTestCheckFunc( 72 testAccCheckAWSVpcPeeringConnectionExists("aws_vpc_peering_connection.foo", &connection), 73 testDestroy, 74 ), 75 ExpectNonEmptyPlan: true, 76 }, 77 }, 78 }) 79 } 80 81 func TestAccAWSVPCPeeringConnection_tags(t *testing.T) { 82 var connection ec2.VpcPeeringConnection 83 peerId := os.Getenv("TF_PEER_ID") 84 if peerId == "" { 85 t.Skip("Error: TestAccAWSVPCPeeringConnection_tags requires a peer id to be set") 86 } 87 88 resource.Test(t, resource.TestCase{ 89 PreCheck: func() { testAccPreCheck(t) }, 90 91 IDRefreshName: "aws_vpc_peering_connection.foo", 92 IDRefreshIgnore: []string{"auto_accept"}, 93 94 Providers: testAccProviders, 95 CheckDestroy: testAccCheckVpcDestroy, 96 Steps: []resource.TestStep{ 97 resource.TestStep{ 98 Config: fmt.Sprintf(testAccVpcPeeringConfigTags, peerId), 99 Check: resource.ComposeTestCheckFunc( 100 testAccCheckAWSVpcPeeringConnectionExists("aws_vpc_peering_connection.foo", &connection), 101 testAccCheckTags(&connection.Tags, "foo", "bar"), 102 ), 103 }, 104 }, 105 }) 106 } 107 108 func testAccCheckAWSVpcPeeringConnectionDestroy(s *terraform.State) error { 109 conn := testAccProvider.Meta().(*AWSClient).ec2conn 110 111 for _, rs := range s.RootModule().Resources { 112 if rs.Type != "aws_vpc_peering_connection" { 113 continue 114 } 115 116 describe, err := conn.DescribeVpcPeeringConnections( 117 &ec2.DescribeVpcPeeringConnectionsInput{ 118 VpcPeeringConnectionIds: []*string{aws.String(rs.Primary.ID)}, 119 }) 120 121 if err != nil { 122 return err 123 } 124 125 var pc *ec2.VpcPeeringConnection 126 for _, c := range describe.VpcPeeringConnections { 127 if rs.Primary.ID == *c.VpcPeeringConnectionId { 128 pc = c 129 } 130 } 131 132 if pc == nil { 133 // not found 134 return nil 135 } 136 137 if pc.Status != nil { 138 if *pc.Status.Code == "deleted" { 139 return nil 140 } 141 return fmt.Errorf("Found vpc peering connection in unexpected state: %s", pc) 142 } 143 144 // return error here; we've found the vpc_peering object we want, however 145 // it's not in an expected state 146 return fmt.Errorf("Fall through error for testAccCheckAWSVpcPeeringConnectionDestroy") 147 } 148 149 return nil 150 } 151 152 func testAccCheckAWSVpcPeeringConnectionExists(n string, connection *ec2.VpcPeeringConnection) resource.TestCheckFunc { 153 return func(s *terraform.State) error { 154 rs, ok := s.RootModule().Resources[n] 155 if !ok { 156 return fmt.Errorf("Not found: %s", n) 157 } 158 159 if rs.Primary.ID == "" { 160 return fmt.Errorf("No vpc peering connection id is set") 161 } 162 163 conn := testAccProvider.Meta().(*AWSClient).ec2conn 164 resp, err := conn.DescribeVpcPeeringConnections( 165 &ec2.DescribeVpcPeeringConnectionsInput{ 166 VpcPeeringConnectionIds: []*string{aws.String(rs.Primary.ID)}, 167 }) 168 if err != nil { 169 return err 170 } 171 if len(resp.VpcPeeringConnections) == 0 { 172 return fmt.Errorf("VPC peering connection not found") 173 } 174 175 *connection = *resp.VpcPeeringConnections[0] 176 177 return nil 178 } 179 } 180 181 const testAccVpcPeeringConfig = ` 182 resource "aws_vpc" "foo" { 183 cidr_block = "10.0.0.0/16" 184 tags { 185 Name = "TestAccAWSVPCPeeringConnection_basic" 186 } 187 } 188 189 resource "aws_vpc" "bar" { 190 cidr_block = "10.1.0.0/16" 191 } 192 193 resource "aws_vpc_peering_connection" "foo" { 194 vpc_id = "${aws_vpc.foo.id}" 195 peer_vpc_id = "${aws_vpc.bar.id}" 196 auto_accept = true 197 } 198 ` 199 200 const testAccVpcPeeringConfigTags = ` 201 resource "aws_vpc" "foo" { 202 cidr_block = "10.0.0.0/16" 203 tags { 204 Name = "TestAccAWSVPCPeeringConnection_tags" 205 } 206 } 207 208 resource "aws_vpc" "bar" { 209 cidr_block = "10.1.0.0/16" 210 } 211 212 resource "aws_vpc_peering_connection" "foo" { 213 vpc_id = "${aws_vpc.foo.id}" 214 peer_vpc_id = "${aws_vpc.bar.id}" 215 peer_owner_id = "%s" 216 tags { 217 foo = "bar" 218 } 219 } 220 `