github.com/ezbercih/terraform@v0.1.1-0.20140729011846-3c33865e0839/builtin/providers/aws/resource_aws_autoscaling_group_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 TestAccAWSAutoScalingGroup(t *testing.T) {
    13  	var group autoscaling.AutoScalingGroup
    14  
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccAWSAutoScalingGroupConfig,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group),
    24  					testAccCheckAWSAutoScalingGroupAttributes(&group),
    25  					resource.TestCheckResourceAttr(
    26  						"aws_autoscaling_group.bar", "availability_zones.#.0", "us-west-2a"),
    27  					resource.TestCheckResourceAttr(
    28  						"aws_autoscaling_group.bar", "name", "foobar3-terraform-test"),
    29  					resource.TestCheckResourceAttr(
    30  						"aws_autoscaling_group.bar", "max_size", "5"),
    31  					resource.TestCheckResourceAttr(
    32  						"aws_autoscaling_group.bar", "min_size", "2"),
    33  					resource.TestCheckResourceAttr(
    34  						"aws_autoscaling_group.bar", "health_check_grace_period", "300"),
    35  					resource.TestCheckResourceAttr(
    36  						"aws_autoscaling_group.bar", "health_check_type", "ELB"),
    37  					resource.TestCheckResourceAttr(
    38  						"aws_autoscaling_group.bar", "desired_capicity", "4"),
    39  					resource.TestCheckResourceAttr(
    40  						"aws_autoscaling_group.bar", "force_delete", "true"),
    41  				),
    42  			},
    43  		},
    44  	})
    45  }
    46  
    47  func testAccCheckAWSAutoScalingGroupDestroy(s *terraform.State) error {
    48  	conn := testAccProvider.autoscalingconn
    49  
    50  	for _, rs := range s.Resources {
    51  		if rs.Type != "aws_autoscaling_group" {
    52  			continue
    53  		}
    54  
    55  		// Try to find the Group
    56  		describeGroups, err := conn.DescribeAutoScalingGroups(
    57  			&autoscaling.DescribeAutoScalingGroups{
    58  				Names: []string{rs.ID},
    59  			})
    60  
    61  		if err == nil {
    62  			if len(describeGroups.AutoScalingGroups) != 0 &&
    63  				describeGroups.AutoScalingGroups[0].Name == rs.ID {
    64  				return fmt.Errorf("AutoScaling Group still exists")
    65  			}
    66  		}
    67  
    68  		// Verify the error
    69  		ec2err, ok := err.(*autoscaling.Error)
    70  		if !ok {
    71  			return err
    72  		}
    73  		if ec2err.Code != "InvalidGroup.NotFound" {
    74  			return err
    75  		}
    76  	}
    77  
    78  	return nil
    79  }
    80  
    81  func testAccCheckAWSAutoScalingGroupAttributes(group *autoscaling.AutoScalingGroup) resource.TestCheckFunc {
    82  	return func(s *terraform.State) error {
    83  		if group.AvailabilityZones[0].AvailabilityZone != "us-west-2a" {
    84  			return fmt.Errorf("Bad availability_zones: %s", group.AvailabilityZones[0].AvailabilityZone)
    85  		}
    86  
    87  		if group.Name != "foobar3-terraform-test" {
    88  			return fmt.Errorf("Bad name: %s", group.Name)
    89  		}
    90  
    91  		if group.MaxSize != 5 {
    92  			return fmt.Errorf("Bad max_size: %s", group.MaxSize)
    93  		}
    94  
    95  		if group.MinSize != 2 {
    96  			return fmt.Errorf("Bad max_size: %s", group.MinSize)
    97  		}
    98  
    99  		if group.HealthCheckType != "ELB" {
   100  			return fmt.Errorf("Bad health_check_type: %s", group.HealthCheckType)
   101  		}
   102  
   103  		if group.HealthCheckGracePeriod != 300 {
   104  			return fmt.Errorf("Bad health_check_grace_period: %s", group.HealthCheckGracePeriod)
   105  		}
   106  
   107  		if group.DesiredCapacity != 4 {
   108  			return fmt.Errorf("Bad desired_capicity: %s", group.DesiredCapacity)
   109  		}
   110  
   111  		if group.LaunchConfigurationName != "" {
   112  			return fmt.Errorf("Bad desired_capicity: %s", group.DesiredCapacity)
   113  		}
   114  
   115  		return nil
   116  	}
   117  }
   118  
   119  func testAccCheckAWSAutoScalingGroupExists(n string, group *autoscaling.AutoScalingGroup) resource.TestCheckFunc {
   120  	return func(s *terraform.State) error {
   121  		rs, ok := s.Resources[n]
   122  		if !ok {
   123  			return fmt.Errorf("Not found: %s", n)
   124  		}
   125  
   126  		if rs.ID == "" {
   127  			return fmt.Errorf("No AutoScaling Group ID is set")
   128  		}
   129  
   130  		conn := testAccProvider.autoscalingconn
   131  
   132  		describeOpts := autoscaling.DescribeAutoScalingGroups{
   133  			Names: []string{rs.ID},
   134  		}
   135  		describeGroups, err := conn.DescribeAutoScalingGroups(&describeOpts)
   136  
   137  		if err != nil {
   138  			return err
   139  		}
   140  
   141  		if len(describeGroups.AutoScalingGroups) != 1 ||
   142  			describeGroups.AutoScalingGroups[0].Name != rs.ID {
   143  			return fmt.Errorf("AutoScaling Group not found")
   144  		}
   145  
   146  		*group = describeGroups.AutoScalingGroups[0]
   147  
   148  		return nil
   149  	}
   150  }
   151  
   152  const testAccAWSAutoScalingGroupConfig = `
   153  resource "aws_launch_configuration" "foobar" {
   154    name = "foobarautoscaling-terraform-test"
   155    image_id = "ami-21f78e11"
   156    instance_type = "t1.micro"
   157  }
   158  
   159  resource "aws_autoscaling_group" "bar" {
   160    availability_zones = ["us-west-2a"]
   161    name = "foobar3-terraform-test"
   162    max_size = 5
   163    min_size = 2
   164    health_check_grace_period = 300
   165    health_check_type = "ELB"
   166    desired_capacity = 4
   167    force_delete = true
   168  
   169    launch_configuration = "${aws_launch_configuration.foobar.name}"
   170  }
   171  `