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'])
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)
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)
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)
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)
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)
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)