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  `