github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_autoscaling_policy_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/autoscaling"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccAWSAutoscalingPolicy_basic(t *testing.T) {
    14  	var policy autoscaling.ScalingPolicy
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckAWSAutoscalingPolicyDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccAWSAutoscalingPolicyConfig,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckScalingPolicyExists("aws_autoscaling_policy.foobar_simple", &policy),
    25  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "adjustment_type", "ChangeInCapacity"),
    26  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "policy_type", "SimpleScaling"),
    27  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "cooldown", "300"),
    28  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "name", "foobar_simple"),
    29  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "scaling_adjustment", "2"),
    30  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "autoscaling_group_name", "terraform-test-foobar5"),
    31  					testAccCheckScalingPolicyExists("aws_autoscaling_policy.foobar_step", &policy),
    32  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "adjustment_type", "ChangeInCapacity"),
    33  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "policy_type", "StepScaling"),
    34  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "name", "foobar_step"),
    35  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "metric_aggregation_type", "Minimum"),
    36  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "estimated_instance_warmup", "200"),
    37  					resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "autoscaling_group_name", "terraform-test-foobar5"),
    38  				),
    39  			},
    40  		},
    41  	})
    42  }
    43  
    44  func testAccCheckScalingPolicyExists(n string, policy *autoscaling.ScalingPolicy) resource.TestCheckFunc {
    45  	return func(s *terraform.State) error {
    46  		rs, ok := s.RootModule().Resources[n]
    47  		if !ok {
    48  			return fmt.Errorf("Not found: %s", n)
    49  		}
    50  
    51  		conn := testAccProvider.Meta().(*AWSClient).autoscalingconn
    52  		params := &autoscaling.DescribePoliciesInput{
    53  			AutoScalingGroupName: aws.String(rs.Primary.Attributes["autoscaling_group_name"]),
    54  			PolicyNames:          []*string{aws.String(rs.Primary.ID)},
    55  		}
    56  		resp, err := conn.DescribePolicies(params)
    57  		if err != nil {
    58  			return err
    59  		}
    60  		if len(resp.ScalingPolicies) == 0 {
    61  			return fmt.Errorf("ScalingPolicy not found")
    62  		}
    63  
    64  		return nil
    65  	}
    66  }
    67  
    68  func testAccCheckAWSAutoscalingPolicyDestroy(s *terraform.State) error {
    69  	conn := testAccProvider.Meta().(*AWSClient).autoscalingconn
    70  
    71  	for _, rs := range s.RootModule().Resources {
    72  		if rs.Type != "aws_autoscaling_group" {
    73  			continue
    74  		}
    75  
    76  		params := autoscaling.DescribePoliciesInput{
    77  			AutoScalingGroupName: aws.String(rs.Primary.Attributes["autoscaling_group_name"]),
    78  			PolicyNames:          []*string{aws.String(rs.Primary.ID)},
    79  		}
    80  
    81  		resp, err := conn.DescribePolicies(&params)
    82  
    83  		if err == nil {
    84  			if len(resp.ScalingPolicies) != 0 &&
    85  				*resp.ScalingPolicies[0].PolicyName == rs.Primary.ID {
    86  				return fmt.Errorf("Scaling Policy Still Exists: %s", rs.Primary.ID)
    87  			}
    88  		}
    89  	}
    90  
    91  	return nil
    92  }
    93  
    94  var testAccAWSAutoscalingPolicyConfig = fmt.Sprintf(`
    95  resource "aws_launch_configuration" "foobar" {
    96  	name = "terraform-test-foobar5"
    97  	image_id = "ami-21f78e11"
    98  	instance_type = "t1.micro"
    99  }
   100  
   101  resource "aws_autoscaling_group" "foobar" {
   102  	availability_zones = ["us-west-2a"]
   103  	name = "terraform-test-foobar5"
   104  	max_size = 5
   105  	min_size = 2
   106  	health_check_grace_period = 300
   107  	health_check_type = "ELB"
   108  	force_delete = true
   109  	termination_policies = ["OldestInstance"]
   110  	launch_configuration = "${aws_launch_configuration.foobar.name}"
   111  	tag {
   112  		key = "Foo"
   113  		value = "foo-bar"
   114  		propagate_at_launch = true
   115  	}
   116  }
   117  
   118  resource "aws_autoscaling_policy" "foobar_simple" {
   119  	name = "foobar_simple"
   120  	adjustment_type = "ChangeInCapacity"
   121  	cooldown = 300
   122  	policy_type = "SimpleScaling"
   123  	scaling_adjustment = 2
   124  	autoscaling_group_name = "${aws_autoscaling_group.foobar.name}"
   125  }
   126  
   127  resource "aws_autoscaling_policy" "foobar_step" {
   128  	name = "foobar_step"
   129  	adjustment_type = "ChangeInCapacity"
   130  	policy_type = "StepScaling"
   131  	estimated_instance_warmup = 200
   132  	metric_aggregation_type = "Minimum"
   133  	step_adjustment {
   134  		scaling_adjustment = 1
   135  		metric_interval_lower_bound = 2.0
   136  	}
   137  	autoscaling_group_name = "${aws_autoscaling_group.foobar.name}"
   138  }
   139  `)