Rewrite deprecated Autoscaling tests (#3907)

This commit is contained in:
Bert Blommers 2021-09-22 18:05:28 +00:00 committed by GitHub
parent 097a260dce
commit f17b4a3904
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 590 additions and 4 deletions

View File

@ -22,7 +22,7 @@
## apigateway
<details>
<summary>43% implemented</summary>
<summary>44% implemented</summary>
- [X] create_api_key
- [X] create_authorizer
@ -50,7 +50,7 @@
- [ ] delete_gateway_response
- [X] delete_integration
- [X] delete_integration_response
- [ ] delete_method
- [X] delete_method
- [X] delete_method_response
- [ ] delete_model
- [ ] delete_request_validator

View File

@ -29,6 +29,7 @@ from .utils import (
from tests import EXAMPLE_AMI_ID
# Has boto3 equivalent
@mock_autoscaling_deprecated
@mock_elb_deprecated
@mock_ec2_deprecated
@ -118,6 +119,111 @@ def test_create_autoscaling_group():
len(instances_attached).should.equal(INSTANCE_COUNT_START + INSTANCE_COUNT_GROUP)
@mock_autoscaling
@mock_ec2
@mock_elb
def test_create_autoscaling_group_boto3_within_elb():
mocked_networking = setup_networking()
elb_client = boto3.client("elb", region_name="us-east-1")
elb_client.create_load_balancer(
LoadBalancerName="test_lb",
Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
AvailabilityZones=[],
)
# we attach a couple of machines to the load balancer
# that are not managed by the auto scaling group
INSTANCE_COUNT_START = 3
INSTANCE_COUNT_GROUP = 2
ec2 = boto3.resource("ec2", region_name="us-east-1")
instances = ec2.create_instances(
ImageId=EXAMPLE_AMI_ID,
InstanceType="t1.micro",
MaxCount=INSTANCE_COUNT_START,
MinCount=INSTANCE_COUNT_START,
SubnetId=mocked_networking["subnet1"],
)
instances_ids = [_.id for _ in instances]
elb_client.register_instances_with_load_balancer(
LoadBalancerName="test_lb",
Instances=[{"InstanceId": id} for id in instances_ids],
)
as_client = boto3.client("autoscaling", region_name="us-east-1")
as_client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t2.medium",
)
as_client.create_auto_scaling_group(
AutoScalingGroupName="tester_group",
AvailabilityZones=["us-east-1a", "us-east-1b"],
DefaultCooldown=60,
DesiredCapacity=INSTANCE_COUNT_GROUP,
HealthCheckGracePeriod=100,
HealthCheckType="EC2",
LaunchConfigurationName="tester",
LoadBalancerNames=["test_lb"],
MinSize=INSTANCE_COUNT_GROUP,
MaxSize=INSTANCE_COUNT_GROUP,
PlacementGroup="test_placement",
Tags=[
{
"ResourceId": "tester_group",
"ResourceType": "group",
"Key": "test_key",
"Value": "test_value",
"PropagateAtLaunch": True,
}
],
TerminationPolicies=["OldestInstance", "NewestInstance"],
VPCZoneIdentifier="{subnet1},{subnet2}".format(
subnet1=mocked_networking["subnet1"], subnet2=mocked_networking["subnet2"]
),
)
group = as_client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
group["AutoScalingGroupName"].should.equal("tester_group")
set(group["AvailabilityZones"]).should.equal(set(["us-east-1a", "us-east-1b"]))
group["DesiredCapacity"].should.equal(2)
group["MaxSize"].should.equal(INSTANCE_COUNT_GROUP)
group["MinSize"].should.equal(INSTANCE_COUNT_GROUP)
group["Instances"].should.have.length_of(INSTANCE_COUNT_GROUP)
group["VPCZoneIdentifier"].should.equal(
"{subnet1},{subnet2}".format(
subnet1=mocked_networking["subnet1"], subnet2=mocked_networking["subnet2"]
)
)
group["LaunchConfigurationName"].should.equal("tester")
group["DefaultCooldown"].should.equal(60)
group["HealthCheckGracePeriod"].should.equal(100)
group["HealthCheckType"].should.equal("EC2")
group["LoadBalancerNames"].should.equal(["test_lb"])
group["PlacementGroup"].should.equal("test_placement")
list(group["TerminationPolicies"]).should.equal(
["OldestInstance", "NewestInstance"]
)
list(group["Tags"]).should.have.length_of(1)
tag = group["Tags"][0]
tag["ResourceId"].should.equal("tester_group")
tag["Key"].should.equal("test_key")
tag["Value"].should.equal("test_value")
tag["PropagateAtLaunch"].should.equal(True)
instances_attached = elb_client.describe_instance_health(
LoadBalancerName="test_lb"
)["InstanceStates"]
instances_attached.should.have.length_of(
INSTANCE_COUNT_START + INSTANCE_COUNT_GROUP
)
attached_ids = [i["InstanceId"] for i in instances_attached]
for ec2_instance_id in instances_ids:
attached_ids.should.contain(ec2_instance_id)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_create_autoscaling_groups_defaults():
"""Test with the minimum inputs and check that all of the proper defaults
@ -158,6 +264,46 @@ def test_create_autoscaling_groups_defaults():
list(group.tags).should.equal([])
@mock_autoscaling
def test_create_autoscaling_groups_defaults_boto3():
"""Test with the minimum inputs and check that all of the proper defaults
are assigned for the other attributes"""
mocked_networking = setup_networking()
as_client = boto3.client("autoscaling", region_name="us-east-1")
as_client.create_launch_configuration(
LaunchConfigurationName="tester_config",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t2.medium",
)
as_client.create_auto_scaling_group(
AutoScalingGroupName="tester_group",
LaunchConfigurationName="tester_config",
MinSize=2,
MaxSize=2,
VPCZoneIdentifier=mocked_networking["subnet1"],
)
group = as_client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
group["AutoScalingGroupName"].should.equal("tester_group")
group["MaxSize"].should.equal(2)
group["MinSize"].should.equal(2)
group["LaunchConfigurationName"].should.equal("tester_config")
# Defaults
group["AvailabilityZones"].should.equal(["us-east-1a"]) # subnet1
group["DesiredCapacity"].should.equal(2)
group["VPCZoneIdentifier"].should.equal(mocked_networking["subnet1"])
group["DefaultCooldown"].should.equal(300)
group["HealthCheckGracePeriod"].should.equal(300)
group["HealthCheckType"].should.equal("EC2")
group["LoadBalancerNames"].should.equal([])
group.shouldnt.have.key("PlacementGroup")
group["TerminationPolicies"].should.equal([])
group["Tags"].should.equal([])
@mock_autoscaling
def test_list_many_autoscaling_groups():
mocked_networking = setup_networking()
@ -226,6 +372,7 @@ def test_propogate_tags():
tags.should.contain({"Value": "TestGroup1", "Key": "aws:autoscaling:groupName"})
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_autoscaling_group_describe_filter():
mocked_networking = setup_networking_deprecated()
@ -254,6 +401,7 @@ def test_autoscaling_group_describe_filter():
conn.get_all_groups().should.have.length_of(3)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_autoscaling_update():
mocked_networking = setup_networking_deprecated()
@ -286,6 +434,7 @@ def test_autoscaling_update():
group.vpc_zone_identifier.should.equal(mocked_networking["subnet2"])
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_autoscaling_tags_update():
mocked_networking = setup_networking_deprecated()
@ -334,6 +483,7 @@ def test_autoscaling_tags_update():
group.tags.should.have.length_of(2)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_autoscaling_group_delete():
mocked_networking = setup_networking_deprecated()
@ -358,6 +508,35 @@ def test_autoscaling_group_delete():
conn.get_all_groups().should.have.length_of(0)
@mock_autoscaling
def test_autoscaling_group_delete_boto3():
mocked_networking = setup_networking()
as_client = boto3.client("autoscaling", region_name="us-east-1")
as_client.create_launch_configuration(
LaunchConfigurationName="tester_config",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t2.medium",
)
as_client.create_auto_scaling_group(
AutoScalingGroupName="tester_group",
LaunchConfigurationName="tester_config",
MinSize=2,
MaxSize=2,
VPCZoneIdentifier=mocked_networking["subnet1"],
)
as_client.describe_auto_scaling_groups()["AutoScalingGroups"].should.have.length_of(
1
)
as_client.delete_auto_scaling_group(AutoScalingGroupName="tester_group")
as_client.describe_auto_scaling_groups()["AutoScalingGroups"].should.have.length_of(
0
)
# Has boto3 equivalent
@mock_ec2_deprecated
@mock_autoscaling_deprecated
def test_autoscaling_group_describe_instances():
@ -392,6 +571,7 @@ def test_autoscaling_group_describe_instances():
instances[0].instance_type.should.equal("t2.medium")
# Has boto3 equivalent
@requires_boto_gte("2.8")
@mock_autoscaling_deprecated
def test_set_desired_capacity_up():
@ -426,6 +606,7 @@ def test_set_desired_capacity_up():
instances.should.have.length_of(3)
# Has boto3 equivalent
@requires_boto_gte("2.8")
@mock_autoscaling_deprecated
def test_set_desired_capacity_down():
@ -460,6 +641,7 @@ def test_set_desired_capacity_down():
instances.should.have.length_of(1)
# Has boto3 equivalent
@requires_boto_gte("2.8")
@mock_autoscaling_deprecated
def test_set_desired_capacity_the_same():
@ -494,6 +676,7 @@ def test_set_desired_capacity_the_same():
instances.should.have.length_of(2)
# Has boto3 equivalent
@mock_autoscaling_deprecated
@mock_elb_deprecated
def test_autoscaling_group_with_elb():
@ -2916,3 +3099,41 @@ def test_autoscaling_lifecyclehook():
)
len(response["LifecycleHooks"]).should.equal(0)
@pytest.mark.parametrize(
"original,new", [(2, 1), (2, 3), (1, 5), (1, 1)],
)
@mock_autoscaling
def test_set_desired_capacity_without_protection_boto3(original, new):
mocked_networking = setup_networking()
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="test_launch_configuration",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t2.medium",
)
client.create_auto_scaling_group(
AutoScalingGroupName="tester_group",
LaunchConfigurationName="test_launch_configuration",
AvailabilityZones=["us-east-1a"],
MinSize=original,
MaxSize=original,
DesiredCapacity=original,
VPCZoneIdentifier=mocked_networking["subnet1"],
)
group = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
group["DesiredCapacity"].should.equal(original)
instances = client.describe_auto_scaling_instances()["AutoScalingInstances"]
instances.should.have.length_of(original)
client.update_auto_scaling_group(
AutoScalingGroupName="tester_group", DesiredCapacity=new
)
group = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
group["DesiredCapacity"].should.equal(new)
instances = client.describe_auto_scaling_instances()["AutoScalingInstances"]
instances.should.have.length_of(new)

View File

@ -1,4 +1,7 @@
from __future__ import unicode_literals
import base64
import boto
import boto3
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
@ -15,6 +18,7 @@ from tests.helpers import requires_boto_gte
from tests import EXAMPLE_AMI_ID
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_create_launch_configuration():
conn = boto.connect_autoscale()
@ -47,6 +51,42 @@ def test_create_launch_configuration():
launch_config.spot_price.should.equal(0.1)
@mock_autoscaling
def test_create_launch_configuration_boto3():
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t1.micro",
KeyName="the_keys",
SecurityGroups=["default", "default2"],
UserData="This is some user_data",
InstanceMonitoring={"Enabled": True},
IamInstanceProfile="arn:aws:iam::{}:instance-profile/testing".format(
ACCOUNT_ID
),
SpotPrice="0.1",
)
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
launch_config["LaunchConfigurationName"].should.equal("tester")
launch_config.should.have.key("LaunchConfigurationARN")
launch_config["ImageId"].should.equal(EXAMPLE_AMI_ID)
launch_config["InstanceType"].should.equal("t1.micro")
launch_config["KeyName"].should.equal("the_keys")
set(launch_config["SecurityGroups"]).should.equal(set(["default", "default2"]))
userdata = launch_config["UserData"]
userdata = base64.b64decode(userdata)
userdata.should.equal(b"This is some user_data")
launch_config["InstanceMonitoring"].should.equal({"Enabled": True})
launch_config["IamInstanceProfile"].should.equal(
"arn:aws:iam::{}:instance-profile/testing".format(ACCOUNT_ID)
)
launch_config["SpotPrice"].should.equal("0.1")
launch_config["BlockDeviceMappings"].should.equal([])
# Has boto3 equivalent
@requires_boto_gte("2.27.0")
@mock_autoscaling_deprecated
def test_create_launch_configuration_with_block_device_mappings():
@ -116,6 +156,67 @@ def test_create_launch_configuration_with_block_device_mappings():
returned_mapping["/dev/xvdb"].ephemeral_name.should.equal("ephemeral0")
@mock_autoscaling
def test_create_launch_configuration_with_block_device_mappings_boto3():
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t1.micro",
KeyName="the_keys",
SecurityGroups=["default", "default2"],
UserData="This is some user_data",
InstanceMonitoring={"Enabled": True},
IamInstanceProfile="arn:aws:iam::{}:instance-profile/testing".format(
ACCOUNT_ID
),
SpotPrice="0.1",
BlockDeviceMappings=[
{"DeviceName": "/dev/xvdb", "VirtualName": "ephemeral0"},
{
"DeviceName": "/dev/xvdp",
"Ebs": {"SnapshotId": "snap-1234abcd", "VolumeType": "standard"},
},
{
"DeviceName": "/dev/xvdh",
"Ebs": {
"VolumeType": "io1",
"VolumeSize": 100,
"Iops": 1000,
"DeleteOnTermination": False,
},
},
],
)
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
launch_config["LaunchConfigurationName"].should.equal("tester")
mappings = launch_config["BlockDeviceMappings"]
mappings.should.have.length_of(3)
xvdh = [m for m in mappings if m["DeviceName"] == "/dev/xvdh"][0]
xvdp = [m for m in mappings if m["DeviceName"] == "/dev/xvdp"][0]
xvdb = [m for m in mappings if m["DeviceName"] == "/dev/xvdb"][0]
xvdh.shouldnt.have.key("VirtualName")
xvdh.should.have.key("Ebs")
xvdh["Ebs"]["VolumeSize"].should.equal(100)
xvdh["Ebs"]["VolumeType"].should.equal("io1")
xvdh["Ebs"]["DeleteOnTermination"].should.equal(False)
xvdh["Ebs"]["Iops"].should.equal(1000)
xvdp.shouldnt.have.key("VirtualName")
xvdp.should.have.key("Ebs")
xvdp["Ebs"]["SnapshotId"].should.equal("snap-1234abcd")
xvdp["Ebs"]["VolumeType"].should.equal("standard")
xvdp["Ebs"]["DeleteOnTermination"].should.equal(False)
xvdb["VirtualName"].should.equal("ephemeral0")
xvdb.shouldnt.have.key("Ebs")
# Has boto3 equivalent
@requires_boto_gte("2.12")
@mock_autoscaling_deprecated
def test_create_launch_configuration_for_2_12():
@ -129,6 +230,7 @@ def test_create_launch_configuration_for_2_12():
launch_config.ebs_optimized.should.equal(True)
# Has boto3 equivalent
@requires_boto_gte("2.25.0")
@mock_autoscaling_deprecated
def test_create_launch_configuration_using_ip_association():
@ -142,6 +244,23 @@ def test_create_launch_configuration_using_ip_association():
launch_config.associate_public_ip_address.should.equal(True)
@mock_autoscaling
def test_create_launch_configuration_additional_parameters():
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t1.micro",
EbsOptimized=True,
AssociatePublicIpAddress=True,
)
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
launch_config["EbsOptimized"].should.equal(True)
launch_config["AssociatePublicIpAddress"].should.equal(True)
# Has boto3 equivalent
@requires_boto_gte("2.25.0")
@mock_autoscaling_deprecated
def test_create_launch_configuration_using_ip_association_should_default_to_false():
@ -153,6 +272,21 @@ def test_create_launch_configuration_using_ip_association_should_default_to_fals
launch_config.associate_public_ip_address.should.equal(False)
@mock_autoscaling
def test_create_launch_configuration_additional_params_default_to_false():
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="t1.micro",
)
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
launch_config["EbsOptimized"].should.equal(False)
launch_config["AssociatePublicIpAddress"].should.equal(False)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_create_launch_configuration_defaults():
"""Test with the minimum inputs and check that all of the proper defaults
@ -177,6 +311,29 @@ def test_create_launch_configuration_defaults():
launch_config.spot_price.should.equal(None)
@mock_autoscaling
def test_create_launch_configuration_defaults_boto3():
"""Test with the minimum inputs and check that all of the proper defaults
are assigned for the other attributes"""
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="m1.small",
)
launch_config = client.describe_launch_configurations()["LaunchConfigurations"][0]
# Defaults
launch_config["KeyName"].should.equal("")
launch_config["SecurityGroups"].should.equal([])
launch_config["UserData"].should.equal("")
launch_config["InstanceMonitoring"].should.equal({"Enabled": False})
launch_config.shouldnt.have.key("IamInstanceProfile")
launch_config.shouldnt.have.key("SpotPrice")
# Has boto3 equivalent
@requires_boto_gte("2.12")
@mock_autoscaling_deprecated
def test_create_launch_configuration_defaults_for_2_12():
@ -188,6 +345,7 @@ def test_create_launch_configuration_defaults_for_2_12():
launch_config.ebs_optimized.should.equal(False)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_launch_configuration_describe_filter():
conn = boto.connect_autoscale()
@ -206,6 +364,25 @@ def test_launch_configuration_describe_filter():
conn.get_all_launch_configurations().should.have.length_of(3)
@mock_autoscaling
def test_launch_configuration_describe_filter_boto3():
client = boto3.client("autoscaling", region_name="us-east-1")
for name in ["tester", "tester2", "tester3"]:
client.create_launch_configuration(
LaunchConfigurationName=name,
ImageId=EXAMPLE_AMI_ID,
InstanceType="m1.small",
)
configs = client.describe_launch_configurations(
LaunchConfigurationNames=["tester", "tester2"]
)
configs["LaunchConfigurations"].should.have.length_of(2)
client.describe_launch_configurations()[
"LaunchConfigurations"
].should.have.length_of(3)
@mock_autoscaling
def test_launch_configuration_describe_paginated():
conn = boto3.client("autoscaling", region_name="us-east-1")
@ -229,6 +406,7 @@ def test_launch_configuration_describe_paginated():
assert "NextToken" not in response2.keys()
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_launch_configuration_delete():
conn = boto.connect_autoscale()
@ -243,6 +421,26 @@ def test_launch_configuration_delete():
conn.get_all_launch_configurations().should.have.length_of(0)
@mock_autoscaling
def test_launch_configuration_delete_boto3():
client = boto3.client("autoscaling", region_name="us-east-1")
client.create_launch_configuration(
LaunchConfigurationName="tester",
ImageId=EXAMPLE_AMI_ID,
InstanceType="m1.small",
)
client.describe_launch_configurations()[
"LaunchConfigurations"
].should.have.length_of(1)
client.delete_launch_configuration(LaunchConfigurationName="tester")
client.describe_launch_configurations()[
"LaunchConfigurations"
].should.have.length_of(0)
@pytest.mark.parametrize(
"request_params",
[

View File

@ -1,13 +1,15 @@
from __future__ import unicode_literals
import boto
import boto3
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
from boto.ec2.autoscale.group import AutoScalingGroup
from boto.ec2.autoscale.policy import ScalingPolicy
import pytest
import sure # noqa
from moto import mock_autoscaling_deprecated
from moto import mock_autoscaling_deprecated, mock_autoscaling
from .utils import setup_networking_deprecated
from .utils import setup_networking_deprecated, setup_networking
from tests import EXAMPLE_AMI_ID
@ -30,6 +32,25 @@ def setup_autoscale_group():
return group
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"],
)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_create_policy():
setup_autoscale_group()
@ -51,6 +72,27 @@ def test_create_policy():
policy.cooldown.should.equal(60)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_create_policy_default_values():
setup_autoscale_group()
@ -70,6 +112,25 @@ def test_create_policy_default_values():
policy.cooldown.should.equal(300)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_update_policy():
setup_autoscale_group()
@ -97,6 +158,34 @@ def test_update_policy():
policy.scaling_adjustment.should.equal(2)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_delete_policy():
setup_autoscale_group()
@ -115,6 +204,24 @@ def test_delete_policy():
conn.get_all_policies().should.have.length_of(0)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_execute_policy_exact_capacity():
setup_autoscale_group()
@ -133,6 +240,24 @@ def test_execute_policy_exact_capacity():
instances.should.have.length_of(3)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_execute_policy_positive_change_in_capacity():
setup_autoscale_group()
@ -151,6 +276,24 @@ def test_execute_policy_positive_change_in_capacity():
instances.should.have.length_of(5)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_execute_policy_percent_change_in_capacity():
setup_autoscale_group()
@ -169,6 +312,30 @@ def test_execute_policy_percent_change_in_capacity():
instances.should.have.length_of(3)
@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)
# Has boto3 equivalent
@mock_autoscaling_deprecated
def test_execute_policy_small_percent_change_in_capacity():
"""http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-scale-based-on-demand.html