コード例 #1
0
def test_terminate_instances_valid_az(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    asg_names = ['AutoScalingGroup-A']
    client.describe_auto_scaling_groups.return_value = {
        "AutoScalingGroups": [{
            "AutoScalingGroupName":
            "AutoScalingGroup-A",
            "Instances": [
                {
                    "InstanceId": "i-00000000000000001",
                    "AvailabilityZone": "us-east-1a",
                    "LifecycleState": "InService"
                },
                {
                    "InstanceId": "i-00000000000000002",
                    "AvailabilityZone": "us-east-1b",
                    "LifecycleState": "InService"
                },
                {
                    "InstanceId": "i-00000000000000003",
                    "AvailabilityZone": "us-east-1c",
                    "LifecycleState": "InService"
                },
            ]
        }]
    }
    terminate_random_instances(asg_names=asg_names, az='us-east-1a')
    client.terminate_instances.assert_called_with(
        InstanceIds=['i-00000000000000001'])
コード例 #2
0
def test_terminate_instances_invalid_az(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    asg_names = ['AutoScalingGroup-A']
    client.describe_auto_scaling_groups.return_value = {
        "AutoScalingGroups": [{
            "AutoScalingGroupName":
            "AutoScalingGroup-A",
            "Instances": [
                {
                    "InstanceId": "i-00000000000000001",
                    "AvailabilityZone": "us-east-1a",
                    "LifecycleState": "InService"
                },
                {
                    "InstanceId": "i-00000000000000002",
                    "AvailabilityZone": "us-east-1b",
                    "LifecycleState": "InService"
                },
                {
                    "InstanceId": "i-00000000000000003",
                    "AvailabilityZone": "us-east-1c",
                    "LifecycleState": "InService"
                },
            ]
        }]
    }
    with pytest.raises(FailedActivity) as x:
        terminate_random_instances(asg_names=asg_names, az='us-east-1d')
    assert 'No instances found in Availability Zone: us-east-1d' in str(x)
コード例 #3
0
def test_terminate_instances_tags(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    tags = [{"Key": "TargetKey", "Value": "TargetValue"}]
    client.get_paginator.return_value.paginate.return_value = [{
        "Tags": [{
            "ResourceId": "AutoScalingGroup-A",
            "ResourceType": "auto-scaling-group",
            "Key": "TargetKey",
            "Value": "TargetValue",
            "PropagateAtLaunch": False,
        }]
    }]
    client.describe_auto_scaling_groups.return_value = {
        "AutoScalingGroups": [{
            "AutoScalingGroupName":
            "AutoScalingGroup-A",
            "Instances": [
                {
                    "InstanceId": "i-00000000000000001",
                    "AvailabilityZone": "us-east-1a",
                    "LifecycleState": "InService",
                },
                {
                    "InstanceId": "i-00000000000000002",
                    "AvailabilityZone": "us-east-1b",
                    "LifecycleState": "InService",
                },
                {
                    "InstanceId": "i-00000000000000003",
                    "AvailabilityZone": "us-east-1c",
                    "LifecycleState": "InService",
                },
            ],
        }]
    }
    terminate_random_instances(tags=tags, instance_count=2)

    instance_calls = [
        ["i-00000000000000001", "i-00000000000000002"],
        ["i-00000000000000001", "i-00000000000000003"],
        ["i-00000000000000002", "i-00000000000000003"],
    ]

    ex = None
    for i in instance_calls:
        try:
            client.terminate_instances.assert_called_with(
                InstanceIds=sorted(i))
            return True
        except AssertionError as e:
            ex = e.args
    raise AssertionError(ex)
コード例 #4
0
def test_terminate_instances_count_pass(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    asg_names = ["AutoScalingGroup-A"]
    client.describe_auto_scaling_groups.return_value = {
        "AutoScalingGroups": [{
            "AutoScalingGroupName":
            "AutoScalingGroup-A",
            "Instances": [
                {
                    "InstanceId": "i-00000000000000001",
                    "AvailabilityZone": "us-east-1a",
                    "LifecycleState": "InService",
                },
                {
                    "InstanceId": "i-00000000000000002",
                    "AvailabilityZone": "us-east-1b",
                    "LifecycleState": "InService",
                },
                {
                    "InstanceId": "i-00000000000000003",
                    "AvailabilityZone": "us-east-1c",
                    "LifecycleState": "InService",
                },
            ],
        }]
    }
    terminate_random_instances(asg_names=asg_names, instance_count=2)

    instance_calls = [
        ["i-00000000000000001", "i-00000000000000002"],
        ["i-00000000000000001", "i-00000000000000003"],
        ["i-00000000000000002", "i-00000000000000003"],
    ]

    ex = None
    for i in instance_calls:
        try:
            client.terminate_instances.assert_called_with(
                InstanceIds=sorted(i))
            return True
        except AssertionError as e:
            ex = e.args
    raise AssertionError(ex)
コード例 #5
0
def test_terminate_instances_invalid_count(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    asg_names = ['AutoScalingGroup-A']
    client.describe_auto_scaling_groups.return_value = {
        "AutoScalingGroups": [{
            "AutoScalingGroupName":
            "AutoScalingGroup-A",
            "Instances": [{
                "InstanceId": "i-00000000000000001",
                "AvailabilityZone": "us-east-1a",
                "LifecycleState": "InService"
            }]
        }]
    }
    with pytest.raises(FailedActivity) as x:
        terminate_random_instances(asg_names=asg_names, instance_count=2)
    assert 'Not enough healthy instances in {} to satisfy ' \
           'termination count {} ({})'.format(asg_names[0], 2, 1) in str(x)
コード例 #6
0
def test_terminate_instances_no_numbers():
    asg_names = ["AutoScalingGroup-A", "AutoScalingGroup-B"]
    with pytest.raises(FailedActivity) as x:
        terminate_random_instances(asg_names)
    assert 'Must specify one of "instance_count", ' '"instance_percent", "az"' in str(
        x.value)
コード例 #7
0
def test_terminate_instances_no_asgs():
    with pytest.raises(FailedActivity) as x:
        terminate_random_instances(instance_count=10)
    assert "one of the following arguments are required: " "asg_names or tags" in str(
        x.value)