github.com/bengesoff/terraform@v0.3.1-0.20141018223233-b25a53629922/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_basic(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_capacity", "4"),
    39  					resource.TestCheckResourceAttr(
    40  						"aws_autoscaling_group.bar", "force_delete", "true"),
    41  				),
    42  			},
    43  
    44  			resource.TestStep{
    45  				Config: testAccAWSAutoScalingGroupConfigUpdate,
    46  				Check: resource.ComposeTestCheckFunc(
    47  					testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group),
    48  					resource.TestCheckResourceAttr(
    49  						"aws_autoscaling_group.bar", "desired_capacity", "5"),
    50  				),
    51  			},
    52  		},
    53  	})
    54  }
    55  
    56  func TestAccAWSAutoScalingGroupWithLoadBalancer(t *testing.T) {
    57  	var group autoscaling.AutoScalingGroup
    58  
    59  	resource.Test(t, resource.TestCase{
    60  		PreCheck:     func() { testAccPreCheck(t) },
    61  		Providers:    testAccProviders,
    62  		CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy,
    63  		Steps: []resource.TestStep{
    64  			resource.TestStep{
    65  				Config: testAccAWSAutoScalingGroupConfigWithLoadBalancer,
    66  				Check: resource.ComposeTestCheckFunc(
    67  					testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group),
    68  					testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(&group),
    69  				),
    70  			},
    71  		},
    72  	})
    73  }
    74  func testAccCheckAWSAutoScalingGroupDestroy(s *terraform.State) error {
    75  	conn := testAccProvider.autoscalingconn
    76  
    77  	for _, rs := range s.RootModule().Resources {
    78  		if rs.Type != "aws_autoscaling_group" {
    79  			continue
    80  		}
    81  
    82  		// Try to find the Group
    83  		describeGroups, err := conn.DescribeAutoScalingGroups(
    84  			&autoscaling.DescribeAutoScalingGroups{
    85  				Names: []string{rs.Primary.ID},
    86  			})
    87  
    88  		if err == nil {
    89  			if len(describeGroups.AutoScalingGroups) != 0 &&
    90  				describeGroups.AutoScalingGroups[0].Name == rs.Primary.ID {
    91  				return fmt.Errorf("AutoScaling Group still exists")
    92  			}
    93  		}
    94  
    95  		// Verify the error
    96  		ec2err, ok := err.(*autoscaling.Error)
    97  		if !ok {
    98  			return err
    99  		}
   100  		if ec2err.Code != "InvalidGroup.NotFound" {
   101  			return err
   102  		}
   103  	}
   104  
   105  	return nil
   106  }
   107  
   108  func testAccCheckAWSAutoScalingGroupAttributes(group *autoscaling.AutoScalingGroup) resource.TestCheckFunc {
   109  	return func(s *terraform.State) error {
   110  		if group.AvailabilityZones[0] != "us-west-2a" {
   111  			return fmt.Errorf("Bad availability_zones: %s", group.AvailabilityZones[0])
   112  		}
   113  
   114  		if group.Name != "foobar3-terraform-test" {
   115  			return fmt.Errorf("Bad name: %s", group.Name)
   116  		}
   117  
   118  		if group.MaxSize != 5 {
   119  			return fmt.Errorf("Bad max_size: %d", group.MaxSize)
   120  		}
   121  
   122  		if group.MinSize != 2 {
   123  			return fmt.Errorf("Bad max_size: %d", group.MinSize)
   124  		}
   125  
   126  		if group.HealthCheckType != "ELB" {
   127  			return fmt.Errorf("Bad health_check_type: %s", group.HealthCheckType)
   128  		}
   129  
   130  		if group.HealthCheckGracePeriod != 300 {
   131  			return fmt.Errorf("Bad health_check_grace_period: %d", group.HealthCheckGracePeriod)
   132  		}
   133  
   134  		if group.DesiredCapacity != 4 {
   135  			return fmt.Errorf("Bad desired_capacity: %d", group.DesiredCapacity)
   136  		}
   137  
   138  		if group.LaunchConfigurationName == "" {
   139  			return fmt.Errorf("Bad launch configuration name: %s", group.LaunchConfigurationName)
   140  		}
   141  
   142  		return nil
   143  	}
   144  }
   145  
   146  func testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(group *autoscaling.AutoScalingGroup) resource.TestCheckFunc {
   147  	return func(s *terraform.State) error {
   148  		if group.LoadBalancerNames[0] != "foobar-terraform-test" {
   149  			return fmt.Errorf("Bad load_balancers: %s", group.LoadBalancerNames[0])
   150  		}
   151  
   152  		return nil
   153  	}
   154  }
   155  
   156  func testAccCheckAWSAutoScalingGroupExists(n string, group *autoscaling.AutoScalingGroup) resource.TestCheckFunc {
   157  	return func(s *terraform.State) error {
   158  		rs, ok := s.RootModule().Resources[n]
   159  		if !ok {
   160  			return fmt.Errorf("Not found: %s", n)
   161  		}
   162  
   163  		if rs.Primary.ID == "" {
   164  			return fmt.Errorf("No AutoScaling Group ID is set")
   165  		}
   166  
   167  		conn := testAccProvider.autoscalingconn
   168  
   169  		describeOpts := autoscaling.DescribeAutoScalingGroups{
   170  			Names: []string{rs.Primary.ID},
   171  		}
   172  		describeGroups, err := conn.DescribeAutoScalingGroups(&describeOpts)
   173  
   174  		if err != nil {
   175  			return err
   176  		}
   177  
   178  		if len(describeGroups.AutoScalingGroups) != 1 ||
   179  			describeGroups.AutoScalingGroups[0].Name != rs.Primary.ID {
   180  			return fmt.Errorf("AutoScaling Group not found")
   181  		}
   182  
   183  		*group = describeGroups.AutoScalingGroups[0]
   184  
   185  		return nil
   186  	}
   187  }
   188  
   189  const testAccAWSAutoScalingGroupConfig = `
   190  resource "aws_launch_configuration" "foobar" {
   191    name = "foobarautoscaling-terraform-test"
   192    image_id = "ami-21f78e11"
   193    instance_type = "t1.micro"
   194  }
   195  
   196  resource "aws_autoscaling_group" "bar" {
   197    availability_zones = ["us-west-2a"]
   198    name = "foobar3-terraform-test"
   199    max_size = 5
   200    min_size = 2
   201    health_check_grace_period = 300
   202    health_check_type = "ELB"
   203    desired_capacity = 4
   204    force_delete = true
   205  
   206    launch_configuration = "${aws_launch_configuration.foobar.name}"
   207  }
   208  `
   209  
   210  const testAccAWSAutoScalingGroupConfigUpdate = `
   211  resource "aws_launch_configuration" "foobar" {
   212    name = "foobarautoscaling-terraform-test"
   213    image_id = "ami-21f78e11"
   214    instance_type = "t1.micro"
   215  }
   216  
   217  resource "aws_autoscaling_group" "bar" {
   218    availability_zones = ["us-west-2a"]
   219    name = "foobar3-terraform-test"
   220    max_size = 5
   221    min_size = 2
   222    health_check_grace_period = 300
   223    health_check_type = "ELB"
   224    desired_capacity = 5
   225    force_delete = true
   226  
   227    launch_configuration = "${aws_launch_configuration.foobar.name}"
   228  }
   229  `
   230  
   231  const testAccAWSAutoScalingGroupConfigWithLoadBalancer = `
   232  resource "aws_elb" "bar" {
   233    name = "foobar-terraform-test"
   234    availability_zones = ["us-west-2a"]
   235  
   236    listener {
   237      instance_port = 8000
   238      instance_protocol = "http"
   239      lb_port = 80
   240      lb_protocol = "http"
   241    }
   242  }
   243  
   244  resource "aws_launch_configuration" "foobar" {
   245    name = "foobarautoscaling-terraform-test"
   246    image_id = "ami-21f78e11"
   247    instance_type = "t1.micro"
   248  }
   249  
   250  resource "aws_autoscaling_group" "bar" {
   251    availability_zones = ["us-west-2a"]
   252    name = "foobar3-terraform-test"
   253    max_size = 5
   254    min_size = 2
   255    health_check_grace_period = 300
   256    health_check_type = "ELB"
   257    desired_capacity = 4
   258    force_delete = true
   259  
   260    launch_configuration = "${aws_launch_configuration.foobar.name}"
   261    load_balancers = ["${aws_elb.bar.name}"]
   262  }
   263  `