github.com/arvindram03/terraform@v0.3.7-0.20150212015210-408f838db36d/builtin/providers/aws/resource_aws_launch_configuration_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 "github.com/mitchellh/goamz/autoscaling" 10 ) 11 12 func TestAccAWSLaunchConfiguration(t *testing.T) { 13 var conf autoscaling.LaunchConfiguration 14 15 resource.Test(t, resource.TestCase{ 16 PreCheck: func() { testAccPreCheck(t) }, 17 Providers: testAccProviders, 18 CheckDestroy: testAccCheckAWSLaunchConfigurationDestroy, 19 Steps: []resource.TestStep{ 20 resource.TestStep{ 21 Config: testAccAWSLaunchConfigurationConfig, 22 Check: resource.ComposeTestCheckFunc( 23 testAccCheckAWSLaunchConfigurationExists("aws_launch_configuration.bar", &conf), 24 testAccCheckAWSLaunchConfigurationAttributes(&conf), 25 resource.TestCheckResourceAttr( 26 "aws_launch_configuration.bar", "image_id", "ami-21f78e11"), 27 resource.TestCheckResourceAttr( 28 "aws_launch_configuration.bar", "name", "foobar-terraform-test"), 29 resource.TestCheckResourceAttr( 30 "aws_launch_configuration.bar", "instance_type", "t1.micro"), 31 resource.TestCheckResourceAttr( 32 "aws_launch_configuration.bar", "associate_public_ip_address", "true"), 33 resource.TestCheckResourceAttr( 34 "aws_launch_configuration.bar", "spot_price", ""), 35 ), 36 }, 37 38 resource.TestStep{ 39 Config: TestAccAWSLaunchConfigurationWithSpotPriceConfig, 40 Check: resource.ComposeTestCheckFunc( 41 testAccCheckAWSLaunchConfigurationExists("aws_launch_configuration.bar", &conf), 42 testAccCheckAWSLaunchConfigurationAttributes(&conf), 43 resource.TestCheckResourceAttr( 44 "aws_launch_configuration.bar", "spot_price", "0.01"), 45 ), 46 }, 47 }, 48 }) 49 } 50 51 func testAccCheckAWSLaunchConfigurationDestroy(s *terraform.State) error { 52 conn := testAccProvider.Meta().(*AWSClient).autoscalingconn 53 54 for _, rs := range s.RootModule().Resources { 55 if rs.Type != "aws_launch_configuration" { 56 continue 57 } 58 59 describe, err := conn.DescribeLaunchConfigurations( 60 &autoscaling.DescribeLaunchConfigurations{ 61 Names: []string{rs.Primary.ID}, 62 }) 63 64 if err == nil { 65 if len(describe.LaunchConfigurations) != 0 && 66 describe.LaunchConfigurations[0].Name == rs.Primary.ID { 67 return fmt.Errorf("Launch Configuration still exists") 68 } 69 } 70 71 // Verify the error 72 providerErr, ok := err.(*autoscaling.Error) 73 if !ok { 74 return err 75 } 76 if providerErr.Code != "InvalidLaunchConfiguration.NotFound" { 77 return err 78 } 79 } 80 81 return nil 82 } 83 84 func testAccCheckAWSLaunchConfigurationAttributes(conf *autoscaling.LaunchConfiguration) resource.TestCheckFunc { 85 return func(s *terraform.State) error { 86 if conf.ImageId != "ami-21f78e11" { 87 return fmt.Errorf("Bad image_id: %s", conf.ImageId) 88 } 89 90 if conf.Name != "foobar-terraform-test" { 91 return fmt.Errorf("Bad name: %s", conf.Name) 92 } 93 94 if conf.InstanceType != "t1.micro" { 95 return fmt.Errorf("Bad instance_type: %s", conf.InstanceType) 96 } 97 98 return nil 99 } 100 } 101 102 func testAccCheckAWSLaunchConfigurationExists(n string, res *autoscaling.LaunchConfiguration) resource.TestCheckFunc { 103 return func(s *terraform.State) error { 104 rs, ok := s.RootModule().Resources[n] 105 if !ok { 106 return fmt.Errorf("Not found: %s", n) 107 } 108 109 if rs.Primary.ID == "" { 110 return fmt.Errorf("No Launch Configuration ID is set") 111 } 112 113 conn := testAccProvider.Meta().(*AWSClient).autoscalingconn 114 115 describeOpts := autoscaling.DescribeLaunchConfigurations{ 116 Names: []string{rs.Primary.ID}, 117 } 118 describe, err := conn.DescribeLaunchConfigurations(&describeOpts) 119 120 if err != nil { 121 return err 122 } 123 124 if len(describe.LaunchConfigurations) != 1 || 125 describe.LaunchConfigurations[0].Name != rs.Primary.ID { 126 return fmt.Errorf("Launch Configuration Group not found") 127 } 128 129 *res = describe.LaunchConfigurations[0] 130 131 return nil 132 } 133 } 134 135 const testAccAWSLaunchConfigurationConfig = ` 136 resource "aws_launch_configuration" "bar" { 137 name = "foobar-terraform-test" 138 image_id = "ami-21f78e11" 139 instance_type = "t1.micro" 140 user_data = "foobar-user-data" 141 associate_public_ip_address = true 142 } 143 ` 144 145 const TestAccAWSLaunchConfigurationWithSpotPriceConfig = ` 146 resource "aws_launch_configuration" "bar" { 147 name = "foobar-terraform-test" 148 image_id = "ami-21f78e11" 149 instance_type = "t1.micro" 150 user_data = "foobar-user-data" 151 associate_public_ip_address = true 152 spot_price = "0.01" 153 } 154 `