github.com/recobe182/terraform@v0.8.5-0.20170117231232-49ab22a935b7/builtin/providers/aws/resource_aws_vpc_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  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccAWSVpc_basic(t *testing.T) {
    15  	var vpc ec2.Vpc
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckVpcDestroy,
    21  		Steps: []resource.TestStep{
    22  			{
    23  				Config: testAccVpcConfig,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckVpcExists("aws_vpc.foo", &vpc),
    26  					testAccCheckVpcCidr(&vpc, "10.1.0.0/16"),
    27  					resource.TestCheckResourceAttr(
    28  						"aws_vpc.foo", "cidr_block", "10.1.0.0/16"),
    29  					resource.TestCheckResourceAttrSet(
    30  						"aws_vpc.foo", "default_route_table_id"),
    31  					resource.TestCheckResourceAttr(
    32  						"aws_vpc.foo", "enable_dns_support", "true"),
    33  				),
    34  			},
    35  		},
    36  	})
    37  }
    38  
    39  func TestAccAWSVpc_dedicatedTenancy(t *testing.T) {
    40  	var vpc ec2.Vpc
    41  
    42  	resource.Test(t, resource.TestCase{
    43  		PreCheck:     func() { testAccPreCheck(t) },
    44  		Providers:    testAccProviders,
    45  		CheckDestroy: testAccCheckVpcDestroy,
    46  		Steps: []resource.TestStep{
    47  			{
    48  				Config: testAccVpcDedicatedConfig,
    49  				Check: resource.ComposeTestCheckFunc(
    50  					testAccCheckVpcExists("aws_vpc.bar", &vpc),
    51  					resource.TestCheckResourceAttr(
    52  						"aws_vpc.bar", "instance_tenancy", "dedicated"),
    53  				),
    54  			},
    55  		},
    56  	})
    57  }
    58  
    59  func TestAccAWSVpc_tags(t *testing.T) {
    60  	var vpc ec2.Vpc
    61  
    62  	resource.Test(t, resource.TestCase{
    63  		PreCheck:     func() { testAccPreCheck(t) },
    64  		Providers:    testAccProviders,
    65  		CheckDestroy: testAccCheckVpcDestroy,
    66  		Steps: []resource.TestStep{
    67  			{
    68  				Config: testAccVpcConfigTags,
    69  				Check: resource.ComposeTestCheckFunc(
    70  					testAccCheckVpcExists("aws_vpc.foo", &vpc),
    71  					testAccCheckVpcCidr(&vpc, "10.1.0.0/16"),
    72  					resource.TestCheckResourceAttr(
    73  						"aws_vpc.foo", "cidr_block", "10.1.0.0/16"),
    74  					testAccCheckTags(&vpc.Tags, "foo", "bar"),
    75  				),
    76  			},
    77  
    78  			{
    79  				Config: testAccVpcConfigTagsUpdate,
    80  				Check: resource.ComposeTestCheckFunc(
    81  					testAccCheckVpcExists("aws_vpc.foo", &vpc),
    82  					testAccCheckTags(&vpc.Tags, "foo", ""),
    83  					testAccCheckTags(&vpc.Tags, "bar", "baz"),
    84  				),
    85  			},
    86  		},
    87  	})
    88  }
    89  
    90  func TestAccAWSVpc_update(t *testing.T) {
    91  	var vpc ec2.Vpc
    92  
    93  	resource.Test(t, resource.TestCase{
    94  		PreCheck:     func() { testAccPreCheck(t) },
    95  		Providers:    testAccProviders,
    96  		CheckDestroy: testAccCheckVpcDestroy,
    97  		Steps: []resource.TestStep{
    98  			{
    99  				Config: testAccVpcConfig,
   100  				Check: resource.ComposeTestCheckFunc(
   101  					testAccCheckVpcExists("aws_vpc.foo", &vpc),
   102  					testAccCheckVpcCidr(&vpc, "10.1.0.0/16"),
   103  					resource.TestCheckResourceAttr(
   104  						"aws_vpc.foo", "cidr_block", "10.1.0.0/16"),
   105  				),
   106  			},
   107  			{
   108  				Config: testAccVpcConfigUpdate,
   109  				Check: resource.ComposeTestCheckFunc(
   110  					testAccCheckVpcExists("aws_vpc.foo", &vpc),
   111  					resource.TestCheckResourceAttr(
   112  						"aws_vpc.foo", "enable_dns_hostnames", "true"),
   113  				),
   114  			},
   115  		},
   116  	})
   117  }
   118  
   119  func testAccCheckVpcDestroy(s *terraform.State) error {
   120  	conn := testAccProvider.Meta().(*AWSClient).ec2conn
   121  
   122  	for _, rs := range s.RootModule().Resources {
   123  		if rs.Type != "aws_vpc" {
   124  			continue
   125  		}
   126  
   127  		// Try to find the VPC
   128  		DescribeVpcOpts := &ec2.DescribeVpcsInput{
   129  			VpcIds: []*string{aws.String(rs.Primary.ID)},
   130  		}
   131  		resp, err := conn.DescribeVpcs(DescribeVpcOpts)
   132  		if err == nil {
   133  			if len(resp.Vpcs) > 0 {
   134  				return fmt.Errorf("VPCs still exist.")
   135  			}
   136  
   137  			return nil
   138  		}
   139  
   140  		// Verify the error is what we want
   141  		ec2err, ok := err.(awserr.Error)
   142  		if !ok {
   143  			return err
   144  		}
   145  		if ec2err.Code() != "InvalidVpcID.NotFound" {
   146  			return err
   147  		}
   148  	}
   149  
   150  	return nil
   151  }
   152  
   153  func testAccCheckVpcCidr(vpc *ec2.Vpc, expected string) resource.TestCheckFunc {
   154  	return func(s *terraform.State) error {
   155  		CIDRBlock := vpc.CidrBlock
   156  		if *CIDRBlock != expected {
   157  			return fmt.Errorf("Bad cidr: %s", *vpc.CidrBlock)
   158  		}
   159  
   160  		return nil
   161  	}
   162  }
   163  
   164  func testAccCheckVpcExists(n string, vpc *ec2.Vpc) resource.TestCheckFunc {
   165  	return func(s *terraform.State) error {
   166  		rs, ok := s.RootModule().Resources[n]
   167  		if !ok {
   168  			return fmt.Errorf("Not found: %s", n)
   169  		}
   170  
   171  		if rs.Primary.ID == "" {
   172  			return fmt.Errorf("No VPC ID is set")
   173  		}
   174  
   175  		conn := testAccProvider.Meta().(*AWSClient).ec2conn
   176  		DescribeVpcOpts := &ec2.DescribeVpcsInput{
   177  			VpcIds: []*string{aws.String(rs.Primary.ID)},
   178  		}
   179  		resp, err := conn.DescribeVpcs(DescribeVpcOpts)
   180  		if err != nil {
   181  			return err
   182  		}
   183  		if len(resp.Vpcs) == 0 {
   184  			return fmt.Errorf("VPC not found")
   185  		}
   186  
   187  		*vpc = *resp.Vpcs[0]
   188  
   189  		return nil
   190  	}
   191  }
   192  
   193  // https://github.com/hashicorp/terraform/issues/1301
   194  func TestAccAWSVpc_bothDnsOptionsSet(t *testing.T) {
   195  	resource.Test(t, resource.TestCase{
   196  		PreCheck:     func() { testAccPreCheck(t) },
   197  		Providers:    testAccProviders,
   198  		CheckDestroy: testAccCheckVpcDestroy,
   199  		Steps: []resource.TestStep{
   200  			{
   201  				Config: testAccVpcConfig_BothDnsOptions,
   202  				Check: resource.ComposeTestCheckFunc(
   203  					resource.TestCheckResourceAttr(
   204  						"aws_vpc.bar", "enable_dns_hostnames", "true"),
   205  					resource.TestCheckResourceAttr(
   206  						"aws_vpc.bar", "enable_dns_support", "true"),
   207  				),
   208  			},
   209  		},
   210  	})
   211  }
   212  
   213  // https://github.com/hashicorp/terraform/issues/10168
   214  func TestAccAWSVpc_DisabledDnsSupport(t *testing.T) {
   215  	resource.Test(t, resource.TestCase{
   216  		PreCheck:     func() { testAccPreCheck(t) },
   217  		Providers:    testAccProviders,
   218  		CheckDestroy: testAccCheckVpcDestroy,
   219  		Steps: []resource.TestStep{
   220  			{
   221  				Config: testAccVpcConfig_DisabledDnsSupport,
   222  				Check: resource.ComposeTestCheckFunc(
   223  					resource.TestCheckResourceAttr(
   224  						"aws_vpc.bar", "enable_dns_support", "false"),
   225  				),
   226  			},
   227  		},
   228  	})
   229  }
   230  
   231  func TestAccAWSVpc_classiclinkOptionSet(t *testing.T) {
   232  	resource.Test(t, resource.TestCase{
   233  		PreCheck:     func() { testAccPreCheck(t) },
   234  		Providers:    testAccProviders,
   235  		CheckDestroy: testAccCheckVpcDestroy,
   236  		Steps: []resource.TestStep{
   237  			{
   238  				Config: testAccVpcConfig_ClassiclinkOption,
   239  				Check: resource.ComposeTestCheckFunc(
   240  					resource.TestCheckResourceAttr(
   241  						"aws_vpc.bar", "enable_classiclink", "true"),
   242  				),
   243  			},
   244  		},
   245  	})
   246  }
   247  
   248  const testAccVpcConfig = `
   249  resource "aws_vpc" "foo" {
   250  	cidr_block = "10.1.0.0/16"
   251  }
   252  `
   253  
   254  const testAccVpcConfigUpdate = `
   255  resource "aws_vpc" "foo" {
   256  	cidr_block = "10.1.0.0/16"
   257  	enable_dns_hostnames = true
   258  }
   259  `
   260  
   261  const testAccVpcConfigTags = `
   262  resource "aws_vpc" "foo" {
   263  	cidr_block = "10.1.0.0/16"
   264  
   265  	tags {
   266  		foo = "bar"
   267  	}
   268  }
   269  `
   270  
   271  const testAccVpcConfigTagsUpdate = `
   272  resource "aws_vpc" "foo" {
   273  	cidr_block = "10.1.0.0/16"
   274  
   275  	tags {
   276  		bar = "baz"
   277  	}
   278  }
   279  `
   280  const testAccVpcDedicatedConfig = `
   281  resource "aws_vpc" "bar" {
   282  	instance_tenancy = "dedicated"
   283  
   284  	cidr_block = "10.2.0.0/16"
   285  }
   286  `
   287  
   288  const testAccVpcConfig_BothDnsOptions = `
   289  provider "aws" {
   290  	region = "eu-central-1"
   291  }
   292  
   293  resource "aws_vpc" "bar" {
   294  	cidr_block = "10.2.0.0/16"
   295  
   296  	enable_dns_hostnames = true
   297  	enable_dns_support = true
   298  }
   299  `
   300  
   301  const testAccVpcConfig_DisabledDnsSupport = `
   302  provider "aws" {
   303  	region = "us-west-2"
   304  }
   305  
   306  resource "aws_vpc" "bar" {
   307  	cidr_block = "10.2.0.0/16"
   308  
   309  	enable_dns_support = false
   310  }
   311  `
   312  
   313  const testAccVpcConfig_ClassiclinkOption = `
   314  resource "aws_vpc" "bar" {
   315  	cidr_block = "172.2.0.0/16"
   316  
   317  	enable_classiclink = true
   318  }
   319  `