def test_create_resource_with_config_override_user_agent_extra(self): mock_bc_session = mock.Mock() loader = mock.Mock(spec=loaders.Loader) loader.determine_latest_version.return_value = '2014-11-02' loader.load_service_model.return_value = { 'resources': [], 'service': [], } mock_bc_session.get_component.return_value = loader session = Session(botocore_session=mock_bc_session) session.resource_factory.load_from_definition = mock.Mock() session.client = mock.Mock() config = Config(signature_version='v4', user_agent_extra='foo') session.resource('sqs', config=config) session.client.assert_called_with( 'sqs', aws_secret_access_key=None, aws_access_key_id=None, endpoint_url=None, use_ssl=True, aws_session_token=None, verify=None, region_name=None, api_version='2014-11-02', config=mock.ANY, ) client_config = session.client.call_args[1]['config'] assert client_config.user_agent_extra == 'foo' assert client_config.signature_version == 'v4'
def __init__(self, api_key=None, instance_id=None, iam_endpoint=None, cos_endpoint=None): self.cos_endpoint = cos_endpoint self.session = Session( ibm_api_key_id=api_key, ibm_service_instance_id=instance_id, ibm_auth_endpoint=iam_endpoint)
def test_get_available_partitions(self): bc_session = mock.Mock() bc_session.get_available_partitions.return_value = ['foo'] session = Session(botocore_session=bc_session) partitions = session.get_available_partitions() assert partitions == ['foo']
def test_get_available_services(self): bc_session = self.bc_session_cls.return_value session = Session() session.get_available_services() assert bc_session.get_available_services.called
def test_get_partition_for_region(self): bc_session = mock.Mock() bc_session.get_partition_for_region.return_value = 'baz' session = Session(botocore_session=bc_session) partition = session.get_partition_for_region('foo-bar-1') bc_session.get_partition_for_region.assert_called_with('foo-bar-1') assert partition == 'baz'
def test_get_available_services(self): bc_session = self.bc_session_cls.return_value session = Session() session.get_available_services() self.assertTrue(bc_session.get_available_services.called, 'Botocore session get_available_services not called')
def setUp(self): self.session = Session( aws_access_key_id='dummy', aws_secret_access_key='dummy', region_name='us-east-1', ) # Pick an arbitrary resource. self.s3_resource = self.session.resource('s3')
def setup_client_and_resource(self): self._write_models() self.loader = Loader(extra_search_paths=[self.root_dir]) self.botocore_session = ibm_botocore.session.get_session() self.botocore_session.register_component('data_loader', self.loader) self.session = Session(botocore_session=self.botocore_session, region_name='us-east-1') self.client = self.session.client('myservice', 'us-east-1') self.resource = self.session.resource('myservice', 'us-east-1')
def test_get_available_resources(self): mock_bc_session = mock.Mock() loader = mock.Mock(spec=loaders.Loader) loader.list_available_services.return_value = ['foo', 'bar'] mock_bc_session.get_component.return_value = loader session = Session(botocore_session=mock_bc_session) names = session.get_available_resources() assert names == ['foo', 'bar']
def test_get_available_regions(self): bc_session = mock.Mock() bc_session.get_available_regions.return_value = ['foo'] session = Session(botocore_session=bc_session) partitions = session.get_available_regions('myservice') bc_session.get_available_regions.assert_called_with( service_name='myservice', partition_name='aws', allow_non_regional=False) self.assertEqual(partitions, ['foo'])
def test_bad_resource_name_with_no_client_has_simple_err_msg(self): mock_bc_session = mock.Mock() loader = mock.Mock(spec=loaders.Loader) loader.load_service_model.side_effect = UnknownServiceError( service_name='foo', known_service_names='asdf') mock_bc_session.get_component.return_value = loader loader.list_available_services.return_value = ['good-resource'] mock_bc_session.get_available_services.return_value = ['good-client'] session = Session(botocore_session=mock_bc_session) with self.assertRaises(ResourceNotExistsError) as e: session.resource('bad-client') err_msg = str(e.exception) # Shouldn't mention anything about clients because # 'bad-client' it not a valid ibm_boto3.client(...) self.assertNotIn('ibm_boto3.client', err_msg)
def test_create_client_with_args(self): bc_session = self.bc_session_cls.return_value session = Session(region_name='us-east-1') session.client('sqs', region_name='us-west-2') bc_session.create_client.assert_called_with('sqs', aws_secret_access_key=None, aws_access_key_id=None, endpoint_url=None, use_ssl=True, aws_session_token=None, verify=None, region_name='us-west-2', api_version=None, config=None)
def test_all_collections_have_paginators_if_needed(): # If a collection relies on an operation that is paginated, it # will require a paginator to iterate through all of the resources # with the all() method. If there is no paginator, it will only # make it through the first page of results. So we need to make sure # if a collection looks like it uses a paginated operation then there # should be a paginator applied to it. botocore_session = ibm_botocore.session.get_session() session = Session(botocore_session=botocore_session) loader = botocore_session.get_component('data_loader') for service_name in session.get_available_resources(): client = session.client(service_name, region_name='us-east-1') json_resource_model = loader.load_service_model( service_name, 'resources-1') resource_defs = json_resource_model['resources'] resource_models = [] # Get the service resource model service_resource_model = ResourceModel(service_name, json_resource_model['service'], resource_defs) resource_models.append(service_resource_model) # Generate all of the resource models for a service for resource_name, resource_defintion in resource_defs.items(): resource_models.append( ResourceModel(resource_name, resource_defintion, resource_defs)) for resource_model in resource_models: # Iterate over all of the collections for each resource model # and ensure that the collection has a paginator if it needs one. for collection_model in resource_model.collections: yield (_assert_collection_has_paginator_if_needed, client, service_name, resource_name, collection_model)
def _collection_test_args(): ibm_botocore_session = ibm_botocore.session.get_session() session = Session(botocore_session=ibm_botocore_session) loader = ibm_botocore_session.get_component('data_loader') for service_name in session.get_available_resources(): client = session.client(service_name, region_name='us-east-1') json_resource_model = loader.load_service_model( service_name, 'resources-1' ) resource_defs = json_resource_model['resources'] resource_models = [] # Get the service resource model service_resource_model = ResourceModel( service_name, json_resource_model['service'], resource_defs ) resource_models.append(service_resource_model) # Generate all of the resource models for a service for resource_name, resource_defintion in resource_defs.items(): resource_models.append( ResourceModel(resource_name, resource_defintion, resource_defs) ) for resource_model in resource_models: # Iterate over all of the collections for each resource model # and ensure that the collection has a paginator if it needs one. for collection_model in resource_model.collections: yield (client, service_name, resource_name, collection_model)
def test_create_resource_latest_version(self): mock_bc_session = mock.Mock() loader = mock.Mock(spec=loaders.Loader) loader.determine_latest_version.return_value = '2014-11-02' loader.load_service_model.return_value = { 'resources': [], 'service': [], } mock_bc_session.get_component.return_value = loader session = Session(botocore_session=mock_bc_session) session.resource_factory.load_from_definition = mock.Mock() session.resource('sqs') loader.load_service_model.assert_called_with('sqs', 'resources-1', None)
def test_custom_session(self): bc_session = self.bc_session_cls() self.bc_session_cls.reset_mock() Session(botocore_session=bc_session) # No new session was created assert not self.bc_session_cls.called
def test_repr(self): bc_session = self.bc_session_cls.return_value bc_session.get_credentials.return_value.access_key = 'abc123' bc_session.get_config_variable.return_value = 'us-west-2' session = Session('abc123', region_name='us-west-2') assert repr(session) == 'Session(region_name=\'us-west-2\')'
def test_can_access_region_name(self): bc_session = self.bc_session_cls.return_value bc_session.get_config_variable.return_value = 'us-west-2' session = Session('abc123', region_name='us-west-2') bc_session.set_config_variable.assert_called_with( 'region', 'us-west-2') assert session.region_name == 'us-west-2'
def setup_default_session(**kwargs): """ Set up a default session, passing through any parameters to the session constructor. There is no need to call this unless you wish to pass custom parameters, because a default session will be created for you. """ global DEFAULT_SESSION DEFAULT_SESSION = Session(**kwargs)
def create_session(): global ibm_boto3_session if ibm_boto3_session is None: ibm_boto3_session = Session( aws_access_key_id='dummy', aws_secret_access_key='dummy', region_name='us-east-1', ) return ibm_boto3_session
def test_profile_can_be_set(self): bc_session = self.bc_session_cls.return_value session = Session(profile_name='foo') bc_session.set_config_variable.assert_called_with('profile', 'foo') bc_session.profile = 'foo' # We should also be able to read the value assert session.profile_name == 'foo'
def test_bad_resource_name(self): mock_bc_session = mock.Mock() loader = mock.Mock(spec=loaders.Loader) loader.load_service_model.side_effect = UnknownServiceError( service_name='foo', known_service_names='asdf') mock_bc_session.get_component.return_value = loader loader.list_available_services.return_value = ['good-resource'] mock_bc_session.get_available_services.return_value = ['sqs'] session = Session(botocore_session=mock_bc_session) with self.assertRaises(ResourceNotExistsError) as e: session.resource('sqs') err_msg = str(e.exception) # 1. should say the resource doesn't exist. self.assertIn('resource does not exist', err_msg) self.assertIn('sqs', err_msg) # 2. Should list available resources you can choose. self.assertIn('good-resource', err_msg) # 3. Should list client if available. self.assertIn('client', err_msg)
def test_user_agent_extra(self): # This test is the same as above, but includes custom extra content # which must still be in the final modified user-agent. bc_session = self.bc_session_cls.return_value bc_session.user_agent_name = 'ibm-cos-sdk-python-core' bc_session.user_agent_version = '0.68.0' bc_session.user_agent_extra = 'foo' Session(botocore_session=bc_session) assert bc_session.user_agent_extra == 'foo ibm-cos-sdk-python/0.68.0'
def test_can_get_credentials(self): access_key = 'foo' secret_key = 'bar' token = 'baz' creds = mock.Mock() creds.access_key = access_key creds.secret_key = secret_key creds.token = token bc_session = self.bc_session_cls.return_value bc_session.get_credentials.return_value = creds session = Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key, aws_session_token=token) credentials = session.get_credentials() self.assertEqual(credentials.access_key, access_key) self.assertEqual(credentials.secret_key, secret_key) self.assertEqual(credentials.token, token)
def test_custom_user_agent(self): # This test ensures that a customized user-agent is left untouched. bc_session = self.bc_session_cls.return_value bc_session.user_agent_name = 'Custom' bc_session.user_agent_version = '1.0' bc_session.user_agent_extra = '' Session(botocore_session=bc_session) assert bc_session.user_agent_name == 'Custom' assert bc_session.user_agent_version == '1.0' assert bc_session.user_agent_extra == ''
def test_credentials_can_be_set(self): bc_session = self.bc_session_cls.return_value # Set values in constructor Session( aws_access_key_id='key', aws_secret_access_key='secret', aws_session_token='token', ) assert self.bc_session_cls.called assert bc_session.set_credentials.called bc_session.set_credentials.assert_called_with('key', 'secret', 'token')
def test_user_agent(self): # Here we get the underlying Botocore session, create a Boto3 # session, and ensure that the user-agent is modified as expected bc_session = self.bc_session_cls.return_value bc_session.user_agent_name = 'ibm-cos-sdk-python-core' bc_session.user_agent_version = '0.68.0' bc_session.user_agent_extra = '' Session(botocore_session=bc_session) assert bc_session.user_agent_name == 'ibm-cos-sdk-python' assert bc_session.user_agent_version == __version__ assert bc_session.user_agent_extra == 'ibm-cos-sdk-python/0.68.0'
def test_credentials_can_be_set(self): bc_session = self.bc_session_cls.return_value # Set values in constructor Session(aws_access_key_id='key', aws_secret_access_key='secret', aws_session_token='token') self.assertTrue(self.bc_session_cls.called, 'Botocore session was not created') self.assertTrue( bc_session.set_credentials.called, 'Botocore session set_credentials not called from constructor') bc_session.set_credentials.assert_called_with('key', 'secret', 'token')
class TestCollection(unittest.TestCase): def setUp(self): self.session = Session(aws_access_key_id='dummy', aws_secret_access_key='dummy', region_name='us-east-1') # Pick an arbitrary resource. self.s3_resource = self.session.resource('s3') def test_can_use_collection_methods(self): self.assertIsInstance(self.s3_resource.instances.all(), ResourceCollection) def test_can_chain_methods(self): self.assertIsInstance(self.s3_resource.instances.all().page_size(5), ResourceCollection)
def test_arguments_not_required(self): Session() assert self.bc_session_cls.called