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

Unified Diff: third_party/gsutil/third_party/boto/tests/unit/cloudformation/test_stack.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/cloudformation/test_stack.py
diff --git a/third_party/gsutil/third_party/boto/tests/unit/cloudformation/test_stack.py b/third_party/gsutil/third_party/boto/tests/unit/cloudformation/test_stack.py
new file mode 100755
index 0000000000000000000000000000000000000000..82edc06af934ed23c5c2abc0210b575b4dab2884
--- /dev/null
+++ b/third_party/gsutil/third_party/boto/tests/unit/cloudformation/test_stack.py
@@ -0,0 +1,256 @@
+#!/usr/bin/env python
+import datetime
+import xml.sax
+import unittest
+import boto.handler
+import boto.resultset
+import boto.cloudformation
+
+SAMPLE_XML = b"""
+<DescribeStacksResponse xmlns="http://cloudformation.amazonaws.com/doc/2010-05-15/">
+ <DescribeStacksResult>
+ <Stacks>
+ <member>
+ <Tags>
+ <member>
+ <Value>value0</Value>
+ <Key>key0</Key>
+ </member>
+ <member>
+ <Key>key1</Key>
+ <Value>value1</Value>
+ </member>
+ </Tags>
+ <StackId>arn:aws:cloudformation:ap-southeast-1:100:stack/Name/id</StackId>
+ <StackStatus>CREATE_COMPLETE</StackStatus>
+ <StackName>Name</StackName>
+ <StackStatusReason/>
+ <Description/>
+ <NotificationARNs>
+ <member>arn:aws:sns:ap-southeast-1:100:name</member>
+ </NotificationARNs>
+ <CreationTime>2013-01-10T05:04:56Z</CreationTime>
+ <DisableRollback>false</DisableRollback>
+ <Outputs>
+ <member>
+ <OutputValue>value0</OutputValue>
+ <Description>output0</Description>
+ <OutputKey>key0</OutputKey>
+ </member>
+ <member>
+ <OutputValue>value1</OutputValue>
+ <Description>output1</Description>
+ <OutputKey>key1</OutputKey>
+ </member>
+ </Outputs>
+ </member>
+ </Stacks>
+ </DescribeStacksResult>
+ <ResponseMetadata>
+ <RequestId>1</RequestId>
+ </ResponseMetadata>
+</DescribeStacksResponse>
+"""
+
+DESCRIBE_STACK_RESOURCE_XML = b"""
+<DescribeStackResourcesResult>
+ <StackResources>
+ <member>
+ <StackId>arn:aws:cloudformation:us-east-1:123456789:stack/MyStack/aaf549a0-a413-11df-adb3-5081b3858e83</StackId>
+ <StackName>MyStack</StackName>
+ <LogicalResourceId>MyDBInstance</LogicalResourceId>
+ <PhysicalResourceId>MyStack_DB1</PhysicalResourceId>
+ <ResourceType>AWS::DBInstance</ResourceType>
+ <Timestamp>2010-07-27T22:27:28Z</Timestamp>
+ <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
+ </member>
+ <member>
+ <StackId>arn:aws:cloudformation:us-east-1:123456789:stack/MyStack/aaf549a0-a413-11df-adb3-5081b3858e83</StackId>
+ <StackName>MyStack</StackName>
+ <LogicalResourceId>MyAutoScalingGroup</LogicalResourceId>
+ <PhysicalResourceId>MyStack_ASG1</PhysicalResourceId>
+ <ResourceType>AWS::AutoScalingGroup</ResourceType>
+ <Timestamp>2010-07-27T22:28:28.123456Z</Timestamp>
+ <ResourceStatus>CREATE_IN_PROGRESS</ResourceStatus>
+ </member>
+ </StackResources>
+</DescribeStackResourcesResult>
+"""
+
+LIST_STACKS_XML = b"""
+<ListStacksResponse>
+ <ListStacksResult>
+ <StackSummaries>
+ <member>
+ <StackId>
+ arn:aws:cloudformation:us-east-1:1234567:stack/TestCreate1/aaaaa
+ </StackId>
+ <StackStatus>CREATE_IN_PROGRESS</StackStatus>
+ <StackName>vpc1</StackName>
+ <CreationTime>2011-05-23T15:47:44Z</CreationTime>
+ <TemplateDescription>
+ Creates one EC2 instance and a load balancer.
+ </TemplateDescription>
+ </member>
+ <member>
+ <StackId>
+ arn:aws:cloudformation:us-east-1:1234567:stack/TestDelete2/bbbbb
+ </StackId>
+ <StackStatus>DELETE_COMPLETE</StackStatus>
+ <DeletionTime>2011-03-10T16:20:51.575757Z</DeletionTime>
+ <StackName>WP1</StackName>
+ <CreationTime>2011-03-05T19:57:58.161616Z</CreationTime>
+ <TemplateDescription>
+ A simple basic Cloudformation Template.
+ </TemplateDescription>
+ </member>
+ </StackSummaries>
+ </ListStacksResult>
+</ListStacksResponse>
+"""
+
+LIST_STACK_RESOURCES_XML = b"""
+<ListStackResourcesResponse>
+ <ListStackResourcesResult>
+ <StackResourceSummaries>
+ <member>
+ <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
+ <LogicalResourceId>DBSecurityGroup</LogicalResourceId>
+ <LastUpdatedTime>2011-06-21T20:15:58Z</LastUpdatedTime>
+ <PhysicalResourceId>gmarcteststack-dbsecuritygroup-1s5m0ez5lkk6w</PhysicalResourceId>
+ <ResourceType>AWS::RDS::DBSecurityGroup</ResourceType>
+ </member>
+ <member>
+ <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
+ <LogicalResourceId>SampleDB</LogicalResourceId>
+ <LastUpdatedTime>2011-06-21T20:25:57.875643Z</LastUpdatedTime>
+ <PhysicalResourceId>MyStack-sampledb-ycwhk1v830lx</PhysicalResourceId>
+ <ResourceType>AWS::RDS::DBInstance</ResourceType>
+ </member>
+ </StackResourceSummaries>
+ </ListStackResourcesResult>
+ <ResponseMetadata>
+ <RequestId>2d06e36c-ac1d-11e0-a958-f9382b6eb86b</RequestId>
+ </ResponseMetadata>
+</ListStackResourcesResponse>
+"""
+
+class TestStackParse(unittest.TestCase):
+ def test_parse_tags(self):
+ rs = boto.resultset.ResultSet([
+ ('member', boto.cloudformation.stack.Stack)
+ ])
+ h = boto.handler.XmlHandler(rs, None)
+ xml.sax.parseString(SAMPLE_XML, h)
+ tags = rs[0].tags
+ self.assertEqual(tags, {u'key0': u'value0', u'key1': u'value1'})
+
+ def test_event_creation_time_with_millis(self):
+ millis_xml = SAMPLE_XML.replace(
+ b"<CreationTime>2013-01-10T05:04:56Z</CreationTime>",
+ b"<CreationTime>2013-01-10T05:04:56.102342Z</CreationTime>"
+ )
+
+ rs = boto.resultset.ResultSet([
+ ('member', boto.cloudformation.stack.Stack)
+ ])
+ h = boto.handler.XmlHandler(rs, None)
+ xml.sax.parseString(millis_xml, h)
+ creation_time = rs[0].creation_time
+ self.assertEqual(
+ creation_time,
+ datetime.datetime(2013, 1, 10, 5, 4, 56, 102342)
+ )
+
+ def test_resource_time_with_millis(self):
+ rs = boto.resultset.ResultSet([
+ ('member', boto.cloudformation.stack.StackResource)
+ ])
+ h = boto.handler.XmlHandler(rs, None)
+ xml.sax.parseString(DESCRIBE_STACK_RESOURCE_XML, h)
+ timestamp_1 = rs[0].timestamp
+ self.assertEqual(
+ timestamp_1,
+ datetime.datetime(2010, 7, 27, 22, 27, 28)
+ )
+ timestamp_2 = rs[1].timestamp
+ self.assertEqual(
+ timestamp_2,
+ datetime.datetime(2010, 7, 27, 22, 28, 28, 123456)
+ )
+
+ def test_list_stacks_time_with_millis(self):
+ rs = boto.resultset.ResultSet([
+ ('member', boto.cloudformation.stack.StackSummary)
+ ])
+ h = boto.handler.XmlHandler(rs, None)
+ xml.sax.parseString(LIST_STACKS_XML, h)
+ timestamp_1 = rs[0].creation_time
+ self.assertEqual(
+ timestamp_1,
+ datetime.datetime(2011, 5, 23, 15, 47, 44)
+ )
+ timestamp_2 = rs[1].creation_time
+ self.assertEqual(
+ timestamp_2,
+ datetime.datetime(2011, 3, 5, 19, 57, 58, 161616)
+ )
+ timestamp_3 = rs[1].deletion_time
+ self.assertEqual(
+ timestamp_3,
+ datetime.datetime(2011, 3, 10, 16, 20, 51, 575757)
+ )
+
+ def test_list_stacks_time_with_millis_again(self):
+ rs = boto.resultset.ResultSet([
+ ('member', boto.cloudformation.stack.StackResourceSummary)
+ ])
+ h = boto.handler.XmlHandler(rs, None)
+ xml.sax.parseString(LIST_STACK_RESOURCES_XML, h)
+ timestamp_1 = rs[0].last_updated_time
+ self.assertEqual(
+ timestamp_1,
+ datetime.datetime(2011, 6, 21, 20, 15, 58)
+ )
+ timestamp_2 = rs[1].last_updated_time
+ self.assertEqual(
+ timestamp_2,
+ datetime.datetime(2011, 6, 21, 20, 25, 57, 875643)
+ )
+
+ def test_disable_rollback_false(self):
+ # SAMPLE_XML defines DisableRollback=="false"
+ rs = boto.resultset.ResultSet([('member', boto.cloudformation.stack.Stack)])
+ h = boto.handler.XmlHandler(rs, None)
+ xml.sax.parseString(SAMPLE_XML, h)
+ disable_rollback = rs[0].disable_rollback
+ self.assertFalse(disable_rollback)
+
+ def test_disable_rollback_false_upper(self):
+ # Should also handle "False"
+ rs = boto.resultset.ResultSet([('member', boto.cloudformation.stack.Stack)])
+ h = boto.handler.XmlHandler(rs, None)
+ sample_xml_upper = SAMPLE_XML.replace(b'false', b'False')
+ xml.sax.parseString(sample_xml_upper, h)
+ disable_rollback = rs[0].disable_rollback
+ self.assertFalse(disable_rollback)
+
+ def test_disable_rollback_true(self):
+ rs = boto.resultset.ResultSet([('member', boto.cloudformation.stack.Stack)])
+ h = boto.handler.XmlHandler(rs, None)
+ sample_xml_upper = SAMPLE_XML.replace(b'false', b'true')
+ xml.sax.parseString(sample_xml_upper, h)
+ disable_rollback = rs[0].disable_rollback
+ self.assertTrue(disable_rollback)
+
+ def test_disable_rollback_true_upper(self):
+ rs = boto.resultset.ResultSet([('member', boto.cloudformation.stack.Stack)])
+ h = boto.handler.XmlHandler(rs, None)
+ sample_xml_upper = SAMPLE_XML.replace(b'false', b'True')
+ xml.sax.parseString(sample_xml_upper, h)
+ disable_rollback = rs[0].disable_rollback
+ self.assertTrue(disable_rollback)
+
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698