Merge pull request #736 from okomestudio/ts/botocore_update
Remove botocore version pinning
This commit is contained in:
		
						commit
						721d1b3a3f
					
				| @ -1,6 +1,7 @@ | |||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
| import datetime | import datetime | ||||||
| import json | import json | ||||||
|  | import logging | ||||||
| import re | import re | ||||||
| 
 | 
 | ||||||
| import pytz | import pytz | ||||||
| @ -18,6 +19,9 @@ from moto.compat import OrderedDict | |||||||
| from moto.core.utils import camelcase_to_underscores, method_names_from_class | from moto.core.utils import camelcase_to_underscores, method_names_from_class | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | log = logging.getLogger(__name__) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def _decode_dict(d): | def _decode_dict(d): | ||||||
|     decoded = {} |     decoded = {} | ||||||
|     for key, value in d.items(): |     for key, value in d.items(): | ||||||
| @ -550,11 +554,20 @@ def xml_to_json_response(service_spec, operation, xml, result_node=None): | |||||||
| 
 | 
 | ||||||
|         od = OrderedDict() |         od = OrderedDict() | ||||||
|         for k, v in value.items(): |         for k, v in value.items(): | ||||||
|             if k.startswith('@') or v is None: |             if k.startswith('@'): | ||||||
|  |                 continue | ||||||
|  | 
 | ||||||
|  |             if k not in spec: | ||||||
|  |                 # this can happen when with an older version of | ||||||
|  |                 # botocore for which the node in XML template is not | ||||||
|  |                 # defined in service spec. | ||||||
|  |                 log.warning('Field %s is not defined by the botocore version in use', k) | ||||||
|                 continue |                 continue | ||||||
| 
 | 
 | ||||||
|             if spec[k]['type'] == 'list': |             if spec[k]['type'] == 'list': | ||||||
|                 if len(spec[k]['member']) == 1: |                 if v is None: | ||||||
|  |                     od[k] = [] | ||||||
|  |                 elif len(spec[k]['member']) == 1: | ||||||
|                     if isinstance(v['member'], list): |                     if isinstance(v['member'], list): | ||||||
|                         od[k] = transform(v['member'], spec[k]['member']) |                         od[k] = transform(v['member'], spec[k]['member']) | ||||||
|                     else: |                     else: | ||||||
| @ -566,9 +579,20 @@ def xml_to_json_response(service_spec, operation, xml, result_node=None): | |||||||
|                 else: |                 else: | ||||||
|                     raise ValueError('Malformatted input') |                     raise ValueError('Malformatted input') | ||||||
|             elif spec[k]['type'] == 'map': |             elif spec[k]['type'] == 'map': | ||||||
|                 key = from_str(v['entry']['key'], spec[k]['key']) |                 if v is None: | ||||||
|                 val = from_str(v['entry']['value'], spec[k]['value']) |                     od[k] = {} | ||||||
|                 od[k] = {key: val} |                 else: | ||||||
|  |                     items = ([v['entry']] if not isinstance(v['entry'], list) else | ||||||
|  |                              v['entry']) | ||||||
|  |                     for item in items: | ||||||
|  |                         key = from_str(item['key'], spec[k]['key']) | ||||||
|  |                         val = from_str(item['value'], spec[k]['value']) | ||||||
|  |                         if k not in od: | ||||||
|  |                             od[k] = {} | ||||||
|  |                         od[k][key] = val | ||||||
|  |             else: | ||||||
|  |                 if v is None: | ||||||
|  |                     od[k] = None | ||||||
|                 else: |                 else: | ||||||
|                     od[k] = transform(v, spec[k]) |                     od[k] = transform(v, spec[k]) | ||||||
|         return od |         return od | ||||||
|  | |||||||
| @ -26,12 +26,19 @@ class FakeBootstrapAction(object): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class FakeInstanceGroup(object): | class FakeInstanceGroup(object): | ||||||
|     def __init__(self, instance_count, instance_role, instance_type, market, name, |     def __init__(self, instance_count, instance_role, instance_type, | ||||||
|                  id=None, bid_price=None): |                  market='ON_DEMAND', name=None, id=None, bid_price=None): | ||||||
|         self.id = id or random_instance_group_id() |         self.id = id or random_instance_group_id() | ||||||
| 
 | 
 | ||||||
