166 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto3
 | |
| import sure  # noqa # pylint: disable=unused-import
 | |
| import pytest
 | |
| 
 | |
| from moto import mock_autoscaling
 | |
| 
 | |
| from .utils import setup_networking
 | |
| from tests import EXAMPLE_AMI_ID
 | |
| 
 | |
| 
 | |
| def setup_autoscale_group_boto3():
 | |
|     mocked_networking = setup_networking()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.create_launch_configuration(
 | |
|         LaunchConfigurationName="tester",
 | |
|         ImageId=EXAMPLE_AMI_ID,
 | |
|         InstanceType="m1.small",
 | |
|     )
 | |
| 
 | |
|     client.create_auto_scaling_group(
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         LaunchConfigurationName="tester",
 | |
|         MinSize=2,
 | |
|         MaxSize=2,
 | |
|         VPCZoneIdentifier=mocked_networking["subnet1"],
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_autoscaling
 | |
| def test_create_policy_boto3():
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ExactCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=3,
 | |
|         Cooldown=60,
 | |
|     )
 | |
| 
 | |
|     policy = client.describe_policies()["ScalingPolicies"][0]
 | |
|     policy["PolicyName"].should.equal("ScaleUp")
 | |
|     policy["AdjustmentType"].should.equal("ExactCapacity")
 | |
|     policy["AutoScalingGroupName"].should.equal("tester_group")
 | |
|     policy["ScalingAdjustment"].should.equal(3)
 | |
|     policy["Cooldown"].should.equal(60)
 | |
| 
 | |
| 
 | |
| @mock_autoscaling
 | |
| def test_create_policy_default_values_boto3():
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ExactCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=3,
 | |
|     )
 | |
| 
 | |
|     policy = client.describe_policies()["ScalingPolicies"][0]
 | |
|     policy["PolicyName"].should.equal("ScaleUp")
 | |
| 
 | |
|     # Defaults
 | |
|     policy["Cooldown"].should.equal(300)
 | |
| 
 | |
| 
 | |
| @mock_autoscaling
 | |
| def test_update_policy_boto3():
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ExactCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=3,
 | |
|     )
 | |
| 
 | |
|     client.describe_policies()["ScalingPolicies"].should.have.length_of(1)
 | |
|     policy = client.describe_policies()["ScalingPolicies"][0]
 | |
|     policy["ScalingAdjustment"].should.equal(3)
 | |
| 
 | |
|     # Now update it by creating another with the same name
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ExactCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=2,
 | |
|     )
 | |
|     client.describe_policies()["ScalingPolicies"].should.have.length_of(1)
 | |
|     policy = client.describe_policies()["ScalingPolicies"][0]
 | |
|     policy["ScalingAdjustment"].should.equal(2)
 | |
| 
 | |
| 
 | |
| @mock_autoscaling
 | |
| def test_delete_policy_boto3():
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ExactCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=3,
 | |
|     )
 | |
| 
 | |
|     client.describe_policies()["ScalingPolicies"].should.have.length_of(1)
 | |
| 
 | |
|     client.delete_policy(PolicyName="ScaleUp")
 | |
|     client.describe_policies()["ScalingPolicies"].should.have.length_of(0)
 | |
| 
 | |
| 
 | |
| @mock_autoscaling
 | |
| def test_execute_policy_exact_capacity_boto3():
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ExactCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=3,
 | |
|     )
 | |
| 
 | |
|     client.execute_policy(PolicyName="ScaleUp")
 | |
| 
 | |
|     instances = client.describe_auto_scaling_instances()
 | |
|     instances["AutoScalingInstances"].should.have.length_of(3)
 | |
| 
 | |
| 
 | |
| @mock_autoscaling
 | |
| def test_execute_policy_positive_change_in_capacity_boto3():
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="ChangeInCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=3,
 | |
|     )
 | |
| 
 | |
|     client.execute_policy(PolicyName="ScaleUp")
 | |
| 
 | |
|     instances = client.describe_auto_scaling_instances()
 | |
|     instances["AutoScalingInstances"].should.have.length_of(5)
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "adjustment,nr_of_instances", [(1, 3), (50, 3), (100, 4), (250, 7)]
 | |
| )
 | |
| @mock_autoscaling
 | |
| def test_execute_policy_percent_change_in_capacity_boto3(adjustment, nr_of_instances):
 | |
|     """http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-scale-based-on-demand.html
 | |
|     If PercentChangeInCapacity returns a value between 0 and 1,
 | |
|     Auto Scaling will round it off to 1."""
 | |
|     setup_autoscale_group_boto3()
 | |
|     client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|     client.put_scaling_policy(
 | |
|         PolicyName="ScaleUp",
 | |
|         AdjustmentType="PercentChangeInCapacity",
 | |
|         AutoScalingGroupName="tester_group",
 | |
|         ScalingAdjustment=adjustment,
 | |
|     )
 | |
| 
 | |
|     client.execute_policy(PolicyName="ScaleUp")
 | |
| 
 | |
|     instances = client.describe_auto_scaling_instances()
 | |
|     instances["AutoScalingInstances"].should.have.length_of(nr_of_instances)
 |