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  `