Index: third_party/gsutil/third_party/boto/tests/unit/ec2/autoscale/test_group.py |
diff --git a/third_party/gsutil/third_party/boto/tests/unit/ec2/autoscale/test_group.py b/third_party/gsutil/third_party/boto/tests/unit/ec2/autoscale/test_group.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..a5df45899a2bd3710ed54c506477140fb79ec6d2 |
--- /dev/null |
+++ b/third_party/gsutil/third_party/boto/tests/unit/ec2/autoscale/test_group.py |
@@ -0,0 +1,881 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining a |
+# copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, dis- |
+# tribute, sublicense, and/or sell copies of the Software, and to permit |
+# persons to whom the Software is furnished to do so, subject to the fol- |
+# lowing conditions: |
+# |
+# The above copyright notice and this permission notice shall be included |
+# in all copies or substantial portions of the Software. |
+# |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
+# IN THE SOFTWARE. |
+# |
+ |
+import base64 |
+from datetime import datetime |
+ |
+from tests.unit import unittest |
+from tests.unit import AWSMockServiceTestCase |
+ |
+from boto.ec2.autoscale import AutoScaleConnection |
+from boto.ec2.autoscale.group import AutoScalingGroup |
+from boto.ec2.autoscale.policy import ScalingPolicy |
+from boto.ec2.autoscale.tag import Tag |
+ |
+from boto.ec2.blockdevicemapping import EBSBlockDeviceType, BlockDeviceMapping |
+ |
+from boto.ec2.autoscale import launchconfig, LaunchConfiguration |
+ |
+ |
+class TestAutoScaleGroup(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestAutoScaleGroup, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <CreateLaunchConfigurationResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </CreateLaunchConfigurationResponse> |
+ """ |
+ |
+ def test_autoscaling_group_with_termination_policies(self): |
+ self.set_http_response(status_code=200) |
+ autoscale = AutoScalingGroup( |
+ name='foo', launch_config='lauch_config', |
+ min_size=1, max_size=2, |
+ termination_policies=['OldestInstance', 'OldestLaunchConfiguration'], |
+ instance_id='test-id') |
+ self.service_connection.create_auto_scaling_group(autoscale) |
+ self.assert_request_parameters({ |
+ 'Action': 'CreateAutoScalingGroup', |
+ 'AutoScalingGroupName': 'foo', |
+ 'LaunchConfigurationName': 'lauch_config', |
+ 'MaxSize': 2, |
+ 'MinSize': 1, |
+ 'TerminationPolicies.member.1': 'OldestInstance', |
+ 'TerminationPolicies.member.2': 'OldestLaunchConfiguration', |
+ 'InstanceId': 'test-id', |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_autoscaling_group_single_vpc_zone_identifier(self): |
+ self.set_http_response(status_code=200) |
+ autoscale = AutoScalingGroup( |
+ name='foo', |
+ vpc_zone_identifier='vpc_zone_1') |
+ self.service_connection.create_auto_scaling_group(autoscale) |
+ self.assert_request_parameters({ |
+ 'Action': 'CreateAutoScalingGroup', |
+ 'AutoScalingGroupName': 'foo', |
+ 'VPCZoneIdentifier': 'vpc_zone_1', |
+ }, ignore_params_values=['MaxSize', 'MinSize', 'LaunchConfigurationName', 'Version']) |
+ |
+ def test_autoscaling_group_vpc_zone_identifier_list(self): |
+ self.set_http_response(status_code=200) |
+ autoscale = AutoScalingGroup( |
+ name='foo', |
+ vpc_zone_identifier=['vpc_zone_1', 'vpc_zone_2']) |
+ self.service_connection.create_auto_scaling_group(autoscale) |
+ self.assert_request_parameters({ |
+ 'Action': 'CreateAutoScalingGroup', |
+ 'AutoScalingGroupName': 'foo', |
+ 'VPCZoneIdentifier': 'vpc_zone_1,vpc_zone_2', |
+ }, ignore_params_values=['MaxSize', 'MinSize', 'LaunchConfigurationName', 'Version']) |
+ |
+ def test_autoscaling_group_vpc_zone_identifier_multi(self): |
+ self.set_http_response(status_code=200) |
+ autoscale = AutoScalingGroup( |
+ name='foo', |
+ vpc_zone_identifier='vpc_zone_1,vpc_zone_2') |
+ self.service_connection.create_auto_scaling_group(autoscale) |
+ self.assert_request_parameters({ |
+ 'Action': 'CreateAutoScalingGroup', |
+ 'AutoScalingGroupName': 'foo', |
+ 'VPCZoneIdentifier': 'vpc_zone_1,vpc_zone_2', |
+ }, ignore_params_values=['MaxSize', 'MinSize', 'LaunchConfigurationName', 'Version']) |
+ |
+ |
+class TestAutoScaleGroupHonorCooldown(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ return b""" |
+ <SetDesiredCapacityResponse> |
+ <ResponseMetadata> |
+ <RequestId>9fb7e2db-6998-11e2-a985-57c82EXAMPLE</RequestId> |
+ </ResponseMetadata> |
+ </SetDesiredCapacityResponse> |
+ """ |
+ |
+ def test_honor_cooldown(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.set_desired_capacity('foo', 10, True) |
+ self.assert_request_parameters({ |
+ 'Action': 'SetDesiredCapacity', |
+ 'AutoScalingGroupName': 'foo', |
+ 'DesiredCapacity': 10, |
+ 'HonorCooldown': 'true', |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestScheduledGroup(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestScheduledGroup, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <PutScheduledUpdateGroupActionResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </PutScheduledUpdateGroupActionResponse> |
+ """ |
+ |
+ def test_scheduled_group_creation(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.create_scheduled_group_action('foo', |
+ 'scheduled-foo', |
+ desired_capacity=1, |
+ start_time=datetime(2013, 1, 1, 22, 55, 31), |
+ end_time=datetime(2013, 2, 1, 22, 55, 31), |
+ min_size=1, |
+ max_size=2, |
+ recurrence='0 10 * * *') |
+ self.assert_request_parameters({ |
+ 'Action': 'PutScheduledUpdateGroupAction', |
+ 'AutoScalingGroupName': 'foo', |
+ 'ScheduledActionName': 'scheduled-foo', |
+ 'MaxSize': 2, |
+ 'MinSize': 1, |
+ 'DesiredCapacity': 1, |
+ 'EndTime': '2013-02-01T22:55:31', |
+ 'StartTime': '2013-01-01T22:55:31', |
+ 'Recurrence': '0 10 * * *', |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestParseAutoScaleGroupResponse(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ return b""" |
+ <DescribeAutoScalingGroupsResult> |
+ <AutoScalingGroups> |
+ <member> |
+ <Tags/> |
+ <SuspendedProcesses/> |
+ <AutoScalingGroupName>test_group</AutoScalingGroupName> |
+ <HealthCheckType>EC2</HealthCheckType> |
+ <CreatedTime>2012-09-27T20:19:47.082Z</CreatedTime> |
+ <EnabledMetrics/> |
+ <LaunchConfigurationName>test_launchconfig</LaunchConfigurationName> |
+ <Instances> |
+ <member> |
+ <HealthStatus>Healthy</HealthStatus> |
+ <AvailabilityZone>us-east-1a</AvailabilityZone> |
+ <InstanceId>i-z118d054</InstanceId> |
+ <LaunchConfigurationName>test_launchconfig</LaunchConfigurationName> |
+ <LifecycleState>InService</LifecycleState> |
+ </member> |
+ </Instances> |
+ <DesiredCapacity>1</DesiredCapacity> |
+ <AvailabilityZones> |
+ <member>us-east-1c</member> |
+ <member>us-east-1a</member> |
+ </AvailabilityZones> |
+ <LoadBalancerNames/> |
+ <MinSize>1</MinSize> |
+ <VPCZoneIdentifier/> |
+ <HealthCheckGracePeriod>0</HealthCheckGracePeriod> |
+ <DefaultCooldown>300</DefaultCooldown> |
+ <AutoScalingGroupARN>myarn</AutoScalingGroupARN> |
+ <TerminationPolicies> |
+ <member>OldestInstance</member> |
+ <member>OldestLaunchConfiguration</member> |
+ </TerminationPolicies> |
+ <MaxSize>2</MaxSize> |
+ <InstanceId>Something</InstanceId> |
+ </member> |
+ </AutoScalingGroups> |
+ </DescribeAutoScalingGroupsResult> |
+ """ |
+ |
+ def test_get_all_groups_is_parsed_correctly(self): |
+ self.set_http_response(status_code=200) |
+ response = self.service_connection.get_all_groups(names=['test_group']) |
+ self.assertEqual(len(response), 1, response) |
+ as_group = response[0] |
+ self.assertEqual(as_group.availability_zones, ['us-east-1c', 'us-east-1a']) |
+ self.assertEqual(as_group.default_cooldown, 300) |
+ self.assertEqual(as_group.desired_capacity, 1) |
+ self.assertEqual(as_group.enabled_metrics, []) |
+ self.assertEqual(as_group.health_check_period, 0) |
+ self.assertEqual(as_group.health_check_type, 'EC2') |
+ self.assertEqual(as_group.launch_config_name, 'test_launchconfig') |
+ self.assertEqual(as_group.load_balancers, []) |
+ self.assertEqual(as_group.min_size, 1) |
+ self.assertEqual(as_group.max_size, 2) |
+ self.assertEqual(as_group.name, 'test_group') |
+ self.assertEqual(as_group.suspended_processes, []) |
+ self.assertEqual(as_group.tags, []) |
+ self.assertEqual(as_group.termination_policies, |
+ ['OldestInstance', 'OldestLaunchConfiguration']) |
+ self.assertEqual(as_group.instance_id, 'Something') |
+ |
+ |
+class TestDescribeTerminationPolicies(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ return b""" |
+ <DescribeTerminationPolicyTypesResponse> |
+ <DescribeTerminationPolicyTypesResult> |
+ <TerminationPolicyTypes> |
+ <member>ClosestToNextInstanceHour</member> |
+ <member>Default</member> |
+ <member>NewestInstance</member> |
+ <member>OldestInstance</member> |
+ <member>OldestLaunchConfiguration</member> |
+ </TerminationPolicyTypes> |
+ </DescribeTerminationPolicyTypesResult> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </DescribeTerminationPolicyTypesResponse> |
+ """ |
+ |
+ def test_autoscaling_group_with_termination_policies(self): |
+ self.set_http_response(status_code=200) |
+ response = self.service_connection.get_termination_policies() |
+ self.assertListEqual( |
+ response, |
+ ['ClosestToNextInstanceHour', 'Default', |
+ 'NewestInstance', 'OldestInstance', 'OldestLaunchConfiguration']) |
+ |
+ |
+class TestLaunchConfigurationDescribe(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ # This is a dummy response |
+ return b""" |
+ <DescribeLaunchConfigurationsResponse> |
+ <DescribeLaunchConfigurationsResult> |
+ <LaunchConfigurations> |
+ <member> |
+ <AssociatePublicIpAddress>true</AssociatePublicIpAddress> |
+ <SecurityGroups/> |
+ <CreatedTime>2013-01-21T23:04:42.200Z</CreatedTime> |
+ <KernelId/> |
+ <LaunchConfigurationName>my-test-lc</LaunchConfigurationName> |
+ <UserData/> |
+ <InstanceType>m1.small</InstanceType> |
+ <LaunchConfigurationARN>arn:aws:autoscaling:us-east-1:803981987763:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/my-test-lc</LaunchConfigurationARN> |
+ <BlockDeviceMappings/> |
+ <ImageId>ami-514ac838</ImageId> |
+ <KeyName/> |
+ <RamdiskId/> |
+ <InstanceMonitoring> |
+ <Enabled>true</Enabled> |
+ </InstanceMonitoring> |
+ <EbsOptimized>false</EbsOptimized> |
+ <ClassicLinkVPCId>vpc-12345</ClassicLinkVPCId> |
+ <ClassicLinkVPCSecurityGroups> |
+ <member>sg-1234</member> |
+ </ClassicLinkVPCSecurityGroups> |
+ </member> |
+ </LaunchConfigurations> |
+ </DescribeLaunchConfigurationsResult> |
+ <ResponseMetadata> |
+ <RequestId>d05a22f8-b690-11e2-bf8e-2113fEXAMPLE</RequestId> |
+ </ResponseMetadata> |
+ </DescribeLaunchConfigurationsResponse> |
+ """ |
+ |
+ def test_get_all_launch_configurations(self): |
+ self.set_http_response(status_code=200) |
+ |
+ response = self.service_connection.get_all_launch_configurations() |
+ self.assertTrue(isinstance(response, list)) |
+ self.assertEqual(len(response), 1) |
+ self.assertTrue(isinstance(response[0], LaunchConfiguration)) |
+ |
+ self.assertEqual(response[0].associate_public_ip_address, True) |
+ self.assertEqual(response[0].name, "my-test-lc") |
+ self.assertEqual(response[0].instance_type, "m1.small") |
+ self.assertEqual(response[0].launch_configuration_arn, "arn:aws:autoscaling:us-east-1:803981987763:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/my-test-lc") |
+ self.assertEqual(response[0].image_id, "ami-514ac838") |
+ self.assertTrue(isinstance(response[0].instance_monitoring, launchconfig.InstanceMonitoring)) |
+ self.assertEqual(response[0].instance_monitoring.enabled, 'true') |
+ self.assertEqual(response[0].ebs_optimized, False) |
+ self.assertEqual(response[0].block_device_mappings, []) |
+ self.assertEqual(response[0].classic_link_vpc_id, 'vpc-12345') |
+ self.assertEqual(response[0].classic_link_vpc_security_groups, |
+ ['sg-1234']) |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'DescribeLaunchConfigurations', |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_get_all_configuration_limited(self): |
+ self.set_http_response(status_code=200) |
+ |
+ response = self.service_connection.get_all_launch_configurations(max_records=10, names=["my-test1", "my-test2"]) |
+ self.assert_request_parameters({ |
+ 'Action': 'DescribeLaunchConfigurations', |
+ 'MaxRecords': 10, |
+ 'LaunchConfigurationNames.member.1': 'my-test1', |
+ 'LaunchConfigurationNames.member.2': 'my-test2' |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestLaunchConfiguration(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ # This is a dummy response |
+ return b""" |
+ <DescribeLaunchConfigurationsResponse> |
+ </DescribeLaunchConfigurationsResponse> |
+ """ |
+ |
+ def test_launch_config(self): |
+ # This unit test is based on #753 and #1343 |
+ self.set_http_response(status_code=200) |
+ dev_sdf = EBSBlockDeviceType(snapshot_id='snap-12345') |
+ |
+ bdm = BlockDeviceMapping() |
+ bdm['/dev/sdf'] = dev_sdf |
+ |
+ lc = launchconfig.LaunchConfiguration( |
+ connection=self.service_connection, |
+ name='launch_config', |
+ image_id='123456', |
+ instance_type='m1.large', |
+ user_data='#!/bin/bash', |
+ security_groups=['group1'], |
+ spot_price='price', |
+ block_device_mappings=[bdm], |
+ associate_public_ip_address=True, |
+ volume_type='atype', |
+ delete_on_termination=False, |
+ iops=3000, |
+ classic_link_vpc_id='vpc-1234', |
+ classic_link_vpc_security_groups=['classic_link_group'] |
+ ) |
+ |
+ response = self.service_connection.create_launch_configuration(lc) |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'CreateLaunchConfiguration', |
+ 'BlockDeviceMappings.member.1.DeviceName': '/dev/sdf', |
+ 'BlockDeviceMappings.member.1.Ebs.DeleteOnTermination': 'false', |
+ 'BlockDeviceMappings.member.1.Ebs.SnapshotId': 'snap-12345', |
+ 'EbsOptimized': 'false', |
+ 'LaunchConfigurationName': 'launch_config', |
+ 'ImageId': '123456', |
+ 'UserData': base64.b64encode(b'#!/bin/bash').decode('utf-8'), |
+ 'InstanceMonitoring.Enabled': 'false', |
+ 'InstanceType': 'm1.large', |
+ 'SecurityGroups.member.1': 'group1', |
+ 'SpotPrice': 'price', |
+ 'AssociatePublicIpAddress': 'true', |
+ 'VolumeType': 'atype', |
+ 'DeleteOnTermination': 'false', |
+ 'Iops': 3000, |
+ 'ClassicLinkVPCId': 'vpc-1234', |
+ 'ClassicLinkVPCSecurityGroups.member.1': 'classic_link_group' |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestCreateAutoScalePolicy(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestCreateAutoScalePolicy, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <PutScalingPolicyResponse xmlns="http://autoscaling.amazonaws.com\ |
+ /doc/2011-01-01/"> |
+ <PutScalingPolicyResult> |
+ <PolicyARN>arn:aws:autoscaling:us-east-1:803981987763:scaling\ |
+ Policy:b0dcf5e8 |
+ -02e6-4e31-9719-0675d0dc31ae:autoScalingGroupName/my-test-asg:\ |
+ policyName/my-scal |
+ eout-policy</PolicyARN> |
+ </PutScalingPolicyResult> |
+ <ResponseMetadata> |
+ <RequestId>3cfc6fef-c08b-11e2-a697-2922EXAMPLE</RequestId> |
+ </ResponseMetadata> |
+ </PutScalingPolicyResponse> |
+ """ |
+ |
+ def test_scaling_policy_with_min_adjustment_step(self): |
+ self.set_http_response(status_code=200) |
+ |
+ policy = ScalingPolicy( |
+ name='foo', as_name='bar', |
+ adjustment_type='PercentChangeInCapacity', scaling_adjustment=50, |
+ min_adjustment_step=30) |
+ self.service_connection.create_scaling_policy(policy) |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'PutScalingPolicy', |
+ 'PolicyName': 'foo', |
+ 'AutoScalingGroupName': 'bar', |
+ 'AdjustmentType': 'PercentChangeInCapacity', |
+ 'ScalingAdjustment': 50, |
+ 'MinAdjustmentStep': 30 |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_scaling_policy_with_wrong_adjustment_type(self): |
+ self.set_http_response(status_code=200) |
+ |
+ policy = ScalingPolicy( |
+ name='foo', as_name='bar', |
+ adjustment_type='ChangeInCapacity', scaling_adjustment=50, |
+ min_adjustment_step=30) |
+ self.service_connection.create_scaling_policy(policy) |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'PutScalingPolicy', |
+ 'PolicyName': 'foo', |
+ 'AutoScalingGroupName': 'bar', |
+ 'AdjustmentType': 'ChangeInCapacity', |
+ 'ScalingAdjustment': 50 |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_scaling_policy_without_min_adjustment_step(self): |
+ self.set_http_response(status_code=200) |
+ |
+ policy = ScalingPolicy( |
+ name='foo', as_name='bar', |
+ adjustment_type='PercentChangeInCapacity', scaling_adjustment=50) |
+ self.service_connection.create_scaling_policy(policy) |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'PutScalingPolicy', |
+ 'PolicyName': 'foo', |
+ 'AutoScalingGroupName': 'bar', |
+ 'AdjustmentType': 'PercentChangeInCapacity', |
+ 'ScalingAdjustment': 50 |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestPutNotificationConfiguration(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestPutNotificationConfiguration, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <PutNotificationConfigurationResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </PutNotificationConfigurationResponse> |
+ """ |
+ |
+ def test_autoscaling_group_put_notification_configuration(self): |
+ self.set_http_response(status_code=200) |
+ autoscale = AutoScalingGroup( |
+ name='ana', launch_config='lauch_config', |
+ min_size=1, max_size=2, |
+ termination_policies=['OldestInstance', 'OldestLaunchConfiguration']) |
+ self.service_connection.put_notification_configuration(autoscale, 'arn:aws:sns:us-east-1:19890506:AutoScaling-Up', ['autoscaling:EC2_INSTANCE_LAUNCH']) |
+ self.assert_request_parameters({ |
+ 'Action': 'PutNotificationConfiguration', |
+ 'AutoScalingGroupName': 'ana', |
+ 'NotificationTypes.member.1': 'autoscaling:EC2_INSTANCE_LAUNCH', |
+ 'TopicARN': 'arn:aws:sns:us-east-1:19890506:AutoScaling-Up', |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestDeleteNotificationConfiguration(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestDeleteNotificationConfiguration, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <DeleteNotificationConfigurationResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </DeleteNotificationConfigurationResponse> |
+ """ |
+ |
+ def test_autoscaling_group_put_notification_configuration(self): |
+ self.set_http_response(status_code=200) |
+ autoscale = AutoScalingGroup( |
+ name='ana', launch_config='lauch_config', |
+ min_size=1, max_size=2, |
+ termination_policies=['OldestInstance', 'OldestLaunchConfiguration']) |
+ self.service_connection.delete_notification_configuration(autoscale, 'arn:aws:sns:us-east-1:19890506:AutoScaling-Up') |
+ self.assert_request_parameters({ |
+ 'Action': 'DeleteNotificationConfiguration', |
+ 'AutoScalingGroupName': 'ana', |
+ 'TopicARN': 'arn:aws:sns:us-east-1:19890506:AutoScaling-Up', |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestAutoScalingTag(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ return b""" |
+ <CreateOrUpdateTagsResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestId</RequestId> |
+ </ResponseMetadata> |
+ </CreateOrUpdateTagsResponse> |
+ """ |
+ |
+ def test_create_or_update_tags(self): |
+ self.set_http_response(status_code=200) |
+ |
+ tags = [ |
+ Tag( |
+ connection=self.service_connection, |
+ key='alpha', |
+ value='tango', |
+ resource_id='sg-00000000', |
+ resource_type='auto-scaling-group', |
+ propagate_at_launch=True |
+ ), |
+ Tag( |
+ connection=self.service_connection, |
+ key='bravo', |
+ value='sierra', |
+ resource_id='sg-00000000', |
+ resource_type='auto-scaling-group', |
+ propagate_at_launch=False |
+ )] |
+ |
+ response = self.service_connection.create_or_update_tags(tags) |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'CreateOrUpdateTags', |
+ 'Tags.member.1.ResourceType': 'auto-scaling-group', |
+ 'Tags.member.1.ResourceId': 'sg-00000000', |
+ 'Tags.member.1.Key': 'alpha', |
+ 'Tags.member.1.Value': 'tango', |
+ 'Tags.member.1.PropagateAtLaunch': 'true', |
+ 'Tags.member.2.ResourceType': 'auto-scaling-group', |
+ 'Tags.member.2.ResourceId': 'sg-00000000', |
+ 'Tags.member.2.Key': 'bravo', |
+ 'Tags.member.2.Value': 'sierra', |
+ 'Tags.member.2.PropagateAtLaunch': 'false' |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_endElement(self): |
+ for i in [ |
+ ('Key', 'mykey', 'key'), |
+ ('Value', 'myvalue', 'value'), |
+ ('ResourceType', 'auto-scaling-group', 'resource_type'), |
+ ('ResourceId', 'sg-01234567', 'resource_id'), |
+ ('PropagateAtLaunch', 'true', 'propagate_at_launch')]: |
+ self.check_tag_attributes_set(i[0], i[1], i[2]) |
+ |
+ def check_tag_attributes_set(self, name, value, attr): |
+ tag = Tag() |
+ tag.endElement(name, value, None) |
+ if value == 'true': |
+ self.assertEqual(getattr(tag, attr), True) |
+ else: |
+ self.assertEqual(getattr(tag, attr), value) |
+ |
+ |
+class TestAttachInstances(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestAttachInstances, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <AttachInstancesResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </AttachInstancesResponse> |
+ """ |
+ |
+ def test_attach_instances(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.attach_instances( |
+ 'autoscale', |
+ ['inst2', 'inst1', 'inst4'] |
+ ) |
+ self.assert_request_parameters({ |
+ 'Action': 'AttachInstances', |
+ 'AutoScalingGroupName': 'autoscale', |
+ 'InstanceIds.member.1': 'inst2', |
+ 'InstanceIds.member.2': 'inst1', |
+ 'InstanceIds.member.3': 'inst4', |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestDetachInstances(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestDetachInstances, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <DetachInstancesResponse> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </DetachInstancesResponse> |
+ """ |
+ |
+ def test_detach_instances(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.detach_instances( |
+ 'autoscale', |
+ ['inst2', 'inst1', 'inst4'] |
+ ) |
+ self.assert_request_parameters({ |
+ 'Action': 'DetachInstances', |
+ 'AutoScalingGroupName': 'autoscale', |
+ 'InstanceIds.member.1': 'inst2', |
+ 'InstanceIds.member.2': 'inst1', |
+ 'InstanceIds.member.3': 'inst4', |
+ 'ShouldDecrementDesiredCapacity': 'true', |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_detach_instances_with_decrement_desired_capacity(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.detach_instances( |
+ 'autoscale', |
+ ['inst2', 'inst1', 'inst4'], |
+ True |
+ ) |
+ self.assert_request_parameters({ |
+ 'Action': 'DetachInstances', |
+ 'AutoScalingGroupName': 'autoscale', |
+ 'InstanceIds.member.1': 'inst2', |
+ 'InstanceIds.member.2': 'inst1', |
+ 'InstanceIds.member.3': 'inst4', |
+ 'ShouldDecrementDesiredCapacity': 'true', |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_detach_instances_without_decrement_desired_capacity(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.detach_instances( |
+ 'autoscale', |
+ ['inst2', 'inst1', 'inst4'], |
+ False |
+ ) |
+ self.assert_request_parameters({ |
+ 'Action': 'DetachInstances', |
+ 'AutoScalingGroupName': 'autoscale', |
+ 'InstanceIds.member.1': 'inst2', |
+ 'InstanceIds.member.2': 'inst1', |
+ 'InstanceIds.member.3': 'inst4', |
+ 'ShouldDecrementDesiredCapacity': 'false', |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+class TestGetAccountLimits(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestGetAccountLimits, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <DescribeAccountLimitsAnswer> |
+ <MaxNumberOfAutoScalingGroups>6</MaxNumberOfAutoScalingGroups> |
+ <MaxNumberOfLaunchConfigurations>3</MaxNumberOfLaunchConfigurations> |
+ <ResponseMetadata> |
+ <RequestId>requestid</RequestId> |
+ </ResponseMetadata> |
+ </DescribeAccountLimitsAnswer> |
+ """ |
+ |
+ def test_autoscaling_group_put_notification_configuration(self): |
+ self.set_http_response(status_code=200) |
+ limits = self.service_connection.get_account_limits() |
+ self.assert_request_parameters({ |
+ 'Action': 'DescribeAccountLimits', |
+ }, ignore_params_values=['Version']) |
+ self.assertEqual(limits.max_autoscaling_groups, 6) |
+ self.assertEqual(limits.max_launch_configurations, 3) |
+ |
+ |
+class TestGetAdjustmentTypes(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def setUp(self): |
+ super(TestGetAdjustmentTypes, self).setUp() |
+ |
+ def default_body(self): |
+ return b""" |
+ <DescribeAdjustmentTypesResponse xmlns="http://autoscaling.amazonaws.com/doc/201-01-01/"> |
+ <DescribeAdjustmentTypesResult> |
+ <AdjustmentTypes> |
+ <member> |
+ <AdjustmentType>ChangeInCapacity</AdjustmentType> |
+ </member> |
+ <member> |
+ <AdjustmentType>ExactCapacity</AdjustmentType> |
+ </member> |
+ <member> |
+ <AdjustmentType>PercentChangeInCapacity</AdjustmentType> |
+ </member> |
+ </AdjustmentTypes> |
+ </DescribeAdjustmentTypesResult> |
+ <ResponseMetadata> |
+ <RequestId>requestId</RequestId> |
+ </ResponseMetadata> |
+ </DescribeAdjustmentTypesResponse> |
+ """ |
+ |
+ def test_autoscaling_adjustment_types(self): |
+ self.set_http_response(status_code=200) |
+ response = self.service_connection.get_all_adjustment_types() |
+ self.assert_request_parameters({ |
+ 'Action': 'DescribeAdjustmentTypes' |
+ }, ignore_params_values=['Version']) |
+ |
+ self.assertTrue(isinstance(response, list)) |
+ self.assertEqual(response[0].adjustment_type, "ChangeInCapacity") |
+ self.assertEqual(response[1].adjustment_type, "ExactCapacity") |
+ self.assertEqual(response[2].adjustment_type, "PercentChangeInCapacity") |
+ |
+ |
+class TestLaunchConfigurationDescribeWithBlockDeviceTypes(AWSMockServiceTestCase): |
+ connection_class = AutoScaleConnection |
+ |
+ def default_body(self): |
+ # This is a dummy response |
+ return b""" |
+ <DescribeLaunchConfigurationsResponse> |
+ <DescribeLaunchConfigurationsResult> |
+ <LaunchConfigurations> |
+ <member> |
+ <AssociatePublicIpAddress>true</AssociatePublicIpAddress> |
+ <SecurityGroups/> |
+ <CreatedTime>2013-01-21T23:04:42.200Z</CreatedTime> |
+ <KernelId/> |
+ <LaunchConfigurationName>my-test-lc</LaunchConfigurationName> |
+ <UserData/> |
+ <InstanceType>m1.small</InstanceType> |
+ <LaunchConfigurationARN>arn:aws:autoscaling:us-east-1:803981987763:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/my-test-lc</LaunchConfigurationARN> |
+ <BlockDeviceMappings> |
+ <member> |
+ <DeviceName>/dev/xvdp</DeviceName> |
+ <Ebs> |
+ <SnapshotId>snap-1234abcd</SnapshotId> |
+ <Iops>1000</Iops> |
+ <DeleteOnTermination>true</DeleteOnTermination> |
+ <VolumeType>io1</VolumeType> |
+ <VolumeSize>100</VolumeSize> |
+ </Ebs> |
+ </member> |
+ <member> |
+ <VirtualName>ephemeral1</VirtualName> |
+ <DeviceName>/dev/xvdc</DeviceName> |
+ </member> |
+ <member> |
+ <VirtualName>ephemeral0</VirtualName> |
+ <DeviceName>/dev/xvdb</DeviceName> |
+ </member> |
+ <member> |
+ <DeviceName>/dev/xvdh</DeviceName> |
+ <Ebs> |
+ <Iops>2000</Iops> |
+ <DeleteOnTermination>false</DeleteOnTermination> |
+ <VolumeType>io1</VolumeType> |
+ <VolumeSize>200</VolumeSize> |
+ </Ebs> |
+ </member> |
+ </BlockDeviceMappings> |
+ <ImageId>ami-514ac838</ImageId> |
+ <KeyName/> |
+ <RamdiskId/> |
+ <InstanceMonitoring> |
+ <Enabled>true</Enabled> |
+ </InstanceMonitoring> |
+ <EbsOptimized>false</EbsOptimized> |
+ </member> |
+ </LaunchConfigurations> |
+ </DescribeLaunchConfigurationsResult> |
+ <ResponseMetadata> |
+ <RequestId>d05a22f8-b690-11e2-bf8e-2113fEXAMPLE</RequestId> |
+ </ResponseMetadata> |
+ </DescribeLaunchConfigurationsResponse> |
+ """ |
+ |
+ def test_get_all_launch_configurations_with_block_device_types(self): |
+ self.set_http_response(status_code=200) |
+ self.service_connection.use_block_device_types = True |
+ |
+ response = self.service_connection.get_all_launch_configurations() |
+ self.assertTrue(isinstance(response, list)) |
+ self.assertEqual(len(response), 1) |
+ self.assertTrue(isinstance(response[0], LaunchConfiguration)) |
+ |
+ self.assertEqual(response[0].associate_public_ip_address, True) |
+ self.assertEqual(response[0].name, "my-test-lc") |
+ self.assertEqual(response[0].instance_type, "m1.small") |
+ self.assertEqual(response[0].launch_configuration_arn, "arn:aws:autoscaling:us-east-1:803981987763:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/my-test-lc") |
+ self.assertEqual(response[0].image_id, "ami-514ac838") |
+ self.assertTrue(isinstance(response[0].instance_monitoring, launchconfig.InstanceMonitoring)) |
+ self.assertEqual(response[0].instance_monitoring.enabled, 'true') |
+ self.assertEqual(response[0].ebs_optimized, False) |
+ |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdb'].ephemeral_name, 'ephemeral0') |
+ |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdc'].ephemeral_name, 'ephemeral1') |
+ |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdp'].snapshot_id, 'snap-1234abcd') |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdp'].delete_on_termination, True) |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdp'].iops, 1000) |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdp'].size, 100) |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdp'].volume_type, 'io1') |
+ |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdh'].delete_on_termination, False) |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdh'].iops, 2000) |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdh'].size, 200) |
+ self.assertEqual(response[0].block_device_mappings['/dev/xvdh'].volume_type, 'io1') |
+ |
+ self.assert_request_parameters({ |
+ 'Action': 'DescribeLaunchConfigurations', |
+ }, ignore_params_values=['Version']) |
+ |
+ def test_get_all_configuration_limited(self): |
+ self.set_http_response(status_code=200) |
+ |
+ response = self.service_connection.get_all_launch_configurations(max_records=10, names=["my-test1", "my-test2"]) |
+ self.assert_request_parameters({ |
+ 'Action': 'DescribeLaunchConfigurations', |
+ 'MaxRecords': 10, |
+ 'LaunchConfigurationNames.member.1': 'my-test1', |
+ 'LaunchConfigurationNames.member.2': 'my-test2' |
+ }, ignore_params_values=['Version']) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |