Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: third_party/gsutil/third_party/boto/tests/unit/ec2/autoscale/test_group.py

Issue 1377933002: [catapult] - Copy Telemetry's gsutilz over to third_party. (Closed) Base URL: https://github.com/catapult-project/catapult.git@master
Patch Set: Rename to gsutil. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698