def _test__handle_modify(change_attributes=False, change_bucket_info=False): current_attributes = dict( name='Example', bucket_info=dict(bucket_type=portal_enum.BucketType.AWS, bucket='ctera_bucket', direct=True, access_key='ACCESS_KEY', secret_key='SECRET', endpoint='s3.example.com', https=True), read_only=False, dedicated_to='Main', ) desired_attributes = copy.deepcopy(current_attributes) if change_attributes: if change_bucket_info: desired_attributes['bucket_info']['https'] = False else: desired_attributes['read_only'] = True storage_node = ctera_portal_storage_node.CteraPortalStorageNode() storage_node.parameters = desired_attributes storage_node._handle_modify(current_attributes) if change_attributes: if change_bucket_info: storage_node._ctera_portal.buckets.modify.assert_not_called() else: storage_node._ctera_portal.buckets.modify.assert_called_with( desired_attributes['name'], read_only=desired_attributes['read_only'])
def test__handle_create(self): parameters = dict( name='Example', bucket_info=dict(bucket_type=portal_enum.BucketType.AWS, bucket='ctera_bucket', direct=True, access_key='ACCESS_KEY', secret_key='SECRET', endpoint='s3.example.com', https=None), read_only=True, dedicated_to='Main', ) expected_params = copy.deepcopy(parameters) expected_params['bucket'] = mock.ANY expected_params.pop('bucket_info') storage_node = ctera_portal_storage_node.CteraPortalStorageNode() storage_node.parameters = parameters storage_node._handle_create() storage_node._ctera_portal.buckets.add.assert_called_with( **expected_params) self._verify_bucket_info( parameters['bucket_info'], storage_node._ctera_portal.buckets.add.call_args[1]['bucket'])
def _test_ensure_absent(is_present): name = 'example' storage_node = ctera_portal_storage_node.CteraPortalStorageNode() storage_node.parameters = dict(name=name) storage_node._ensure_absent( storage_node.parameters if is_present else None) if is_present: storage_node._ctera_portal.buckets.delete.assert_called_once_with( name) else: storage_node._ctera_portal.buckets.delete.assert_not_called()
def _test_ensure_present(is_present): storage_node = ctera_portal_storage_node.CteraPortalStorageNode() storage_node._handle_create = mock.MagicMock() storage_node._handle_modify = mock.MagicMock() storage_node._ensure_present( {'name': 'example'} if is_present else None) if is_present: storage_node._handle_modify.assert_called_once_with(mock.ANY) storage_node._handle_create.assert_not_called() else: storage_node._handle_create.assert_called_once_with() storage_node._handle_modify.assert_not_called()
def _test__execute(self, is_present): storage_node = ctera_portal_storage_node.CteraPortalStorageNode() if is_present: storage_node.parameters = dict(state='present', bucket_info=dict(bucket_type='AWS')) else: storage_node.parameters = dict(state='absent') storage_node._get_storage_node = mock.MagicMock(return_value=dict()) storage_node._ensure_present = mock.MagicMock() storage_node._ensure_absent = mock.MagicMock() storage_node._execute() if is_present: storage_node._ensure_present.assert_called_once_with(mock.ANY) self.assertEqual( storage_node.parameters['bucket_info']['bucket_type'], portal_enum.BucketType.AWS) storage_node._ensure_absent.assert_not_called() else: storage_node._ensure_absent.assert_called_once_with(mock.ANY) storage_node._ensure_present.assert_not_called()
def test_get_storage_node_exists(self): expected_storage_node_dict = dict( name='Example', bucket_info=dict(bucket_type=portal_enum.BucketType.AWS, bucket='ctera_bucket', direct=True, access_key='ACCESS_KEY', secret_key='SECRET', endpoint='s3.example.com', https=True), read_only=True, dedicated_to='Main', ) storage_node_obj_dict = copy.deepcopy(expected_storage_node_dict) storage_node_obj_dict['readOnly'] = storage_node_obj_dict.pop( 'read_only') storage_node_obj_dict['dedicatedPortal'] = storage_node_obj_dict.pop( 'dedicated_to') storage_node_obj_dict['storage'] = storage_node_obj_dict[ 'bucket_info']['bucket_type'] storage_node_obj_dict['bucket'] = storage_node_obj_dict['bucket_info'][ 'bucket'] storage_node_obj_dict['directUpload'] = storage_node_obj_dict[ 'bucket_info']['direct'] storage_node_obj_dict['awsAccessKey'] = storage_node_obj_dict[ 'bucket_info']['access_key'] storage_node_obj_dict['awsSecretKey'] = storage_node_obj_dict[ 'bucket_info']['secret_key'] storage_node_obj_dict['s3Endpoint'] = storage_node_obj_dict[ 'bucket_info']['endpoint'] storage_node_obj_dict['httpsOnly'] = storage_node_obj_dict[ 'bucket_info']['https'] storage_node_obj_dict.pop('bucket_info') storage_node = ctera_portal_storage_node.CteraPortalStorageNode() storage_node.parameters = dict(name=expected_storage_node_dict['name']) storage_node._ctera_portal.buckets.get = mock.MagicMock( return_value=munch.Munch(storage_node_obj_dict)) self.assertDictEqual(expected_storage_node_dict, storage_node._get_storage_node())
def test__get_storage_node_doesnt_exist(self): storage_node = ctera_portal_storage_node.CteraPortalStorageNode() storage_node.parameters = dict(name='example') storage_node._ctera_portal.buckets.get = mock.MagicMock( side_effect=CTERAException(response=munch.Munch(code=404))) self.assertIsNone(storage_node._get_storage_node())