github.com/federicobaldo/terraform@v0.6.15-0.20160323222747-b20f680cbf05/builtin/providers/aws/resource_aws_elastic_beanstalk_configuration_template_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/elasticbeanstalk" 10 "github.com/hashicorp/terraform/helper/acctest" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSBeanstalkConfigurationTemplate_basic(t *testing.T) { 16 var config elasticbeanstalk.ConfigurationSettingsDescription 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckBeanstalkConfigurationTemplateDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: testAccBeanstalkConfigurationTemplateConfig, 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckBeanstalkConfigurationTemplateExists("aws_elastic_beanstalk_configuration_template.tf_template", &config), 27 ), 28 }, 29 }, 30 }) 31 } 32 33 func TestAccAWSBeanstalkConfigurationTemplate_VPC(t *testing.T) { 34 var config elasticbeanstalk.ConfigurationSettingsDescription 35 36 resource.Test(t, resource.TestCase{ 37 PreCheck: func() { testAccPreCheck(t) }, 38 Providers: testAccProviders, 39 CheckDestroy: testAccCheckBeanstalkConfigurationTemplateDestroy, 40 Steps: []resource.TestStep{ 41 resource.TestStep{ 42 Config: testAccBeanstalkConfigurationTemplateConfig_VPC(acctest.RandString(5)), 43 Check: resource.ComposeTestCheckFunc( 44 testAccCheckBeanstalkConfigurationTemplateExists("aws_elastic_beanstalk_configuration_template.tf_template", &config), 45 ), 46 }, 47 }, 48 }) 49 } 50 51 func testAccCheckBeanstalkConfigurationTemplateDestroy(s *terraform.State) error { 52 conn := testAccProvider.Meta().(*AWSClient).elasticbeanstalkconn 53 54 for _, rs := range s.RootModule().Resources { 55 if rs.Type != "aws_elastic_beanstalk_configuration_template" { 56 continue 57 } 58 59 // Try to find the Configuration Template 60 opts := elasticbeanstalk.DescribeConfigurationSettingsInput{ 61 TemplateName: aws.String(rs.Primary.ID), 62 ApplicationName: aws.String(rs.Primary.Attributes["application"]), 63 } 64 resp, err := conn.DescribeConfigurationSettings(&opts) 65 if err == nil { 66 if len(resp.ConfigurationSettings) > 0 { 67 return fmt.Errorf("Elastic Beanstalk Application still exists.") 68 } 69 70 return nil 71 } 72 73 // Verify the error is what we want 74 ec2err, ok := err.(awserr.Error) 75 if !ok { 76 return err 77 } 78 79 switch { 80 case ec2err.Code() == "InvalidBeanstalkConfigurationTemplateID.NotFound": 81 return nil 82 // This error can be returned when the beanstalk application no longer exists. 83 case ec2err.Code() == "InvalidParameterValue": 84 return nil 85 default: 86 return err 87 } 88 } 89 90 return nil 91 } 92 93 func testAccCheckBeanstalkConfigurationTemplateExists(n string, config *elasticbeanstalk.ConfigurationSettingsDescription) resource.TestCheckFunc { 94 return func(s *terraform.State) error { 95 conn := testAccProvider.Meta().(*AWSClient).elasticbeanstalkconn 96 rs, ok := s.RootModule().Resources[n] 97 if !ok { 98 return fmt.Errorf("Not found: %s", n) 99 } 100 101 if rs.Primary.ID == "" { 102 return fmt.Errorf("Elastic Beanstalk config ID is not set") 103 } 104 105 opts := elasticbeanstalk.DescribeConfigurationSettingsInput{ 106 TemplateName: aws.String(rs.Primary.ID), 107 ApplicationName: aws.String(rs.Primary.Attributes["application"]), 108 } 109 resp, err := conn.DescribeConfigurationSettings(&opts) 110 if err != nil { 111 return err 112 } 113 if len(resp.ConfigurationSettings) == 0 { 114 return fmt.Errorf("Elastic Beanstalk Configurations not found.") 115 } 116 117 *config = *resp.ConfigurationSettings[0] 118 119 return nil 120 } 121 } 122 123 const testAccBeanstalkConfigurationTemplateConfig = ` 124 resource "aws_elastic_beanstalk_application" "tftest" { 125 name = "tf-test-name" 126 description = "tf-test-desc" 127 } 128 129 #resource "aws_elastic_beanstalk_environment" "tfenvtest" { 130 # name = "tf-test-name" 131 # application = "${aws_elastic_beanstalk_application.tftest.name}" 132 # solution_stack_name = "64bit Amazon Linux 2015.03 v2.0.3 running Go 1.4" 133 #} 134 135 resource "aws_elastic_beanstalk_configuration_template" "tf_template" { 136 name = "tf-test-template-config" 137 application = "${aws_elastic_beanstalk_application.tftest.name}" 138 solution_stack_name = "64bit Amazon Linux 2015.09 v2.0.8 running Go 1.4" 139 } 140 ` 141 142 func testAccBeanstalkConfigurationTemplateConfig_VPC(name string) string { 143 return fmt.Sprintf(` 144 resource "aws_vpc" "tf_b_test" { 145 cidr_block = "10.0.0.0/16" 146 147 tags { 148 Name = "beanstalk_crash" 149 } 150 } 151 152 resource "aws_subnet" "main" { 153 vpc_id = "${aws_vpc.tf_b_test.id}" 154 cidr_block = "10.0.0.0/24" 155 156 tags { 157 Name = "subnet-count-test" 158 } 159 } 160 161 resource "aws_elastic_beanstalk_application" "tftest" { 162 name = "tf-test-%s" 163 description = "tf-test-desc" 164 } 165 166 resource "aws_elastic_beanstalk_configuration_template" "tf_template" { 167 name = "tf-test-%s" 168 application = "${aws_elastic_beanstalk_application.tftest.name}" 169 170 solution_stack_name = "64bit Amazon Linux 2015.03 v2.0.3 running Go 1.4" 171 172 setting { 173 namespace = "aws:ec2:vpc" 174 name = "VPCId" 175 value = "${aws_vpc.tf_b_test.id}" 176 } 177 178 setting { 179 namespace = "aws:ec2:vpc" 180 name = "Subnets" 181 value = "${aws_subnet.main.id}" 182 } 183 } 184 `, name, name) 185 }