ranger/orm/tests/unit/ims/logic/test_image_logic.py
st6218 f9ce6832f2 Refactor uuid handling for Ranger service resources
This commit provides the following uuid management:

(1) Remove uuid record from database after the uuid owned by
a Ranger service (cms, fms, ims) resource is deleted.

(2) Remove stale uuid record from database when such
record is inadvertently created during unsuccessful Ranger
service resource creation.

(3) Add authentication for uuidgen service delete uuid API.

Change-Id: Ifebd68851ff6c0996e7b19d331f4dd99682bd7d2
2020-05-08 11:31:58 -07:00

703 lines
31 KiB
Python
Executable File

from orm.common.orm_common.utils import utils
from orm.services.image_manager.ims.logic import image_logic
from orm.services.image_manager.ims.persistency.sql_alchemy.db_models import Image
from orm.services.image_manager.ims.persistency.wsme import models
from orm.tests.unit.ims import FunctionalTest
import mock
class RDSGetStatus():
def __init__(self, status_code=200):
self.status_code = status_code
def json(self):
return {'status': 'Success'}
class ImageTest():
def __init__(self, id=None, status=None, regions=[], min_ram=None,
customers=[]):
self.id = id
self.status = status
self.regions = regions
self.min_ram = min_ram
self.created_at = "12345678"
self.updated_at = "12345678"
self.customers = customers
def to_db_model(self):
return ImageTest()
def validate_model(self, context=None):
pass
def validate_update(self, sql_image=None, new_image=None):
pass
class ImageWrapperTest():
def __init__(self, image=ImageTest(id=1, status='')):
self.image = image
def to_db_model(self):
return ImageWrapperTest()
def validate_model(self, context=None):
pass
class MyError(Exception):
def __init__(self, message=None):
self.message = message
class RdsResponse(object):
"""class."""
def __init__(self):
self.status_code = 200
def json(self):
return {'status': 'Success'}
resolved_regions = [{'type': 'single', 'name': 'rdm1'}]
visibility = "private"
regions = []
image_status_dict = {'regions': [{
'status': 'Submitted',
'resource_id': 'edf1a8152b974eb28a6f4aa3dee3190d',
'timestamp': 1471954276950,
'region': 'rdm1',
'ord_notifier_id': '',
'ord_transaction_id': 'b18836a0-692a-11e6-82f3-005056a5129b',
'error_code': '',
'error_msg': '',
}], 'status': 'Pending'}
class TestImageLogic(FunctionalTest):
@mock.patch.object(image_logic, 'di')
def test_get_image_by_uuid_image_not_found(self, mock_di):
_, mock_data_manager = \
get_data_manager_mock(mock_sql_image=None)
mock_di.resolver.unpack.return_value = (mock_data_manager)
try:
image_logic.get_image_by_uuid('te')
except image_logic.ErrorStatus as e:
self.assertEqual(e.status_code, 404)
@mock.patch.object(utils, 'get_resource_status_from_db')
@mock.patch.object(image_logic.ImsUtils, 'get_server_links',
return_value=["ip", "path"])
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_get_image_by_uuid_image_no_status(
self, mock_image, mock_di, mock_links, mock_get_resource):
_, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = (mock_data_manager)
mock_image.from_db_model.return_value = ImageWrapperTest()
mock_get_resource.return_value = {}
result = image_logic.get_image_by_uuid('test')
self.assertEqual(result.image.status, 'no regions')
@mock.patch.object(utils, 'get_resource_status_from_db')
@mock.patch.object(image_logic.ImsUtils, 'get_server_links',
return_value=["ip", "path"])
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_get_image_by_uuid_image_sanity(
self, mock_image, mock_di, mock_links, mock_get_resource):
_, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = (mock_data_manager)
status_model = mock.MagicMock()
status_model.status = 'Success'
resource_status_dict = {'some_id': status_model}
mock_get_resource.return_value = resource_status_dict
result = image_logic.get_image_by_uuid('test')
self.assertEqual(result.image.status, 'Success')
class TestDeleteImageLogic(FunctionalTest):
"""test delete image."""
@mock.patch.object(utils, 'delete_uuid')
@mock.patch.object(utils, 'get_resource_status_from_db')
@mock.patch.object(image_logic, 'di')
def test_delete_image_success(self, mock_di, mock_get_resource,
mock_delete):
_, mock_data_manager = get_data_manager_mock(
get_existing_region_names=[])
mock_di.resolver.unpack.return_value = (mock_data_manager)
status_model = mock.MagicMock()
status_model.status = 'Success'
resource_status_dict = {'some_id': status_model}
mock_get_resource.return_value = resource_status_dict
image_logic.delete_image_by_uuid("image_uuid", "transaction_id")
@mock.patch.object(utils, 'delete_uuid')
@mock.patch.object(utils, 'get_resource_status_from_db')
@mock.patch.object(image_logic, 'di')
def test_delete_image_success_nords(self, mock_di, mock_get_resource,
mock_delete):
_, mock_data_manager = get_data_manager_mock(
get_existing_region_names=[])
mock_di.resolver.unpack.return_value = (mock_data_manager)
mock_get_resource.return_value = {}
image_logic.delete_image_by_uuid("image_uuid", "transaction_id")
@mock.patch.object(image_logic, 'di')
def test_delete_image_notfound_error(self, mock_di):
_, mock_data_manager = \
get_data_manager_mock(mock_sql_image=None)
mock_di.resolver.unpack.return_value = (mock_data_manager)
try:
image_logic.delete_image_by_uuid("image_uuid", "transaction_id")
except Exception as e:
self.assertEqual(404, e.status_code)
@mock.patch.object(image_logic, 'di')
def test_delete_image_other_error(self, mock_di):
_, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = (mock_data_manager)
self.assertRaises(image_logic.ErrorStatus,
image_logic.delete_image_by_uuid,
"image_uuid",
"transaction_id")
class TestUpdateImage(FunctionalTest):
"""tests for update image."""
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageTest(id="image_id"))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_update_image_success(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
result = image_logic.update_image(ImageTest(), "imgae_id",
"transaction_id")
self.assertEqual("image_id", result.id)
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageTest(id="image_id"))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_update_image_notfound(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock(
mock_sql_image=None)
mock_di.resolver.unpack.return_value = mock_data_manager
try:
result = image_logic.update_image(ImageTest(), "image_id",
"transaction_id")
except Exception as e:
self.assertEqual(404, e.status_code)
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageTest(id="image_id"))
@mock.patch.object(image_logic, 'send_to_rds_if_needed',
side_effect=Exception("rds not found"))
@mock.patch.object(image_logic, 'di')
def test_update_image_anyerror(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(Exception, image_logic.update_image, ImageTest(),
"imgae_id", "transaction_id")
class TestActivateImageLogic(FunctionalTest):
"""test activate/deactivate image."""
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageTest(**{'status': 'Success'}))
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_activate_image_activate_no_activated_image(self,
mock_image,
mock_di,
mock_by_uuid):
my_enabled = mock.MagicMock()
my_enabled.enabled = 0
my_get_image = mock.MagicMock()
my_get_image.get_image_by_id = mock.MagicMock(return_value=my_enabled)
my_get_record = mock.MagicMock()
my_get_record.get_record.return_value = my_get_image
my_dm = mock.MagicMock(return_value=my_get_record)
mock_di.resolver.unpack.return_value = my_dm
result = image_logic.enable_image("test_id", 1, "transaction_id")
self.assertEqual(result.status, 'Success')
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageTest(**{'status': 'Success'}))
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_activate_image_already_activated(self, mock_image,
mock_di,
mock_get_image_by_uuid):
my_enabled = mock.MagicMock()
my_enabled.enabled = 1
my_get_image = mock.MagicMock()
my_get_image.get_image_by_id = mock.MagicMock(return_value=my_enabled)
my_get_record = mock.MagicMock()
my_get_record.get_record.return_value = my_get_image
my_dm = mock.MagicMock(return_value=my_get_record)
mock_di.resolver.unpack.return_value = my_dm
result = image_logic.enable_image("test_id", 1, "transaction_id")
self.assertEqual(result.status, 'Success')
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_activate_image_image_not_found(self, mock_image,
mock_di):
my_get_image = mock.MagicMock()
my_get_image.get_image_by_id.return_value = None
my_get_record = mock.MagicMock()
my_get_record.get_record.return_value = my_get_image
my_dm = mock.MagicMock(return_value=my_get_record)
mock_di.resolver.unpack.return_value = my_dm
try:
image_logic.enable_image("test_id", 1, "transaction_id")
except image_logic.ErrorStatus as e:
self.assertEqual(e.status_code, 404)
@mock.patch.object(image_logic, 'LOG')
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_activate_image_image_other_exception(self,
mock_image,
mock_di,
log_moc):
my_get_image = mock.MagicMock()
my_get_image.get_image_by_id = mock.MagicMock(side_effect=MyError("activate_test"))
my_get_record = mock.MagicMock()
my_get_record.get_record.return_value = my_get_image
my_dm = mock.MagicMock(return_value=my_get_record)
mock_di.resolver.unpack.return_value = my_dm
try:
image_logic.enable_image("test_id", 1, "transaction_id")
except Exception as e:
self.assertEqual(str(e), 'activate_test')
class TestListImageLogic(FunctionalTest):
@mock.patch.object(image_logic, 'di')
def test_list_image_not_found(self, mock_di):
my_get_image = mock.MagicMock()
my_get_image.get_image.return_value = None
my_get_record = mock.MagicMock()
my_get_record.get_record.side_effect = image_logic.ErrorStatus(404, 'a')
my_dm = mock.MagicMock(return_value=my_get_record)
mock_di.resolver.unpack.return_value = my_dm
try:
image_logic.get_image_list_by_params('a', 'b', 'c')
except image_logic.ErrorStatus as e:
self.assertEqual(e.status_code, 404)
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_list_image_error(self, mock_image, mock_di):
my_get_image = mock.MagicMock()
my_get_record = mock.MagicMock()
my_get_record.get_record.side_effect = SystemError()
my_dm = mock.MagicMock(return_value=my_get_record)
mock_di.resolver.unpack.return_value = my_dm
try:
image_logic.get_image_list_by_params('a', 'b', 'c')
except Exception as e:
self.assertEqual(str(e), '')
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_list_image_sanity(self, mock_image, mock_di):
mock_data_manager = mock.MagicMock()
mock_image_rec = mock.MagicMock()
mock_image_rec.get_images_by_criteria.return_value = Image()
my_dm = mock.MagicMock(mock_data_manager)
mock_di.resolver.unpack.return_value = my_dm
result = image_logic.get_image_list_by_params('a', 'b', 'c')
self.assertEqual(len(result.images), 0)
class TestCreateImage(FunctionalTest):
def setUp(self):
FunctionalTest.setUp(self)
def tearDown(self):
FunctionalTest.tearDown(self)
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
@mock.patch.object(image_logic, 'get_image_by_uuid', return_value='test')
def test_create_image_sanity(self, mock_di, mock_req, mock_get):
my_image = mock.MagicMock()
my_dm = mock.MagicMock()
my_dm.get_record.return_value = my_image
my_mock = mock.MagicMock(return_value=my_dm)
mock_di.resolver.unpack.return_value = my_mock
result = image_logic.create_image(mock.MagicMock(), 'test1', 'test2')
self.assertEqual('test', result)
@mock.patch.object(utils, 'delete_uuid')
@mock.patch.object(image_logic, 'di')
@mock.patch.object(image_logic, 'ImageWrapper')
def test_create_image_validate_model_failure(self, mock_image, mock_di,
mock_delete):
image = mock.MagicMock()
image.validate_model.side_effect = ValueError('test')
self.assertRaises(ValueError, image_logic.create_image, image,
'test1', 'test2')
class TestAddRegions(FunctionalTest):
"""tests for add regions."""
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(regions=[models.Region('region')])))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_add_regions_success(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
regions_wrapper = mock.MagicMock()
regions_wrapper.regions = [mock.MagicMock()]
result = image_logic.add_regions('uuid', regions_wrapper,
'transaction')
self.assertEqual(len(result.regions), 1)
self.assertEqual('region', result.regions[0].name)
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_add_regions_image_not_found(self, mock_di, mock_send_to_rds_if_needed):
rds_proxy, mock_data_manager = get_data_manager_mock(mock_sql_image=None)
mock_di.resolver.unpack.return_value = mock_data_manager
regions_wrapper = mock.MagicMock()
regions_wrapper.regions = [mock.MagicMock()]
self.assertRaises(image_logic.ErrorStatus, image_logic.add_regions,
'uuid', regions_wrapper, 'transaction')
@mock.patch.object(image_logic, 'get_image_by_uuid',
side_effect=ValueError('test'))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_add_regions_other_error(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
regions_wrapper = mock.MagicMock()
regions_wrapper.regions = [mock.MagicMock()]
self.assertRaises(ValueError, image_logic.add_regions,
'uuid', regions_wrapper, 'transaction')
class TestReplaceRegions(FunctionalTest):
"""tests for replace regions."""
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(regions=[models.Region('region')])))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_replace_regions_success(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
regions_wrapper = mock.MagicMock()
regions_wrapper.regions = [mock.MagicMock()]
result = image_logic.replace_regions('uuid', regions_wrapper,
'transaction')
self.assertEqual(len(result.regions), 1)
self.assertEqual('region', result.regions[0].name)
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_replace_regions_image_not_found(self, mock_di, mock_send_to_rds_if_needed):
rds_proxy, mock_data_manager = get_data_manager_mock(mock_sql_image=None)
mock_di.resolver.unpack.return_value = mock_data_manager
regions_wrapper = mock.MagicMock()
regions_wrapper.regions = [mock.MagicMock()]
self.assertRaises(image_logic.ErrorStatus, image_logic.replace_regions,
'uuid', regions_wrapper, 'transaction')
@mock.patch.object(image_logic, 'get_image_by_uuid',
side_effect=ValueError('test'))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_replace_regions_other_error(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
regions_wrapper = mock.MagicMock()
regions_wrapper.regions = [mock.MagicMock()]
self.assertRaises(ValueError, image_logic.replace_regions,
'uuid', regions_wrapper, 'transaction')
class TestDeleteRegion(FunctionalTest):
"""tests for delete region."""
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_delete_region_success(self, mock_di, mock_send_to_rds_if_needed):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
result = image_logic.delete_region('uuid', mock.MagicMock(),
'transaction', False)
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_delete_region_rds_err_force_delete(self, mock_di, mock_send_to_rds_if_needed):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
result = image_logic.delete_region('uuid', mock.MagicMock(),
'transaction', True)
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_delete_region_image_not_found(self, mock_di,
mock_send_to_rds_if_needed):
rds_proxy, mock_data_manager = get_data_manager_mock(
mock_sql_image=None)
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus, image_logic.delete_region,
'uuid', mock.MagicMock(), 'transaction', False)
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_delete_region_protected_image(self, mock_di,
mock_send_to_rds_if_needed):
rds_proxy, mock_data_manager = get_data_manager_mock(protected=True)
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus, image_logic.delete_region,
'uuid', mock.MagicMock(), 'transaction', False)
@mock.patch.object(image_logic, 'get_image_by_uuid',
side_effect=ValueError('test'))
@mock.patch.object(image_logic, 'send_to_rds_if_needed',
side_effect=ValueError)
@mock.patch.object(image_logic, 'di')
def test_delete_region_other_error(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(ValueError, image_logic.delete_region,
'uuid', mock.MagicMock(), 'transaction', False)
class TestAddCustomers(FunctionalTest):
"""tests for add customers."""
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_add_customers_success(self, mock_di, mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
customers_wrapper = models.CustomerWrapper(['customer'])
result = image_logic.add_customers('uuid', customers_wrapper,
'transaction')
self.assertEqual(result.image.customers.customers, ['customer'])
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_add_customers_image_not_found(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock(
mock_sql_image=None)
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus, image_logic.add_customers,
'uuid', mock.MagicMock(),
'transaction')
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_add_customers_public_image(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
global visibility
visibility = 'public'
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus, image_logic.add_customers,
'uuid', mock.MagicMock(),
'transaction')
visibility = 'private'
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed',
side_effect=ValueError('Duplicate entry'))
@mock.patch.object(image_logic, 'di')
def test_add_customers_duplicate_entry(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus, image_logic.add_customers,
'uuid', mock.MagicMock(),
'transaction')
class TestReplaceCustomers(FunctionalTest):
"""tests for replace customers."""
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_replace_customers_success(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
global visibility
visibility = 'private'
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
customers_wrapper = models.CustomerWrapper(['customer'])
result = image_logic.replace_customers('uuid', customers_wrapper,
'transaction')
self.assertEqual(result.image.customers.customers, ['customer'])
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_replace_customers_image_not_found(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock(
mock_sql_image=None)
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus,
image_logic.replace_customers,
'uuid', mock.MagicMock(),
'transaction')
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed', return_value=True)
@mock.patch.object(image_logic, 'di')
def test_replace_customers_public_image(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
global visibility
visibility = 'public'
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(ValueError,
image_logic.replace_customers,
'uuid', mock.MagicMock(),
'transaction')
visibility = 'private'
@mock.patch.object(image_logic, 'get_image_by_uuid',
return_value=ImageWrapperTest(
image=ImageTest(
customers=models.CustomerWrapper(['customer']))))
@mock.patch.object(image_logic, 'send_to_rds_if_needed',
side_effect=ValueError('Duplicate entry'))
@mock.patch.object(image_logic, 'di')
def test_replace_customers_duplicate_entry(self, mock_di,
mock_send_to_rds_if_needed,
mock_get_image_by_uuid):
rds_proxy, mock_data_manager = get_data_manager_mock()
mock_di.resolver.unpack.return_value = mock_data_manager
self.assertRaises(image_logic.ErrorStatus,
image_logic.replace_customers,
'uuid', mock.MagicMock(),
'transaction')
def get_data_manager_mock(get_existing_region_names={"name": "mdt1"},
imagejson={"regions": {"name": "mdt1"}},
delete_image_by_id=True,
protected=False,
begin_transaction=True,
flush=True,
send_image=True,
mock_sql_image=True):
mock_rds_proxy = mock.MagicMock()
mock_data_manager = mock.MagicMock()
mock_data_manager_return_value = mock.MagicMock()
mock_image_rec = mock.MagicMock()
image_json = mock.MagicMock()
image_json.return_value = imagejson
if mock_sql_image:
mock_sql_image = mock.MagicMock()
mock_sql_image.__json__ = image_json
mock_sql_image.id = 'some_id'
mock_sql_image.visibility = visibility
mock_sql_image.protected = protected
mock_sql_image.get_proxy_dict = mock.MagicMock(return_value={'regions': regions})
mock_sql_image.get_existing_region_names.return_value = \
get_existing_region_names
mock_image_rec.get_image_by_id.return_value = mock_sql_image
mock_image_rec.delete_image_by_id.return_value = delete_image_by_id
mock_image_rec.insert.return_value = True
mock_data_manager_return_value.begin_transaction.return_value = \
begin_transaction
mock_data_manager_return_value.flush.return_value = flush
mock_data_manager_return_value.get_record.return_value = mock_image_rec
mock_rds_proxy.send_image.return_value = send_image
mock_data_manager.return_value = mock_data_manager_return_value
return mock_rds_proxy, mock_data_manager