github.com/jefferai/terraform@v0.3.7-0.20150310153852-f7512ca29fcf/builtin/providers/aws/resource_aws_internet_gateway_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/aws-sdk-go/aws"
     8  	"github.com/hashicorp/aws-sdk-go/gen/ec2"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccAWSInternetGateway(t *testing.T) {
    14  	var v, v2 ec2.InternetGateway
    15  
    16  	testNotEqual := func(*terraform.State) error {
    17  		if len(v.Attachments) == 0 {
    18  			return fmt.Errorf("IG A is not attached")
    19  		}
    20  		if len(v2.Attachments) == 0 {
    21  			return fmt.Errorf("IG B is not attached")
    22  		}
    23  
    24  		id1 := v.Attachments[0].VPCID
    25  		id2 := v2.Attachments[0].VPCID
    26  		if id1 == id2 {
    27  			return fmt.Errorf("Both attachment IDs are the same")
    28  		}
    29  
    30  		return nil
    31  	}
    32  
    33  	resource.Test(t, resource.TestCase{
    34  		PreCheck:     func() { testAccPreCheck(t) },
    35  		Providers:    testAccProviders,
    36  		CheckDestroy: testAccCheckInternetGatewayDestroy,
    37  		Steps: []resource.TestStep{
    38  			resource.TestStep{
    39  				Config: testAccInternetGatewayConfig,
    40  				Check: resource.ComposeTestCheckFunc(
    41  					testAccCheckInternetGatewayExists(
    42  						"aws_internet_gateway.foo", &v),
    43  				),
    44  			},
    45  
    46  			resource.TestStep{
    47  				Config: testAccInternetGatewayConfigChangeVPC,
    48  				Check: resource.ComposeTestCheckFunc(
    49  					testAccCheckInternetGatewayExists(
    50  						"aws_internet_gateway.foo", &v2),
    51  					testNotEqual,
    52  				),
    53  			},
    54  		},
    55  	})
    56  }
    57  
    58  func TestAccAWSInternetGateway_delete(t *testing.T) {
    59  	var ig ec2.InternetGateway
    60  
    61  	testDeleted := func(r string) resource.TestCheckFunc {
    62  		return func(s *terraform.State) error {
    63  			_, ok := s.RootModule().Resources[r]
    64  			if ok {
    65  				return fmt.Errorf("Internet Gateway %q should have been deleted", r)
    66  			}
    67  			return nil
    68  		}
    69  	}
    70  
    71  	resource.Test(t, resource.TestCase{
    72  		PreCheck:     func() { testAccPreCheck(t) },
    73  		Providers:    testAccProviders,
    74  		CheckDestroy: testAccCheckInternetGatewayDestroy,
    75  		Steps: []resource.TestStep{
    76  			resource.TestStep{
    77  				Config: testAccInternetGatewayConfig,
    78  				Check: resource.ComposeTestCheckFunc(
    79  					testAccCheckInternetGatewayExists("aws_internet_gateway.foo", &ig)),
    80  			},
    81  			resource.TestStep{
    82  				Config: testAccNoInternetGatewayConfig,
    83  				Check:  resource.ComposeTestCheckFunc(testDeleted("aws_internet_gateway.foo")),
    84  			},
    85  		},
    86  	})
    87  }
    88  
    89  func TestAccInternetGateway_tags(t *testing.T) {
    90  	var v ec2.InternetGateway
    91  
    92  	resource.Test(t, resource.TestCase{
    93  		PreCheck:     func() { testAccPreCheck(t) },
    94  		Providers:    testAccProviders,
    95  		CheckDestroy: testAccCheckInternetGatewayDestroy,
    96  		Steps: []resource.TestStep{
    97  			resource.TestStep{
    98  				Config: testAccCheckInternetGatewayConfigTags,
    99  				Check: resource.ComposeTestCheckFunc(
   100  					testAccCheckInternetGatewayExists("aws_internet_gateway.foo", &v),
   101  				),
   102  			},
   103  
   104  			resource.TestStep{
   105  				Config: testAccCheckInternetGatewayConfigTagsUpdate,
   106  				Check: resource.ComposeTestCheckFunc(
   107  					testAccCheckInternetGatewayExists("aws_internet_gateway.foo", &v),
   108  					testAccCheckTagsSDK(&v.Tags, "foo", ""),
   109  					testAccCheckTagsSDK(&v.Tags, "bar", "baz"),
   110  				),
   111  			},
   112  		},
   113  	})
   114  }
   115  
   116  func testAccCheckInternetGatewayDestroy(s *terraform.State) error {
   117  	ec2conn := testAccProvider.Meta().(*AWSClient).awsEC2conn
   118  
   119  	for _, rs := range s.RootModule().Resources {
   120  		if rs.Type != "aws_internet_gateway" {
   121  			continue
   122  		}
   123  
   124  		// Try to find the resource
   125  		resp, err := ec2conn.DescribeInternetGateways(&ec2.DescribeInternetGatewaysRequest{
   126  			InternetGatewayIDs: []string{rs.Primary.ID},
   127  		})
   128  		if err == nil {
   129  			if len(resp.InternetGateways) > 0 {
   130  				return fmt.Errorf("still exists")
   131  			}
   132  
   133  			return nil
   134  		}
   135  
   136  		// Verify the error is what we want
   137  		ec2err, ok := err.(aws.APIError)
   138  		if !ok {
   139  			return err
   140  		}
   141  		if ec2err.Code != "InvalidInternetGatewayID.NotFound" {
   142  			return err
   143  		}
   144  	}
   145  
   146  	return nil
   147  }
   148  
   149  func testAccCheckInternetGatewayExists(n string, ig *ec2.InternetGateway) resource.TestCheckFunc {
   150  	return func(s *terraform.State) error {
   151  		rs, ok := s.RootModule().Resources[n]
   152  		if !ok {
   153  			return fmt.Errorf("Not found: %s", n)
   154  		}
   155  
   156  		if rs.Primary.ID == "" {
   157  			return fmt.Errorf("No ID is set")
   158  		}
   159  
   160  		ec2conn := testAccProvider.Meta().(*AWSClient).awsEC2conn
   161  		resp, err := ec2conn.DescribeInternetGateways(&ec2.DescribeInternetGatewaysRequest{
   162  			InternetGatewayIDs: []string{rs.Primary.ID},
   163  		})
   164  		if err != nil {
   165  			return err
   166  		}
   167  		if len(resp.InternetGateways) == 0 {
   168  			return fmt.Errorf("InternetGateway not found")
   169  		}
   170  
   171  		*ig = resp.InternetGateways[0]
   172  
   173  		return nil
   174  	}
   175  }
   176  
   177  const testAccNoInternetGatewayConfig = `
   178  resource "aws_vpc" "foo" {
   179  	cidr_block = "10.1.0.0/16"
   180  }
   181  `
   182  
   183  const testAccInternetGatewayConfig = `
   184  resource "aws_vpc" "foo" {
   185  	cidr_block = "10.1.0.0/16"
   186  }
   187  
   188  resource "aws_internet_gateway" "foo" {
   189  	vpc_id = "${aws_vpc.foo.id}"
   190  }
   191  `
   192  
   193  const testAccInternetGatewayConfigChangeVPC = `
   194  resource "aws_vpc" "foo" {
   195  	cidr_block = "10.1.0.0/16"
   196  }
   197  
   198  resource "aws_vpc" "bar" {
   199  	cidr_block = "10.2.0.0/16"
   200  }
   201  
   202  resource "aws_internet_gateway" "foo" {
   203  	vpc_id = "${aws_vpc.bar.id}"
   204  }
   205  `
   206  
   207  const testAccCheckInternetGatewayConfigTags = `
   208  resource "aws_vpc" "foo" {
   209  	cidr_block = "10.1.0.0/16"
   210  }
   211  
   212  resource "aws_internet_gateway" "foo" {
   213  	vpc_id = "${aws_vpc.foo.id}"
   214  	tags {
   215  		foo = "bar"
   216  	}
   217  }
   218  `
   219  
   220  const testAccCheckInternetGatewayConfigTagsUpdate = `
   221  resource "aws_vpc" "foo" {
   222  	cidr_block = "10.1.0.0/16"
   223  }
   224  
   225  resource "aws_internet_gateway" "foo" {
   226  	vpc_id = "${aws_vpc.foo.id}"
   227  	tags {
   228  		bar = "baz"
   229  	}
   230  }
   231  `