|         self.bid_price = bid_price |         self.bid_price = bid_price | ||||||
|         self.market = market |         self.market = market | ||||||
|  |         if name is None: | ||||||
|  |             if instance_role == 'MASTER': | ||||||
|  |                 name = 'master' | ||||||
|  |             elif instance_role == 'CORE': | ||||||
|  |                 name = 'slave' | ||||||
|  |             else: | ||||||
|  |                 name = 'Task instance group' | ||||||
|         self.name = name |         self.name = name | ||||||
|         self.num_instances = instance_count |         self.num_instances = instance_count | ||||||
|         self.role = instance_role |         self.role = instance_role | ||||||
|  | |||||||
| @ -5,21 +5,6 @@ sure==1.2.24 | |||||||
| coverage | coverage | ||||||
| freezegun | freezegun | ||||||
| flask | flask | ||||||
| # botocore 1.4.29 breaks the following tests: | boto3>=1.3.1 | ||||||
| # test_nat_gateway.test_delete_nat_gateway | botocore>=1.4.28 | ||||||
| # test `list -> create -> list -> get -> delete -> list` integration |  | ||||||
| # test_lambda.test_get_function |  | ||||||
| # test_lambda.test_delete_function |  | ||||||
| # test_lambda.test_create_function_from_zipfile |  | ||||||
| # test_lambda.test_create_function_from_aws_bucket |  | ||||||
| # test_apigateway.test_integrations |  | ||||||
| # test_apigateway.test_integration_response |  | ||||||
| # test_apigateway.test_deployment |  | ||||||
| # test_apigateway.test_create_resource |  | ||||||
| # test_apigateway.test_create_method_response |  | ||||||
| # test_apigateway.test_create_method |  | ||||||
| # test_apigateway.test_child_resource |  | ||||||
| # so we need to pin a boto3 and botocore revision pair that we know works |  | ||||||
| boto3==1.3.1 |  | ||||||
| botocore==1.4.28 |  | ||||||
| six | six | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ def test_create_resource(): | |||||||
|         resourceId=root_id, |         resourceId=root_id, | ||||||
|     ) |     ) | ||||||
|     root_resource['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     root_resource['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     root_resource['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     root_resource.should.equal({ |     root_resource.should.equal({ | ||||||
|         'path': '/', |         'path': '/', | ||||||
|         'id': root_id, |         'id': root_id, | ||||||
| @ -137,6 +138,7 @@ def test_child_resource(): | |||||||
|         resourceId=tags_id, |         resourceId=tags_id, | ||||||
|     ) |     ) | ||||||
|     child_resource['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     child_resource['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     child_resource['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     child_resource.should.equal({ |     child_resource.should.equal({ | ||||||
|         'path': '/users/tags', |         'path': '/users/tags', | ||||||
|         'pathPart': 'tags', |         'pathPart': 'tags', | ||||||
| @ -173,6 +175,7 @@ def test_create_method(): | |||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'httpMethod': 'GET', |         'httpMethod': 'GET', | ||||||
|         'authorizationType': 'none', |         'authorizationType': 'none', | ||||||
| @ -212,6 +215,7 @@ def test_create_method_response(): | |||||||
|         statusCode='200', |         statusCode='200', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
|         'statusCode': '200' |         'statusCode': '200' | ||||||
| @ -224,6 +228,7 @@ def test_create_method_response(): | |||||||
|         statusCode='200', |         statusCode='200', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
|         'statusCode': '200' |         'statusCode': '200' | ||||||
| @ -236,6 +241,7 @@ def test_create_method_response(): | |||||||
|         statusCode='200', |         statusCode='200', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({'ResponseMetadata': {'HTTPStatusCode': 200}}) |     response.should.equal({'ResponseMetadata': {'HTTPStatusCode': 200}}) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -273,6 +279,7 @@ def test_integrations(): | |||||||
|         uri='http://httpbin.org/robots.txt', |         uri='http://httpbin.org/robots.txt', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
|         'httpMethod': 'GET', |         'httpMethod': 'GET', | ||||||
| @ -294,6 +301,7 @@ def test_integrations(): | |||||||
|         httpMethod='GET' |         httpMethod='GET' | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
|         'httpMethod': 'GET', |         'httpMethod': 'GET', | ||||||
| @ -314,6 +322,7 @@ def test_integrations(): | |||||||
|         resourceId=root_id, |         resourceId=root_id, | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response['resourceMethods']['GET']['methodIntegration'].should.equal({ |     response['resourceMethods']['GET']['methodIntegration'].should.equal({ | ||||||
|         'httpMethod': 'GET', |         'httpMethod': 'GET', | ||||||
|         'integrationResponses': { |         'integrationResponses': { | ||||||
| @ -363,6 +372,7 @@ def test_integrations(): | |||||||
|         requestTemplates=templates |         requestTemplates=templates | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response['ResponseMetadata'].should.equal({'HTTPStatusCode': 200}) |     response['ResponseMetadata'].should.equal({'HTTPStatusCode': 200}) | ||||||
| 
 | 
 | ||||||
|     response = client.get_integration( |     response = client.get_integration( | ||||||
| @ -416,6 +426,7 @@ def test_integration_response(): | |||||||
|         selectionPattern='foobar', |         selectionPattern='foobar', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'statusCode': '200', |         'statusCode': '200', | ||||||
|         'selectionPattern': 'foobar', |         'selectionPattern': 'foobar', | ||||||
| @ -432,6 +443,7 @@ def test_integration_response(): | |||||||
|         statusCode='200', |         statusCode='200', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'statusCode': '200', |         'statusCode': '200', | ||||||
|         'selectionPattern': 'foobar', |         'selectionPattern': 'foobar', | ||||||
| @ -447,6 +459,7 @@ def test_integration_response(): | |||||||
|         httpMethod='GET', |         httpMethod='GET', | ||||||
|     ) |     ) | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response['methodIntegration']['integrationResponses'].should.equal({ |     response['methodIntegration']['integrationResponses'].should.equal({ | ||||||
|         '200': { |         '200': { | ||||||
|             'responseTemplates': { |             'responseTemplates': { | ||||||
| @ -495,6 +508,7 @@ def test_update_stage_configuration(): | |||||||
|     ) |     ) | ||||||
|     response.pop('createdDate',None) # createdDate is hard to match against, remove it |     response.pop('createdDate',None) # createdDate is hard to match against, remove it | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'id': deployment_id, |         'id': deployment_id, | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
| @ -658,6 +672,7 @@ def test_create_stage(): | |||||||
|     ) |     ) | ||||||
|     response.pop('createdDate',None) # createdDate is hard to match against, remove it |     response.pop('createdDate',None) # createdDate is hard to match against, remove it | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'id': deployment_id, |         'id': deployment_id, | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
| @ -677,6 +692,7 @@ def test_create_stage(): | |||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
| 
 | 
 | ||||||
|     response['items'][0].pop('createdDate') |     response['items'][0].pop('createdDate') | ||||||
|     response['items'][1].pop('createdDate') |     response['items'][1].pop('createdDate') | ||||||
| @ -688,6 +704,7 @@ def test_create_stage(): | |||||||
|     response = client.create_stage(restApiId=api_id,stageName=new_stage_name,deploymentId=deployment_id2) |     response = client.create_stage(restApiId=api_id,stageName=new_stage_name,deploymentId=deployment_id2) | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
| 
 | 
 | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'stageName':new_stage_name, |         'stageName':new_stage_name, | ||||||
| @ -712,6 +729,7 @@ def test_create_stage(): | |||||||
|     }) |     }) | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
| 
 | 
 | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'stageName':new_stage_name_with_vars, |         'stageName':new_stage_name_with_vars, | ||||||
| @ -737,6 +755,7 @@ def test_create_stage(): | |||||||
|     }, cacheClusterEnabled=True,description="hello moto") |     }, cacheClusterEnabled=True,description="hello moto") | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
| 
 | 
 | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'stageName':new_stage_name, |         'stageName':new_stage_name, | ||||||
| @ -762,6 +781,7 @@ def test_create_stage(): | |||||||
|     }, cacheClusterEnabled=True,cacheClusterSize="1.6",description="hello moto") |     }, cacheClusterEnabled=True,cacheClusterSize="1.6",description="hello moto") | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
| 
 | 
 | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'stageName':new_stage_name, |         'stageName':new_stage_name, | ||||||
