1package awsat 2 3import ( 4 "testing" 5 6 "github.com/aws/aws-sdk-go/service/autoscaling" 7) 8 9func TestScalingGroup(t *testing.T) { 10 t.Run("create", func(t *testing.T) { 11 Template("create scalinggroup name=new-autoscaling launchconfiguration=config max-size=12 min-size=10 subnets=sub_1,sub_2 cooldown=3 desired-capacity=12 healthcheck-grace-period=4 healthcheck-type=healthy new-instances-protected=true targetgroups=tg_1,tg_2").Mock(&autoscalingMock{ 12 CreateAutoScalingGroupFunc: func(input *autoscaling.CreateAutoScalingGroupInput) (*autoscaling.CreateAutoScalingGroupOutput, error) { 13 return &autoscaling.CreateAutoScalingGroupOutput{}, nil 14 }}). 15 ExpectInput("CreateAutoScalingGroup", &autoscaling.CreateAutoScalingGroupInput{ 16 AutoScalingGroupName: String("new-autoscaling"), 17 LaunchConfigurationName: String("config"), 18 MaxSize: Int64(12), 19 MinSize: Int64(10), 20 DefaultCooldown: Int64(3), 21 DesiredCapacity: Int64(12), 22 HealthCheckGracePeriod: Int64(4), 23 HealthCheckType: String("healthy"), 24 NewInstancesProtectedFromScaleIn: Bool(true), 25 VPCZoneIdentifier: String("sub_1,sub_2"), 26 TargetGroupARNs: []*string{String("tg_1"), String("tg_2")}, 27 }).ExpectCommandResult("new-autoscaling").ExpectCalls("CreateAutoScalingGroup").Run(t) 28 }) 29 30 t.Run("update", func(t *testing.T) { 31 Template("update scalinggroup name=new-autoscaling launchconfiguration=config max-size=12 min-size=10 subnets=sub_1,sub_2 cooldown=3 desired-capacity=12 healthcheck-grace-period=4 healthcheck-type=healthy new-instances-protected=true").Mock(&autoscalingMock{ 32 UpdateAutoScalingGroupFunc: func(input *autoscaling.UpdateAutoScalingGroupInput) (*autoscaling.UpdateAutoScalingGroupOutput, error) { 33 return nil, nil 34 }}). 35 ExpectInput("UpdateAutoScalingGroup", &autoscaling.UpdateAutoScalingGroupInput{ 36 AutoScalingGroupName: String("new-autoscaling"), 37 LaunchConfigurationName: String("config"), 38 MaxSize: Int64(12), 39 MinSize: Int64(10), 40 DefaultCooldown: Int64(3), 41 DesiredCapacity: Int64(12), 42 HealthCheckGracePeriod: Int64(4), 43 HealthCheckType: String("healthy"), 44 NewInstancesProtectedFromScaleIn: Bool(true), 45 VPCZoneIdentifier: String("sub_1,sub_2"), 46 }).ExpectCalls("UpdateAutoScalingGroup").Run(t) 47 }) 48 49 t.Run("delete", func(t *testing.T) { 50 Template("delete scalinggroup name=any-sg force=true").Mock(&autoscalingMock{ 51 DeleteAutoScalingGroupFunc: func(input *autoscaling.DeleteAutoScalingGroupInput) (*autoscaling.DeleteAutoScalingGroupOutput, error) { 52 return nil, nil 53 }}). 54 ExpectInput("DeleteAutoScalingGroup", &autoscaling.DeleteAutoScalingGroupInput{ 55 AutoScalingGroupName: String("any-sg"), 56 ForceDelete: Bool(true), 57 }).ExpectCalls("DeleteAutoScalingGroup").Run(t) 58 }) 59 60 t.Run("check", func(t *testing.T) { 61 Template("check scalinggroup name=any-sg count=1 timeout=0").Mock(&autoscalingMock{ 62 DescribeAutoScalingGroupsFunc: func(input *autoscaling.DescribeAutoScalingGroupsInput) (*autoscaling.DescribeAutoScalingGroupsOutput, error) { 63 return &autoscaling.DescribeAutoScalingGroupsOutput{ 64 AutoScalingGroups: []*autoscaling.Group{ 65 {AutoScalingGroupName: String("any-sg"), Instances: []*autoscaling.Instance{{InstanceId: String("one")}}}, 66 }}, nil 67 }}). 68 ExpectInput("DescribeAutoScalingGroups", &autoscaling.DescribeAutoScalingGroupsInput{ 69 AutoScalingGroupNames: []*string{String("any-sg")}, 70 }).ExpectCalls("DescribeAutoScalingGroups").Run(t) 71 }) 72} 73