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 `