github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/aws/resource_aws_customer_gateway_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/aws/awserr"
     9  	"github.com/aws/aws-sdk-go/service/ec2"
    10  
    11  	"github.com/hashicorp/terraform/helper/resource"
    12  	"github.com/hashicorp/terraform/terraform"
    13  )
    14  
    15  func TestAccAWSCustomerGateway_basic(t *testing.T) {
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckCustomerGatewayDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccCustomerGatewayConfig,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckCustomerGateway(
    25  						"aws_customer_gateway.foo",
    26  					),
    27  				),
    28  			},
    29  			resource.TestStep{
    30  				Config: testAccCustomerGatewayConfigUpdateTags,
    31  				Check: resource.ComposeTestCheckFunc(
    32  					testAccCheckCustomerGateway(
    33  						"aws_customer_gateway.foo",
    34  					),
    35  				),
    36  			},
    37  			resource.TestStep{
    38  				Config: testAccCustomerGatewayConfigForceReplace,
    39  				Check: resource.ComposeTestCheckFunc(
    40  					testAccCheckCustomerGateway(
    41  						"aws_customer_gateway.foo",
    42  					),
    43  				),
    44  			},
    45  		},
    46  	})
    47  }
    48  
    49  func testAccCheckCustomerGatewayDestroy(s *terraform.State) error {
    50  	conn := testAccProvider.Meta().(*AWSClient).ec2conn
    51  
    52  	for _, rs := range s.RootModule().Resources {
    53  		if rs.Type != "aws_customer_gatewah" {
    54  			continue
    55  		}
    56  
    57  		gatewayFilter := &ec2.Filter{
    58  			Name:   aws.String("customer-gateway-id"),
    59  			Values: []*string{aws.String(rs.Primary.ID)},
    60  		}
    61  
    62  		resp, err := conn.DescribeCustomerGateways(&ec2.DescribeCustomerGatewaysInput{
    63  			Filters: []*ec2.Filter{gatewayFilter},
    64  		})
    65  
    66  		if ae, ok := err.(awserr.Error); ok && ae.Code() == "InvalidCustomerGatewayID.NotFound" {
    67  			continue
    68  		}
    69  
    70  		if err == nil {
    71  			if len(resp.CustomerGateways) > 0 {
    72  				return fmt.Errorf("Customer gateway still exists: %v", resp.CustomerGateways)
    73  			}
    74  		}
    75  
    76  		return err
    77  	}
    78  
    79  	return nil
    80  }
    81  
    82  func testAccCheckCustomerGateway(gatewayResource string) resource.TestCheckFunc {
    83  	return func(s *terraform.State) error {
    84  		rs, ok := s.RootModule().Resources[gatewayResource]
    85  		if !ok {
    86  			return fmt.Errorf("Not found: %s", gatewayResource)
    87  		}
    88  
    89  		if rs.Primary.ID == "" {
    90  			return fmt.Errorf("No ID is set")
    91  		}
    92  
    93  		gateway, ok := s.RootModule().Resources[gatewayResource]
    94  		if !ok {
    95  			return fmt.Errorf("Not found: %s", gatewayResource)
    96  		}
    97  
    98  		ec2conn := testAccProvider.Meta().(*AWSClient).ec2conn
    99  		gatewayFilter := &ec2.Filter{
   100  			Name:   aws.String("customer-gateway-id"),
   101  			Values: []*string{aws.String(gateway.Primary.ID)},
   102  		}
   103  
   104  		_, err := ec2conn.DescribeCustomerGateways(&ec2.DescribeCustomerGatewaysInput{
   105  			Filters: []*ec2.Filter{gatewayFilter},
   106  		})
   107  
   108  		if err != nil {
   109  			return err
   110  		}
   111  
   112  		return nil
   113  	}
   114  }
   115  
   116  const testAccCustomerGatewayConfig = `
   117  resource "aws_customer_gateway" "foo" {
   118  	bgp_asn = 60000
   119  	ip_address = "172.0.0.1"
   120  	type = "ipsec.1"
   121  	tags {
   122  		Name = "foo-gateway"
   123  	}
   124  }
   125  `
   126  
   127  // Add the Another: "tag" tag.
   128  const testAccCustomerGatewayConfigUpdateTags = `
   129  resource "aws_customer_gateway" "foo" {
   130  	bgp_asn = 60000
   131  	ip_address = "172.0.0.1"
   132  	type = "ipsec.1"
   133  	tags {
   134  		Name = "foo-gateway"
   135  		Another = "tag"
   136  	}
   137  }
   138  `
   139  
   140  // Change the ip_address.
   141  const testAccCustomerGatewayConfigForceReplace = `
   142  resource "aws_customer_gateway" "foo" {
   143  	bgp_asn = 60000
   144  	ip_address = "172.10.10.1"
   145  	type = "ipsec.1"
   146  	tags {
   147  		Name = "foo-gateway"
   148  		Another = "tag"
   149  	}
   150  }
   151  `