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

Side by Side Diff: third_party/gsutil/boto/tests/unit/cloudformation/test_connection.py

Issue 12317103: Added gsutil to depot tools (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: added readme Created 7 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 import unittest
3 import httplib
4 from datetime import datetime
5 try:
6 import json
7 except ImportError:
8 import simplejson as json
9
10 from mock import Mock
11
12 from tests.unit import AWSMockServiceTestCase
13 from boto.cloudformation.connection import CloudFormationConnection
14
15
16 SAMPLE_TEMPLATE = r"""
17 {
18 "AWSTemplateFormatVersion" : "2010-09-09",
19 "Description" : "Sample template",
20 "Parameters" : {
21 "KeyName" : {
22 "Description" : "key pair",
23 "Type" : "String"
24 }
25 },
26 "Resources" : {
27 "Ec2Instance" : {
28 "Type" : "AWS::EC2::Instance",
29 "Properties" : {
30 "KeyName" : { "Ref" : "KeyName" },
31 "ImageId" : "ami-7f418316",
32 "UserData" : { "Fn::Base64" : "80" }
33 }
34 }
35 },
36 "Outputs" : {
37 "InstanceId" : {
38 "Description" : "InstanceId of the newly created EC2 instance",
39 "Value" : { "Ref" : "Ec2Instance" }
40 }
41 }
42 """
43
44 class CloudFormationConnectionBase(AWSMockServiceTestCase):
45 connection_class = CloudFormationConnection
46
47 def setUp(self):
48 super(CloudFormationConnectionBase, self).setUp()
49 self.stack_id = u'arn:aws:cloudformation:us-east-1:18:stack/Name/id'
50
51
52 class TestCloudFormationCreateStack(CloudFormationConnectionBase):
53 def default_body(self):
54 return json.dumps(
55 {u'CreateStackResponse':
56 {u'CreateStackResult': {u'StackId': self.stack_id},
57 u'ResponseMetadata': {u'RequestId': u'1'}}})
58
59 def test_create_stack_has_correct_request_params(self):
60 self.set_http_response(status_code=200)
61 api_response = self.service_connection.create_stack(
62 'stack_name', template_url='http://url',
63 template_body=SAMPLE_TEMPLATE,
64 parameters=[('KeyName', 'myKeyName')],
65 tags={'TagKey': 'TagValue'},
66 notification_arns=['arn:notify1', 'arn:notify2'],
67 disable_rollback=True,
68 timeout_in_minutes=20, capabilities=['CAPABILITY_IAM']
69 )
70 self.assertEqual(api_response, self.stack_id)
71 # These are the parameters that are actually sent to the CloudFormation
72 # service.
73 self.assert_request_parameters({
74 'Action': 'CreateStack',
75 'Capabilities.member.1': 'CAPABILITY_IAM',
76 'ContentType': 'JSON',
77 'DisableRollback': 'true',
78 'NotificationARNs.member.1': 'arn:notify1',
79 'NotificationARNs.member.2': 'arn:notify2',
80 'Parameters.member.1.ParameterKey': 'KeyName',
81 'Parameters.member.1.ParameterValue': 'myKeyName',
82 'Tags.member.1.Key': 'TagKey',
83 'Tags.member.1.Value': 'TagValue',
84 'StackName': 'stack_name',
85 'Version': '2010-05-15',
86 'TimeoutInMinutes': 20,
87 'TemplateBody': SAMPLE_TEMPLATE,
88 'TemplateURL': 'http://url',
89 })
90
91 # The test_create_stack_has_correct_request_params verified all of the
92 # params needed when making a create_stack service call. The rest of the
93 # tests for create_stack only verify specific parts of the params sent
94 # to CloudFormation.
95
96 def test_create_stack_with_minimum_args(self):
97 # This will fail in practice, but the API docs only require stack_name.
98 self.set_http_response(status_code=200)
99 api_response = self.service_connection.create_stack('stack_name')
100 self.assertEqual(api_response, self.stack_id)
101 self.assert_request_parameters({
102 'Action': 'CreateStack',
103 'ContentType': 'JSON',
104 'DisableRollback': 'false',
105 'StackName': 'stack_name',
106 'Version': '2010-05-15',
107 })
108
109 def test_create_stack_fails(self):
110 self.set_http_response(status_code=400, reason='Bad Request',
111 body='Invalid arg.')
112 with self.assertRaises(self.service_connection.ResponseError):
113 api_response = self.service_connection.create_stack(
114 'stack_name', template_body=SAMPLE_TEMPLATE,
115 parameters=[('KeyName', 'myKeyName')])
116
117
118 class TestCloudFormationUpdateStack(CloudFormationConnectionBase):
119 def default_body(self):
120 return json.dumps(
121 {u'UpdateStackResponse':
122 {u'UpdateStackResult': {u'StackId': self.stack_id},
123 u'ResponseMetadata': {u'RequestId': u'1'}}})
124
125 def test_update_stack_all_args(self):
126 self.set_http_response(status_code=200)
127 api_response = self.service_connection.update_stack(
128 'stack_name', template_url='http://url',
129 template_body=SAMPLE_TEMPLATE,
130 parameters=[('KeyName', 'myKeyName')],
131 tags={'TagKey': 'TagValue'},
132 notification_arns=['arn:notify1', 'arn:notify2'],
133 disable_rollback=True,
134 timeout_in_minutes=20
135 )
136 self.assert_request_parameters({
137 'Action': 'UpdateStack',
138 'ContentType': 'JSON',
139 'DisableRollback': 'true',
140 'NotificationARNs.member.1': 'arn:notify1',
141 'NotificationARNs.member.2': 'arn:notify2',
142 'Parameters.member.1.ParameterKey': 'KeyName',
143 'Parameters.member.1.ParameterValue': 'myKeyName',
144 'Tags.member.1.Key': 'TagKey',
145 'Tags.member.1.Value': 'TagValue',
146 'StackName': 'stack_name',
147 'Version': '2010-05-15',
148 'TimeoutInMinutes': 20,
149 'TemplateBody': SAMPLE_TEMPLATE,
150 'TemplateURL': 'http://url',
151 })
152
153 def test_update_stack_with_minimum_args(self):
154 self.set_http_response(status_code=200)
155 api_response = self.service_connection.update_stack('stack_name')
156 self.assertEqual(api_response, self.stack_id)
157 self.assert_request_parameters({
158 'Action': 'UpdateStack',
159 'ContentType': 'JSON',
160 'DisableRollback': 'false',
161 'StackName': 'stack_name',
162 'Version': '2010-05-15',
163 })
164
165 def test_update_stack_fails(self):
166 self.set_http_response(status_code=400, reason='Bad Request',
167 body='Invalid arg.')
168 with self.assertRaises(self.service_connection.ResponseError):
169 api_response = self.service_connection.update_stack(
170 'stack_name', template_body=SAMPLE_TEMPLATE,
171 parameters=[('KeyName', 'myKeyName')])
172
173
174 class TestCloudFormationDeleteStack(CloudFormationConnectionBase):
175 def default_body(self):
176 return json.dumps(
177 {u'DeleteStackResponse':
178 {u'ResponseMetadata': {u'RequestId': u'1'}}})
179
180 def test_delete_stack(self):
181 self.set_http_response(status_code=200)
182 api_response = self.service_connection.delete_stack('stack_name')
183 self.assertEqual(api_response, json.loads(self.default_body()))
184 self.assert_request_parameters({
185 'Action': 'DeleteStack',
186 'ContentType': 'JSON',
187 'StackName': 'stack_name',
188 'Version': '2010-05-15',
189 })
190
191 def test_delete_stack_fails(self):
192 self.set_http_response(status_code=400)
193 with self.assertRaises(self.service_connection.ResponseError):
194 api_response = self.service_connection.delete_stack('stack_name')
195
196
197 class TestCloudFormationDescribeStackResource(CloudFormationConnectionBase):
198 def default_body(self):
199 return json.dumps('fake server response')
200
201 def test_describe_stack_resource(self):
202 self.set_http_response(status_code=200)
203 api_response = self.service_connection.describe_stack_resource(
204 'stack_name', 'resource_id')
205 self.assertEqual(api_response, 'fake server response')
206 self.assert_request_parameters({
207 'Action': 'DescribeStackResource',
208 'ContentType': 'JSON',
209 'LogicalResourceId': 'resource_id',
210 'StackName': 'stack_name',
211 'Version': '2010-05-15',
212 })
213
214 def test_describe_stack_resource_fails(self):
215 self.set_http_response(status_code=400)
216 with self.assertRaises(self.service_connection.ResponseError):
217 api_response = self.service_connection.describe_stack_resource(
218 'stack_name', 'resource_id')
219
220
221 class TestCloudFormationGetTemplate(CloudFormationConnectionBase):
222 def default_body(self):
223 return json.dumps('fake server response')
224
225 def test_get_template(self):
226 self.set_http_response(status_code=200)
227 api_response = self.service_connection.get_template('stack_name')
228 self.assertEqual(api_response, 'fake server response')
229 self.assert_request_parameters({
230 'Action': 'GetTemplate',
231 'ContentType': 'JSON',
232 'StackName': 'stack_name',
233 'Version': '2010-05-15',
234 })
235
236
237 def test_get_template_fails(self):
238 self.set_http_response(status_code=400)
239 with self.assertRaises(self.service_connection.ResponseError):
240 api_response = self.service_connection.get_template('stack_name')
241
242
243 class TestCloudFormationGetStackevents(CloudFormationConnectionBase):
244 def default_body(self):
245 return """
246 <DescribeStackEventsResult>
247 <StackEvents>
248 <member>
249 <EventId>Event-1-Id</EventId>
250 <StackId>arn:aws:cfn:us-east-1:1:stack</StackId>
251 <StackName>MyStack</StackName>
252 <LogicalResourceId>MyStack</LogicalResourceId>
253 <PhysicalResourceId>MyStack_One</PhysicalResourceId>
254 <ResourceType>AWS::CloudFormation::Stack</ResourceType>
255 <Timestamp>2010-07-27T22:26:28Z</Timestamp>
256 <ResourceStatus>CREATE_IN_PROGRESS</ResourceStatus>
257 <ResourceStatusReason>User initiated</ResourceStatusReason>
258 </member>
259 <member>
260 <EventId>Event-2-Id</EventId>
261 <StackId>arn:aws:cfn:us-east-1:1:stack</StackId>
262 <StackName>MyStack</StackName>
263 <LogicalResourceId>MySG1</LogicalResourceId>
264 <PhysicalResourceId>MyStack_SG1</PhysicalResourceId>
265 <ResourceType>AWS::SecurityGroup</ResourceType>
266 <Timestamp>2010-07-27T22:28:28Z</Timestamp>
267 <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
268 </member>
269 </StackEvents>
270 </DescribeStackEventsResult>
271 """
272
273 def test_describe_stack_events(self):
274 self.set_http_response(status_code=200)
275 first, second = self.service_connection.describe_stack_events('stack_nam e', next_token='next_token')
276 self.assertEqual(first.event_id, 'Event-1-Id')
277 self.assertEqual(first.logical_resource_id, 'MyStack')
278 self.assertEqual(first.physical_resource_id, 'MyStack_One')
279 self.assertEqual(first.resource_properties, None)
280 self.assertEqual(first.resource_status, 'CREATE_IN_PROGRESS')
281 self.assertEqual(first.resource_status_reason, 'User initiated')
282 self.assertEqual(first.resource_type, 'AWS::CloudFormation::Stack')
283 self.assertEqual(first.stack_id, 'arn:aws:cfn:us-east-1:1:stack')
284 self.assertEqual(first.stack_name, 'MyStack')
285 self.assertIsNotNone(first.timestamp)
286
287 self.assertEqual(second.event_id, 'Event-2-Id')
288 self.assertEqual(second.logical_resource_id, 'MySG1')
289 self.assertEqual(second.physical_resource_id, 'MyStack_SG1')
290 self.assertEqual(second.resource_properties, None)
291 self.assertEqual(second.resource_status, 'CREATE_COMPLETE')
292 self.assertEqual(second.resource_status_reason, None)
293 self.assertEqual(second.resource_type, 'AWS::SecurityGroup')
294 self.assertEqual(second.stack_id, 'arn:aws:cfn:us-east-1:1:stack')
295 self.assertEqual(second.stack_name, 'MyStack')
296 self.assertIsNotNone(second.timestamp)
297
298 self.assert_request_parameters({
299 'Action': 'DescribeStackEvents',
300 'NextToken': 'next_token',
301 'StackName': 'stack_name',
302 'Version': '2010-05-15',
303 })
304
305
306 class TestCloudFormationDescribeStackResources(CloudFormationConnectionBase):
307 def default_body(self):
308 return """
309 <DescribeStackResourcesResult>
310 <StackResources>
311 <member>
312 <StackId>arn:aws:cfn:us-east-1:1:stack</StackId>
313 <StackName>MyStack</StackName>
314 <LogicalResourceId>MyDBInstance</LogicalResourceId>
315 <PhysicalResourceId>MyStack_DB1</PhysicalResourceId>
316 <ResourceType>AWS::DBInstance</ResourceType>
317 <Timestamp>2010-07-27T22:27:28Z</Timestamp>
318 <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
319 </member>
320 <member>
321 <StackId>arn:aws:cfn:us-east-1:1:stack</StackId>
322 <StackName>MyStack</StackName>
323 <LogicalResourceId>MyAutoScalingGroup</LogicalResourceId>
324 <PhysicalResourceId>MyStack_ASG1</PhysicalResourceId>
325 <ResourceType>AWS::AutoScalingGroup</ResourceType>
326 <Timestamp>2010-07-27T22:28:28Z</Timestamp>
327 <ResourceStatus>CREATE_IN_PROGRESS</ResourceStatus>
328 </member>
329 </StackResources>
330 </DescribeStackResourcesResult>
331 """
332
333 def test_describe_stack_resources(self):
334 self.set_http_response(status_code=200)
335 first, second = self.service_connection.describe_stack_resources(
336 'stack_name', 'logical_resource_id', 'physical_resource_id')
337 self.assertEqual(first.description, None)
338 self.assertEqual(first.logical_resource_id, 'MyDBInstance')
339 self.assertEqual(first.physical_resource_id, 'MyStack_DB1')
340 self.assertEqual(first.resource_status, 'CREATE_COMPLETE')
341 self.assertEqual(first.resource_status_reason, None)
342 self.assertEqual(first.resource_type, 'AWS::DBInstance')
343 self.assertEqual(first.stack_id, 'arn:aws:cfn:us-east-1:1:stack')
344 self.assertEqual(first.stack_name, 'MyStack')
345 self.assertIsNotNone(first.timestamp)
346
347 self.assertEqual(second.description, None)
348 self.assertEqual(second.logical_resource_id, 'MyAutoScalingGroup')
349 self.assertEqual(second.physical_resource_id, 'MyStack_ASG1')
350 self.assertEqual(second.resource_status, 'CREATE_IN_PROGRESS')
351 self.assertEqual(second.resource_status_reason, None)
352 self.assertEqual(second.resource_type, 'AWS::AutoScalingGroup')
353 self.assertEqual(second.stack_id, 'arn:aws:cfn:us-east-1:1:stack')
354 self.assertEqual(second.stack_name, 'MyStack')
355 self.assertIsNotNone(second.timestamp)
356
357 self.assert_request_parameters({
358 'Action': 'DescribeStackResources',
359 'LogicalResourceId': 'logical_resource_id',
360 'PhysicalResourceId': 'physical_resource_id',
361 'StackName': 'stack_name',
362 'Version': '2010-05-15',
363 })
364
365
366 class TestCloudFormationDescribeStacks(CloudFormationConnectionBase):
367 def default_body(self):
368 return """
369 <DescribeStacksResponse>
370 <DescribeStacksResult>
371 <Stacks>
372 <member>
373 <StackId>arn:aws:cfn:us-east-1:1:stack</StackId>
374 <StackStatus>CREATE_COMPLETE</StackStatus>
375 <StackName>MyStack</StackName>
376 <StackStatusReason/>
377 <Description>My Description</Description>
378 <CreationTime>2012-05-16T22:55:31Z</CreationTime>
379 <Capabilities>
380 <member>CAPABILITY_IAM</member>
381 </Capabilities>
382 <NotificationARNs>
383 <member>arn:aws:sns:region-name:account-name:topic-name</mem ber>
384 </NotificationARNs>
385 <DisableRollback>false</DisableRollback>
386 <Parameters>
387 <member>
388 <ParameterValue>MyValue</ParameterValue>
389 <ParameterKey>MyKey</ParameterKey>
390 </member>
391 </Parameters>
392 <Outputs>
393 <member>
394 <OutputValue>http://url/</OutputValue>
395 <Description>Server URL</Description>
396 <OutputKey>ServerURL</OutputKey>
397 </member>
398 </Outputs>
399 <Tags>
400 <member>
401 <Key>MyTagKey</Key>
402 <Value>MyTagValue</Value>
403 </member>
404 </Tags>
405 </member>
406 </Stacks>
407 </DescribeStacksResult>
408 <ResponseMetadata>
409 <RequestId>12345</RequestId>
410 </ResponseMetadata>
411 </DescribeStacksResponse>
412 """
413
414 def test_describe_stacks(self):
415 self.set_http_response(status_code=200)
416
417 stacks = self.service_connection.describe_stacks('MyStack')
418 self.assertEqual(len(stacks), 1)
419
420 stack = stacks[0]
421 self.assertEqual(stack.creation_time,
422 datetime(2012, 5, 16, 22, 55, 31))
423 self.assertEqual(stack.description, 'My Description')
424 self.assertEqual(stack.disable_rollback, True)
425 self.assertEqual(stack.stack_id, 'arn:aws:cfn:us-east-1:1:stack')
426 self.assertEqual(stack.stack_status, 'CREATE_COMPLETE')
427 self.assertEqual(stack.stack_name, 'MyStack')
428 self.assertEqual(stack.stack_name_reason, None)
429 self.assertEqual(stack.timeout_in_minutes, None)
430
431 self.assertEqual(len(stack.outputs), 1)
432 self.assertEqual(stack.outputs[0].description, 'Server URL')
433 self.assertEqual(stack.outputs[0].key, 'ServerURL')
434 self.assertEqual(stack.outputs[0].value, 'http://url/')
435
436 self.assertEqual(len(stack.parameters), 1)
437 self.assertEqual(stack.parameters[0].key, 'MyKey')
438 self.assertEqual(stack.parameters[0].value, 'MyValue')
439
440 self.assertEqual(len(stack.capabilities), 1)
441 self.assertEqual(stack.capabilities[0].value, 'CAPABILITY_IAM')
442
443 self.assertEqual(len(stack.notification_arns), 1)
444 self.assertEqual(stack.notification_arns[0].value, 'arn:aws:sns:region-n ame:account-name:topic-name')
445
446 self.assertEqual(len(stack.tags), 1)
447 self.assertEqual(stack.tags['MyTagKey'], 'MyTagValue')
448
449 self.assert_request_parameters({
450 'Action': 'DescribeStacks',
451 'StackName': 'MyStack',
452 'Version': '2010-05-15',
453 })
454
455
456 class TestCloudFormationListStackResources(CloudFormationConnectionBase):
457 def default_body(self):
458 return """
459 <ListStackResourcesResponse>
460 <ListStackResourcesResult>
461 <StackResourceSummaries>
462 <member>
463 <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
464 <LogicalResourceId>SampleDB</LogicalResourceId>
465 <LastUpdatedTimestamp>2011-06-21T20:25:57Z</LastUpdatedTimes tamp>
466 <PhysicalResourceId>My-db-ycx</PhysicalResourceId>
467 <ResourceType>AWS::RDS::DBInstance</ResourceType>
468 </member>
469 <member>
470 <ResourceStatus>CREATE_COMPLETE</ResourceStatus>
471 <LogicalResourceId>CPUAlarmHigh</LogicalResourceId>
472 <LastUpdatedTimestamp>2011-06-21T20:29:23Z</LastUpdatedTimes tamp>
473 <PhysicalResourceId>MyStack-CPUH-PF</PhysicalResourceId>
474 <ResourceType>AWS::CloudWatch::Alarm</ResourceType>
475 </member>
476 </StackResourceSummaries>
477 </ListStackResourcesResult>
478 <ResponseMetadata>
479 <RequestId>2d06e36c-ac1d-11e0-a958-f9382b6eb86b</RequestId>
480 </ResponseMetadata>
481 </ListStackResourcesResponse>
482 """
483
484 def test_list_stack_resources(self):
485 self.set_http_response(status_code=200)
486 resources = self.service_connection.list_stack_resources('MyStack',
487 next_token='next_t oken')
488 self.assertEqual(len(resources), 2)
489 self.assertEqual(resources[0].last_updated_timestamp,
490 datetime(2011, 6, 21, 20, 25, 57))
491 self.assertEqual(resources[0].logical_resource_id, 'SampleDB')
492 self.assertEqual(resources[0].physical_resource_id, 'My-db-ycx')
493 self.assertEqual(resources[0].resource_status, 'CREATE_COMPLETE')
494 self.assertEqual(resources[0].resource_status_reason, None)
495 self.assertEqual(resources[0].resource_type, 'AWS::RDS::DBInstance')
496
497 self.assertEqual(resources[1].last_updated_timestamp,
498 datetime(2011, 6, 21, 20, 29, 23))
499 self.assertEqual(resources[1].logical_resource_id, 'CPUAlarmHigh')
500 self.assertEqual(resources[1].physical_resource_id, 'MyStack-CPUH-PF')
501 self.assertEqual(resources[1].resource_status, 'CREATE_COMPLETE')
502 self.assertEqual(resources[1].resource_status_reason, None)
503 self.assertEqual(resources[1].resource_type, 'AWS::CloudWatch::Alarm')
504
505 self.assert_request_parameters({
506 'Action': 'ListStackResources',
507 'NextToken': 'next_token',
508 'StackName': 'MyStack',
509 'Version': '2010-05-15',
510 })
511
512
513 class TestCloudFormationListStacks(CloudFormationConnectionBase):
514 def default_body(self):
515 return """
516 <ListStacksResponse>
517 <ListStacksResult>
518 <StackSummaries>
519 <member>
520 <StackId>arn:aws:cfn:us-east-1:1:stack/Test1/aa</StackId>
521 <StackStatus>CREATE_IN_PROGRESS</StackStatus>
522 <StackName>vpc1</StackName>
523 <CreationTime>2011-05-23T15:47:44Z</CreationTime>
524 <TemplateDescription>My Description.</TemplateDescription>
525 </member>
526 </StackSummaries>
527 </ListStacksResult>
528 </ListStacksResponse>
529 """
530
531 def test_list_stacks(self):
532 self.set_http_response(status_code=200)
533 stacks = self.service_connection.list_stacks(['CREATE_IN_PROGRESS'],
534 next_token='next_token')
535 self.assertEqual(len(stacks), 1)
536 self.assertEqual(stacks[0].stack_id,
537 'arn:aws:cfn:us-east-1:1:stack/Test1/aa')
538 self.assertEqual(stacks[0].stack_status, 'CREATE_IN_PROGRESS')
539 self.assertEqual(stacks[0].stack_name, 'vpc1')
540 self.assertEqual(stacks[0].creation_time,
541 datetime(2011, 5, 23, 15, 47, 44))
542 self.assertEqual(stacks[0].deletion_time, None)
543 self.assertEqual(stacks[0].template_description, 'My Description.')
544
545 self.assert_request_parameters({
546 'Action': 'ListStacks',
547 'NextToken': 'next_token',
548 'StackStatusFilter.member.1': 'CREATE_IN_PROGRESS',
549 'Version': '2010-05-15',
550 })
551
552
553 class TestCloudFormationValidateTemplate(CloudFormationConnectionBase):
554 def default_body(self):
555 return """
556 <ValidateTemplateResponse xmlns="http://cloudformation.amazonaws.com /doc/2010-05-15/">
557 <ValidateTemplateResult>
558 <Description>My Description.</Description>
559 <Parameters>
560 <member>
561 <NoEcho>false</NoEcho>
562 <ParameterKey>InstanceType</ParameterKey>
563 <Description>Type of instance to launch</Description>
564 <DefaultValue>m1.small</DefaultValue>
565 </member>
566 <member>
567 <NoEcho>false</NoEcho>
568 <ParameterKey>KeyName</ParameterKey>
569 <Description>EC2 KeyPair</Description>
570 </member>
571 </Parameters>
572 </ValidateTemplateResult>
573 <ResponseMetadata>
574 <RequestId>0be7b6e8-e4a0-11e0-a5bd-9f8d5a7dbc91</RequestId>
575 </ResponseMetadata>
576 </ValidateTemplateResponse>
577 """
578
579 def test_validate_template(self):
580 self.set_http_response(status_code=200)
581 template = self.service_connection.validate_template(template_body=SAMPL E_TEMPLATE,
582 template_url='http://u rl')
583 self.assertEqual(template.description, 'My Description.')
584 self.assertEqual(len(template.template_parameters), 2)
585 param1, param2 = template.template_parameters
586 self.assertEqual(param1.default_value, 'm1.small')
587 self.assertEqual(param1.description, 'Type of instance to launch')
588 self.assertEqual(param1.no_echo, True)
589 self.assertEqual(param1.parameter_key, 'InstanceType')
590
591 self.assertEqual(param2.default_value, None)
592 self.assertEqual(param2.description, 'EC2 KeyPair')
593 self.assertEqual(param2.no_echo, True)
594 self.assertEqual(param2.parameter_key, 'KeyName')
595
596 self.assert_request_parameters({
597 'Action': 'ValidateTemplate',
598 'TemplateBody': SAMPLE_TEMPLATE,
599 'TemplateURL': 'http://url',
600 'Version': '2010-05-15',
601 })
602
603
604 if __name__ == '__main__':
605 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698