Cinder Store: Update legacy images tests

update tests for cinder's new attachment API code in glance
cinder store. This leaves a couple of mocks in place for the old
way of doing things so that we can tolerate the old and proposed
changes to glance_store. We can remove those once we require the
newer glance_store version.

Change-Id: If4db20affbba37806f8419b6b30050a32bcc2435
This commit is contained in:
whoami-rajat 2021-04-05 03:43:34 -04:00
parent 50cd037bcd
commit 0e2043d51e

View File

@ -44,30 +44,35 @@ class TestLegacyUpdateCinderStore(functional.SynchronousAPIBase):
def setUp(self): def setUp(self):
super(TestLegacyUpdateCinderStore, self).setUp() super(TestLegacyUpdateCinderStore, self).setUp()
self.vol_id = uuid.uuid4() self.vol_id = uuid.uuid4()
self.cinder_store_mock = FakeObject( self.volume = FakeObject(
client=mock.MagicMock(), volumes=FakeObject( id=self.vol_id,
get=lambda v_id: FakeObject(volume_type='fast'),
detach=mock.MagicMock(),
create=lambda size_gb, name, metadata, volume_type:
FakeObject(
id=self.vol_id, manager=FakeObject(
get=lambda vol_id: FakeObject(
manager=FakeObject(
get=lambda vol_id: FakeObject(
status='in-use',
begin_detaching=mock.MagicMock(),
terminate_connection=mock.MagicMock())),
id=vol_id,
status='available', status='available',
size=1, size=1,
reserve=mock.MagicMock(), reserve=mock.MagicMock(),
# FIXME(danms): Remove this after glance store
# moves past 2.3.0
begin_detaching=mock.MagicMock(),
initialize_connection=mock.MagicMock(), initialize_connection=mock.MagicMock(),
terminate_connection=mock.MagicMock(),
encrypted=False, encrypted=False,
unreserve=mock.MagicMock(), unreserve=mock.MagicMock(),
delete=mock.MagicMock(), delete=mock.MagicMock(),
# FIXME(danms): Remove this after glance store
# moves past 2.3.0
attach=mock.MagicMock(), attach=mock.MagicMock(),
update_all_metadata=mock.MagicMock(), update_all_metadata=mock.MagicMock(),
update_readonly_flag=mock.MagicMock()))))) update_readonly_flag=mock.MagicMock())
self.volume.manager = FakeObject(get=lambda id: self.volume)
self.cinder_store_mock = FakeObject(
attachments=mock.MagicMock(),
client=mock.MagicMock(), volumes=FakeObject(
initialize_connection=mock.MagicMock(),
terminate_connection=mock.MagicMock(),
begin_detaching=mock.MagicMock(),
get=lambda v_id: FakeObject(volume_type='fast'),
detach=mock.MagicMock(),
create=lambda size_gb, name, metadata, volume_type:
self.volume))
def setup_stores(self): def setup_stores(self):
pass pass
@ -187,17 +192,24 @@ class TestLegacyUpdateCinderStore(functional.SynchronousAPIBase):
return image_id return image_id
def _mock_wait_volume_status(self, volume, status_transition,
status_expected):
volume.status = status_expected
return volume
@mock.patch.object(cinderclient, 'Client') @mock.patch.object(cinderclient, 'Client')
@mock.patch.object(cinder.Store, 'temporary_chown') @mock.patch.object(cinder.Store, 'temporary_chown')
@mock.patch.object(cinder, 'connector') @mock.patch.object(cinder, 'connector')
@mock.patch.object(cinder, 'open') @mock.patch.object(cinder, 'open')
def test_create_image(self, mock_open, mock_connector, @mock.patch('glance_store._drivers.cinder.Store._wait_volume_status')
def test_create_image(self, mock_wait, mock_open, mock_connector,
mock_chown, mocked_cc): mock_chown, mocked_cc):
# setup multiple cinder stores # setup multiple cinder stores
self.setup_multiple_stores() self.setup_multiple_stores()
self.start_server() self.start_server()
mocked_cc.return_value = self.cinder_store_mock mocked_cc.return_value = self.cinder_store_mock
mock_wait.side_effect = self._mock_wait_volume_status
# create an image # create an image
image_id = self._create_and_import(stores=['store1']) image_id = self._create_and_import(stores=['store1'])
image = self.api_get('/v2/images/%s' % image_id).json image = self.api_get('/v2/images/%s' % image_id).json
@ -216,8 +228,10 @@ class TestLegacyUpdateCinderStore(functional.SynchronousAPIBase):
@mock.patch.object(cinder.Store, 'temporary_chown') @mock.patch.object(cinder.Store, 'temporary_chown')
@mock.patch.object(cinder, 'connector') @mock.patch.object(cinder, 'connector')
@mock.patch.object(cinder, 'open') @mock.patch.object(cinder, 'open')
def test_migrate_image_after_upgrade(self, mock_open, mock_connector, @mock.patch('glance_store._drivers.cinder.Store._wait_volume_status')
mock_chown, mocked_cc): def test_migrate_image_after_upgrade(self, mock_wait, mock_open,
mock_connector, mock_chown,
mocked_cc):
"""Test to check if an image is successfully migrated when we """Test to check if an image is successfully migrated when we
upgrade from a single cinder store to multiple cinder stores. upgrade from a single cinder store to multiple cinder stores.
@ -226,6 +240,7 @@ class TestLegacyUpdateCinderStore(functional.SynchronousAPIBase):
self.setup_single_store() self.setup_single_store()
self.start_server() self.start_server()
mocked_cc.return_value = self.cinder_store_mock mocked_cc.return_value = self.cinder_store_mock
mock_wait.side_effect = self._mock_wait_volume_status
# create image in single store # create image in single store
image_id = self._create_and_import(stores=['store1']) image_id = self._create_and_import(stores=['store1'])