github.com/ndarilek/terraform@v0.3.8-0.20150320140257-d3135c1b2bac/builtin/providers/aws/resource_aws_eip_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/hashicorp/aws-sdk-go/aws" 9 "github.com/hashicorp/aws-sdk-go/gen/ec2" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAWSEIP_normal(t *testing.T) { 15 var conf ec2.Address 16 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSEIPDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAWSEIPConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSEIPExists("aws_eip.bar", &conf), 26 testAccCheckAWSEIPAttributes(&conf), 27 ), 28 }, 29 }, 30 }) 31 } 32 33 func TestAccAWSEIP_instance(t *testing.T) { 34 var conf ec2.Address 35 36 resource.Test(t, resource.TestCase{ 37 PreCheck: func() { testAccPreCheck(t) }, 38 Providers: testAccProviders, 39 CheckDestroy: testAccCheckAWSEIPDestroy, 40 Steps: []resource.TestStep{ 41 resource.TestStep{ 42 Config: testAccAWSEIPInstanceConfig, 43 Check: resource.ComposeTestCheckFunc( 44 testAccCheckAWSEIPExists("aws_eip.bar", &conf), 45 testAccCheckAWSEIPAttributes(&conf), 46 ), 47 }, 48 49 resource.TestStep{ 50 Config: testAccAWSEIPInstanceConfig2, 51 Check: resource.ComposeTestCheckFunc( 52 testAccCheckAWSEIPExists("aws_eip.bar", &conf), 53 testAccCheckAWSEIPAttributes(&conf), 54 ), 55 }, 56 }, 57 }) 58 } 59 60 func testAccCheckAWSEIPDestroy(s *terraform.State) error { 61 conn := testAccProvider.Meta().(*AWSClient).ec2conn 62 63 for _, rs := range s.RootModule().Resources { 64 if rs.Type != "aws_eip" { 65 continue 66 } 67 68 req := &ec2.DescribeAddressesRequest{ 69 AllocationIDs: []string{}, 70 PublicIPs: []string{rs.Primary.ID}, 71 } 72 describe, err := conn.DescribeAddresses(req) 73 74 if err == nil { 75 if len(describe.Addresses) != 0 && 76 *describe.Addresses[0].PublicIP == rs.Primary.ID { 77 return fmt.Errorf("EIP still exists") 78 } 79 } 80 81 // Verify the error 82 providerErr, ok := err.(aws.APIError) 83 if !ok { 84 return err 85 } 86 87 if providerErr.Code != "InvalidAllocationID.NotFound" { 88 return fmt.Errorf("Unexpected error: %s", err) 89 } 90 } 91 92 return nil 93 } 94 95 func testAccCheckAWSEIPAttributes(conf *ec2.Address) resource.TestCheckFunc { 96 return func(s *terraform.State) error { 97 if *conf.PublicIP == "" { 98 return fmt.Errorf("empty public_ip") 99 } 100 101 return nil 102 } 103 } 104 105 func testAccCheckAWSEIPExists(n string, res *ec2.Address) resource.TestCheckFunc { 106 return func(s *terraform.State) error { 107 rs, ok := s.RootModule().Resources[n] 108 if !ok { 109 return fmt.Errorf("Not found: %s", n) 110 } 111 112 if rs.Primary.ID == "" { 113 return fmt.Errorf("No EIP ID is set") 114 } 115 116 conn := testAccProvider.Meta().(*AWSClient).ec2conn 117 118 if strings.Contains(rs.Primary.ID, "eipalloc") { 119 req := &ec2.DescribeAddressesRequest{ 120 AllocationIDs: []string{rs.Primary.ID}, 121 PublicIPs: []string{}, 122 } 123 describe, err := conn.DescribeAddresses(req) 124 if err != nil { 125 return err 126 } 127 128 if len(describe.Addresses) != 1 || 129 *describe.Addresses[0].AllocationID != rs.Primary.ID { 130 return fmt.Errorf("EIP not found") 131 } 132 *res = describe.Addresses[0] 133 134 } else { 135 req := &ec2.DescribeAddressesRequest{ 136 AllocationIDs: []string{}, 137 PublicIPs: []string{rs.Primary.ID}, 138 } 139 describe, err := conn.DescribeAddresses(req) 140 if err != nil { 141 return err 142 } 143 144 if len(describe.Addresses) != 1 || 145 *describe.Addresses[0].PublicIP != rs.Primary.ID { 146 return fmt.Errorf("EIP not found") 147 } 148 *res = describe.Addresses[0] 149 } 150 151 return nil 152 } 153 } 154 155 const testAccAWSEIPConfig = ` 156 resource "aws_eip" "bar" { 157 } 158 ` 159 160 const testAccAWSEIPInstanceConfig = ` 161 resource "aws_instance" "foo" { 162 # us-west-2 163 ami = "ami-4fccb37f" 164 instance_type = "m1.small" 165 } 166 167 resource "aws_eip" "bar" { 168 instance = "${aws_instance.foo.id}" 169 } 170 ` 171 172 const testAccAWSEIPInstanceConfig2 = ` 173 resource "aws_instance" "bar" { 174 # us-west-2 175 ami = "ami-4fccb37f" 176 instance_type = "m1.small" 177 } 178 179 resource "aws_eip" "bar" { 180 instance = "${aws_instance.bar.id}" 181 } 182 `