diff --git a/builtin/providers/aws/resource_aws_autoscaling_policy_test.go b/builtin/providers/aws/resource_aws_autoscaling_policy_test.go index 6d402de85..1fd8567d4 100644 --- a/builtin/providers/aws/resource_aws_autoscaling_policy_test.go +++ b/builtin/providers/aws/resource_aws_autoscaling_policy_test.go @@ -21,9 +21,20 @@ func TestAccAWSAutoscalingPolicy_basic(t *testing.T) { resource.TestStep{ Config: testAccAWSAutoscalingPolicyConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckScalingPolicyExists("aws_autoscaling_policy.foobar", &policy), - resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar", "adjustment_type", "ChangeInCapacity"), - resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar", "cooldown", "300"), + testAccCheckScalingPolicyExists("aws_autoscaling_policy.foobar_simple", &policy), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "adjustment_type", "ChangeInCapacity"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "policy_type", "SimpleScaling"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "cooldown", "300"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "name", "foobar_simple"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "scaling_adjustment", "2"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_simple", "autoscaling_group_name", "terraform-test-foobar5"), + testAccCheckScalingPolicyExists("aws_autoscaling_policy.foobar_step", &policy), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "adjustment_type", "ChangeInCapacity"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "policy_type", "StepScaling"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "name", "foobar_step"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "metric_aggregation_type", "Minimum"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "estimated_instance_warmup", "200"), + resource.TestCheckResourceAttr("aws_autoscaling_policy.foobar_step", "autoscaling_group_name", "terraform-test-foobar5"), ), }, }, @@ -82,33 +93,47 @@ func testAccCheckAWSAutoscalingPolicyDestroy(s *terraform.State) error { var testAccAWSAutoscalingPolicyConfig = fmt.Sprintf(` resource "aws_launch_configuration" "foobar" { - name = "terraform-test-foobar5" - image_id = "ami-21f78e11" - instance_type = "t1.micro" + name = "terraform-test-foobar5" + image_id = "ami-21f78e11" + instance_type = "t1.micro" } resource "aws_autoscaling_group" "foobar" { - availability_zones = ["us-west-2a"] - name = "terraform-test-foobar5" - max_size = 5 - min_size = 2 - health_check_grace_period = 300 - health_check_type = "ELB" - force_delete = true - termination_policies = ["OldestInstance"] - launch_configuration = "${aws_launch_configuration.foobar.name}" - tag { - key = "Foo" - value = "foo-bar" - propagate_at_launch = true - } + availability_zones = ["us-west-2a"] + name = "terraform-test-foobar5" + max_size = 5 + min_size = 2 + health_check_grace_period = 300 + health_check_type = "ELB" + force_delete = true + termination_policies = ["OldestInstance"] + launch_configuration = "${aws_launch_configuration.foobar.name}" + tag { + key = "Foo" + value = "foo-bar" + propagate_at_launch = true + } } -resource "aws_autoscaling_policy" "foobar" { - name = "foobar" - scaling_adjustment = 4 - adjustment_type = "ChangeInCapacity" - cooldown = 300 - autoscaling_group_name = "${aws_autoscaling_group.foobar.name}" +resource "aws_autoscaling_policy" "foobar_simple" { + name = "foobar_simple" + adjustment_type = "ChangeInCapacity" + cooldown = 300 + policy_type = "SimpleScaling" + scaling_adjustment = 2 + autoscaling_group_name = "${aws_autoscaling_group.foobar.name}" +} + +resource "aws_autoscaling_policy" "foobar_step" { + name = "foobar_step" + adjustment_type = "ChangeInCapacity" + policy_type = "StepScaling" + estimated_instance_warmup = 200 + metric_aggregation_type = "Minimum" + step_adjustment { + scaling_adjustment = 1 + metric_interval_lower_bound = 2.0 + } + autoscaling_group_name = "${aws_autoscaling_group.foobar.name}" } `) diff --git a/builtin/providers/aws/structure_test.go b/builtin/providers/aws/structure_test.go index 74e7ca206..aa656710d 100644 --- a/builtin/providers/aws/structure_test.go +++ b/builtin/providers/aws/structure_test.go @@ -526,6 +526,33 @@ func TestexpandElasticacheParameters(t *testing.T) { } } +func TestExpandStepAdjustments(t *testing.T) { + expanded := []interface{}{ + map[string]interface{}{ + "metric_interval_lower_bound": "1.0", + "metric_interval_upper_bound": "2.0", + "scaling_adjustment": 1, + }, + } + parameters, err := expandStepAdjustments(expanded) + if err != nil { + t.Fatalf("bad: %#v", err) + } + + expected := &autoscaling.StepAdjustment{ + MetricIntervalLowerBound: aws.Float64(1.0), + MetricIntervalUpperBound: aws.Float64(2.0), + ScalingAdjustment: aws.Int64(int64(1)), + } + + if !reflect.DeepEqual(parameters[0], expected) { + t.Fatalf( + "Got:\n\n%#v\n\nExpected:\n\n%#v\n", + parameters[0], + expected) + } +} + func TestFlattenParameters(t *testing.T) { cases := []struct { Input []*rds.Parameter @@ -728,6 +755,30 @@ func TestFlattenAttachment(t *testing.T) { } } +func TestflattenStepAdjustments(t *testing.T) { + expanded := []*autoscaling.StepAdjustment{ + &autoscaling.StepAdjustment{ + MetricIntervalLowerBound: aws.Float64(1.0), + MetricIntervalUpperBound: aws.Float64(2.0), + ScalingAdjustment: aws.Int64(int64(1)), + }, + } + + result := flattenStepAdjustments(expanded)[0] + if result == nil { + t.Fatal("expected result to have value, but got nil") + } + if result["metric_interval_lower_bound"] != float64(1.0) { + t.Fatalf("expected metric_interval_lower_bound to be 1.0, but got %d", result["metric_interval_lower_bound"]) + } + if result["metric_interval_upper_bound"] != float64(2.0) { + t.Fatalf("expected metric_interval_upper_bound to be 1.0, but got %d", result["metric_interval_upper_bound"]) + } + if result["scaling_adjustment"] != int64(1) { + t.Fatalf("expected scaling_adjustment to be 1, but got %d", result["scaling_adjustment"]) + } +} + func TestFlattenResourceRecords(t *testing.T) { expanded := []*route53.ResourceRecord{ &route53.ResourceRecord{