| @ -807,6 +827,7 @@ def test_deployment(): | |||||||
|     ) |     ) | ||||||
|     response.pop('createdDate',None) # createdDate is hard to match against, remove it |     response.pop('createdDate',None) # createdDate is hard to match against, remove it | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'id': deployment_id, |         'id': deployment_id, | ||||||
|         'ResponseMetadata': {'HTTPStatusCode': 200}, |         'ResponseMetadata': {'HTTPStatusCode': 200}, | ||||||
|  | |||||||
| @ -57,6 +57,7 @@ def test_delete_nat_gateway(): | |||||||
|     response = conn.delete_nat_gateway(NatGatewayId=nat_gateway_id) |     response = conn.delete_nat_gateway(NatGatewayId=nat_gateway_id) | ||||||
| 
 | 
 | ||||||
|     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it |     response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it | ||||||
|  |     response['ResponseMetadata'].pop('RetryAttempts', None) | ||||||
|     response.should.equal({ |     response.should.equal({ | ||||||
|         'NatGatewayId': nat_gateway_id, |         'NatGatewayId': nat_gateway_id, | ||||||
|         'ResponseMetadata': { |         'ResponseMetadata': { | ||||||
|  | |||||||
| @ -46,6 +46,8 @@ def test_describe_cluster(): | |||||||
|             'Configurations.member.1.Classification': 'yarn-site', |             'Configurations.member.1.Classification': 'yarn-site', | ||||||
|             'Configurations.member.1.Properties.entry.1.key': 'someproperty', |             'Configurations.member.1.Properties.entry.1.key': 'someproperty', | ||||||
|             'Configurations.member.1.Properties.entry.1.value': 'somevalue', |             'Configurations.member.1.Properties.entry.1.value': 'somevalue', | ||||||
|  |             'Configurations.member.1.Properties.entry.2.key': 'someotherproperty', | ||||||
|  |             'Configurations.member.1.Properties.entry.2.value': 'someothervalue', | ||||||
|             'Instances.EmrManagedMasterSecurityGroup': 'master-security-group', |             'Instances.EmrManagedMasterSecurityGroup': 'master-security-group', | ||||||
|             'Instances.Ec2SubnetId': 'subnet-8be41cec', |             'Instances.Ec2SubnetId': 'subnet-8be41cec', | ||||||
|         }, |         }, | ||||||
|  | |||||||
| @ -63,7 +63,8 @@ def test_describe_cluster(): | |||||||
|     args['Applications'] = [{'Name': 'Spark', 'Version': '2.4.2'}] |     args['Applications'] = [{'Name': 'Spark', 'Version': '2.4.2'}] | ||||||
|     args['Configurations'] = [ |     args['Configurations'] = [ | ||||||
|         {'Classification': 'yarn-site', |         {'Classification': 'yarn-site', | ||||||
|          'Properties': {'someproperty': 'somevalue'}}] |          'Properties': {'someproperty': 'somevalue', | ||||||
|  |                         'someotherproperty': 'someothervalue'}}] | ||||||
|     args['Instances']['AdditionalMasterSecurityGroups'] = ['additional-master'] |     args['Instances']['AdditionalMasterSecurityGroups'] = ['additional-master'] | ||||||
|     args['Instances']['AdditionalSlaveSecurityGroups'] = ['additional-slave'] |     args['Instances']['AdditionalSlaveSecurityGroups'] = ['additional-slave'] | ||||||
|     args['Instances']['Ec2KeyName'] = 'mykey' |     args['Instances']['Ec2KeyName'] = 'mykey' | ||||||
| @ -232,8 +233,8 @@ def test_describe_job_flow(): | |||||||
|     jf['LogUri'].should.equal(args['LogUri']) |     jf['LogUri'].should.equal(args['LogUri']) | ||||||
|     jf['Name'].should.equal(args['Name']) |     jf['Name'].should.equal(args['Name']) | ||||||
|     jf['ServiceRole'].should.equal(args['ServiceRole']) |     jf['ServiceRole'].should.equal(args['ServiceRole']) | ||||||
|     jf.shouldnt.have.key('Steps') |     jf['Steps'].should.equal([]) | ||||||
|     jf.shouldnt.have.key('SupportedProducts') |     jf['SupportedProducts'].should.equal([]) | ||||||
|     jf['VisibleToAllUsers'].should.equal(True) |     jf['VisibleToAllUsers'].should.equal(True) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -320,7 +321,7 @@ def test_run_job_flow(): | |||||||
|     resp['LogUri'].should.equal(args['LogUri']) |     resp['LogUri'].should.equal(args['LogUri']) | ||||||
|     resp['VisibleToAllUsers'].should.equal(args['VisibleToAllUsers']) |     resp['VisibleToAllUsers'].should.equal(args['VisibleToAllUsers']) | ||||||
|     resp['Instances']['NormalizedInstanceHours'].should.equal(0) |     resp['Instances']['NormalizedInstanceHours'].should.equal(0) | ||||||
|     resp.shouldnt.have.key('Steps') |     resp['Steps'].should.equal([]) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @mock_emr | @mock_emr | ||||||
| @ -445,10 +446,11 @@ def test_bootstrap_actions(): | |||||||
|         {'Name': 'bs1', |         {'Name': 'bs1', | ||||||
|          'ScriptBootstrapAction': { |          'ScriptBootstrapAction': { | ||||||
|              'Args': ['arg1', 'arg2'], |              'Args': ['arg1', 'arg2'], | ||||||
|              'Path': 'path/to/script'}}, |              'Path': 's3://path/to/script'}}, | ||||||
|         {'Name': 'bs2', |         {'Name': 'bs2', | ||||||
|          'ScriptBootstrapAction': { |          'ScriptBootstrapAction': { | ||||||
|              'Path': 'path/to/anotherscript'}} |              'Args': [], | ||||||
|  |              'Path': 's3://path/to/anotherscript'}} | ||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
|     client = boto3.client('emr', region_name='us-east-1') |     client = boto3.client('emr', region_name='us-east-1') | ||||||
| @ -658,4 +660,4 @@ def test_tags(): | |||||||
| 
 | 
 | ||||||
|     client.remove_tags(ResourceId=cluster_id, TagKeys=[t['Key'] for t in input_tags]) |     client.remove_tags(ResourceId=cluster_id, TagKeys=[t['Key'] for t in input_tags]) | ||||||
|     resp = client.describe_cluster(ClusterId=cluster_id)['Cluster'] |     resp = client.describe_cluster(ClusterId=cluster_id)['Cluster'] | ||||||
|     resp.shouldnt.have.key('Tags') |     resp['Tags'].should.equal([]) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user