From 6be4fd0f63a9bf391f0415889f7569c8d7492da0 Mon Sep 17 00:00:00 2001 From: Takashi NATSUME Date: Wed, 4 Apr 2018 14:08:16 +0900 Subject: [PATCH] Remove mox in unit/virt/xenapi/test_vm_utils.py (1) This patch removes using mox in the following test classes. * LookupTestCase * XenAPIGetUUID * FetchVhdImageTestCase Subsequent patches will remove using mox in another test class in nova/tests/unit/virt/xenapi/test_vm_utils.py. Change-Id: Ie40f36b717d935d010e40d2ab29bac647c77b02d Implements: blueprint mox-removal --- nova/tests/unit/virt/xenapi/test_vm_utils.py | 193 ++++++++++--------- 1 file changed, 100 insertions(+), 93 deletions(-) diff --git a/nova/tests/unit/virt/xenapi/test_vm_utils.py b/nova/tests/unit/virt/xenapi/test_vm_utils.py index 59e584b85d..7be9d24124 100644 --- a/nova/tests/unit/virt/xenapi/test_vm_utils.py +++ b/nova/tests/unit/virt/xenapi/test_vm_utils.py @@ -88,56 +88,56 @@ class VMUtilsTestBase(stubs.XenAPITestBaseNoDB): class LookupTestCase(VMUtilsTestBase): def setUp(self): super(LookupTestCase, self).setUp() - self.session = self.mox.CreateMockAnything('Fake Session') + self.session = mock.Mock() self.name_label = 'my_vm' - def _do_mock(self, result): - self.session.call_xenapi( - "VM.get_by_name_label", self.name_label).AndReturn(result) - self.mox.ReplayAll() - def test_normal(self): - self._do_mock(['x']) + self.session.call_xenapi.return_value = ['x'] result = vm_utils.lookup(self.session, self.name_label) self.assertEqual('x', result) + self.session.call_xenapi.assert_called_once_with( + "VM.get_by_name_label", self.name_label) def test_no_result(self): - self._do_mock([]) + self.session.call_xenapi.return_value = [] result = vm_utils.lookup(self.session, self.name_label) self.assertIsNone(result) + self.session.call_xenapi.assert_called_once_with( + "VM.get_by_name_label", self.name_label) def test_too_many(self): - self._do_mock(['a', 'b']) + self.session.call_xenapi.return_value = ['a', 'b'] self.assertRaises(exception.InstanceExists, vm_utils.lookup, self.session, self.name_label) + self.session.call_xenapi.assert_called_once_with( + "VM.get_by_name_label", self.name_label) def test_rescue_none(self): - self.session.call_xenapi( - "VM.get_by_name_label", self.name_label + '-rescue').AndReturn([]) - self._do_mock(['x']) + self.session.call_xenapi.side_effect = [[], ['x']] result = vm_utils.lookup(self.session, self.name_label, check_rescue=True) self.assertEqual('x', result) + self.session.call_xenapi.assert_has_calls([ + mock.call("VM.get_by_name_label", self.name_label + '-rescue'), + mock.call("VM.get_by_name_label", self.name_label)]) def test_rescue_found(self): - self.session.call_xenapi( - "VM.get_by_name_label", - self.name_label + '-rescue').AndReturn(['y']) - self.mox.ReplayAll() + self.session.call_xenapi.return_value = ['y'] result = vm_utils.lookup(self.session, self.name_label, check_rescue=True) self.assertEqual('y', result) + self.session.call_xenapi.assert_called_once_with( + "VM.get_by_name_label", self.name_label + '-rescue') def test_rescue_too_many(self): - self.session.call_xenapi( - "VM.get_by_name_label", - self.name_label + '-rescue').AndReturn(['a', 'b', 'c']) - self.mox.ReplayAll() + self.session.call_xenapi.return_value = ['a', 'b', 'c'] self.assertRaises(exception.InstanceExists, vm_utils.lookup, self.session, self.name_label, check_rescue=True) + self.session.call_xenapi.assert_called_once_with( + "VM.get_by_name_label", self.name_label + '-rescue') class GenerateConfigDriveTestCase(VMUtilsTestBase): @@ -187,27 +187,27 @@ class GenerateConfigDriveTestCase(VMUtilsTestBase): class XenAPIGetUUID(VMUtilsTestBase): - def test_get_this_vm_uuid_new_kernel(self): - self.mox.StubOutWithMock(vm_utils, '_get_sys_hypervisor_uuid') + @mock.patch.object(vm_utils, '_get_sys_hypervisor_uuid', + return_value='2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f') + def test_get_this_vm_uuid_new_kernel(self, mock_get_sys_hypervisor_uuid): + result = vm_utils.get_this_vm_uuid(None) - vm_utils._get_sys_hypervisor_uuid().AndReturn( - '2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f') + self.assertEqual('2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f', result) + mock_get_sys_hypervisor_uuid.assert_called_once_with() - self.mox.ReplayAll() - self.assertEqual('2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f', - vm_utils.get_this_vm_uuid(None)) - self.mox.VerifyAll() - - @mock.patch('nova.virt.xenapi.vm_utils._get_sys_hypervisor_uuid') - @mock.patch('nova.privsep.xenapi.xenstore_read') + @mock.patch('nova.virt.xenapi.vm_utils._get_sys_hypervisor_uuid', + side_effect=IOError(13, 'Permission denied')) + @mock.patch('nova.privsep.xenapi.xenstore_read', + side_effect=[('27', ''), + ('/vm/2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f', '')]) def test_get_this_vm_uuid_old_kernel_reboot(self, fake_read, fake_uuid): - fake_uuid.side_effect = IOError(13, 'Permission denied') - fake_read.side_effect = [ - ('27', ''), - ('/vm/2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f', '')] + result = vm_utils.get_this_vm_uuid(None) - self.assertEqual('2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f', - vm_utils.get_this_vm_uuid(None)) + self.assertEqual('2f46f0f5-f14c-ef1b-1fac-9eeca0888a3f', result) + fake_read.assert_has_calls([ + mock.call('domid'), + mock.call('/local/domain/27/vm')]) + fake_uuid.assert_called_once_with() class FakeSession(object): @@ -234,21 +234,38 @@ class FetchVhdImageTestCase(VMUtilsTestBase): self.instance = {"uuid": "uuid"} self.flags(group='glance', api_servers=['http://localhost:9292']) - self.mox.StubOutWithMock(vm_utils, '_make_uuid_stack') - vm_utils._make_uuid_stack().AndReturn(["uuid_stack"]) + make_uuid_stack_patcher = mock.patch.object( + vm_utils, '_make_uuid_stack', return_value=["uuid_stack"]) + self.addCleanup(make_uuid_stack_patcher.stop) + self.mock_make_uuid_stack = make_uuid_stack_patcher.start() - self.mox.StubOutWithMock(vm_utils, 'get_sr_path') - vm_utils.get_sr_path(self.session).AndReturn('sr_path') + get_sr_path_patcher = mock.patch.object( + vm_utils, 'get_sr_path', return_value='sr_path') + self.addCleanup(get_sr_path_patcher.stop) + self.mock_get_sr_path = get_sr_path_patcher.start() def _stub_glance_download_vhd(self, raise_exc=None): - self.mox.StubOutWithMock( - self.session, 'call_plugin_serialized_with_retry') - func = self.session.call_plugin_serialized_with_retry( + call_plugin_patcher = mock.patch.object( + self.session, 'call_plugin_serialized_with_retry') + self.addCleanup(call_plugin_patcher.stop) + self.mock_call_plugin = call_plugin_patcher.start() + + if raise_exc: + self.mock_call_plugin.side_effect = raise_exc + else: + self.mock_call_plugin.return_value = {'root': {'uuid': 'vdi'}} + + def _assert_make_uuid_stack_and_get_sr_path(self): + self.mock_make_uuid_stack.assert_called_once_with() + self.mock_get_sr_path.assert_called_once_with(self.session) + + def _assert_call_plugin_serialized_with_retry(self): + self.mock_call_plugin.assert_called_once_with( 'glance.py', 'download_vhd2', 0, - mox.IgnoreArg(), - mox.IgnoreArg(), + mock.ANY, + mock.ANY, extra_headers={'X-Auth-Token': 'auth_token', 'X-Roles': '', 'X-Tenant-Id': None, @@ -258,69 +275,59 @@ class FetchVhdImageTestCase(VMUtilsTestBase): uuid_stack=["uuid_stack"], sr_path='sr_path') - if raise_exc: - func.AndRaise(raise_exc) - else: - func.AndReturn({'root': {'uuid': 'vdi'}}) - - def test_fetch_vhd_image_works_with_glance(self): + @mock.patch.object(vm_utils, '_check_vdi_size') + @mock.patch.object(vm_utils, '_scan_sr') + @mock.patch.object(vm_utils, 'safe_find_sr', return_value="sr") + def test_fetch_vhd_image_works_with_glance(self, mock_safe_find_sr, + mock_scan_sr, + mock_check_vdi_size): self._stub_glance_download_vhd() - self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') - vm_utils.safe_find_sr(self.session).AndReturn("sr") + result = vm_utils._fetch_vhd_image(self.context, self.session, + self.instance, 'image_id') - self.mox.StubOutWithMock(vm_utils, '_scan_sr') - vm_utils._scan_sr(self.session, "sr") + self.assertEqual("vdi", result['root']['uuid']) + mock_safe_find_sr.assert_called_once_with(self.session) + mock_scan_sr.assert_called_once_with(self.session, "sr") + mock_check_vdi_size.assert_called_once_with(self.context, self.session, + self.instance, "vdi") + self._assert_call_plugin_serialized_with_retry() + self._assert_make_uuid_stack_and_get_sr_path() - self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') - vm_utils._check_vdi_size( - self.context, self.session, self.instance, "vdi") - - self.mox.ReplayAll() - - self.assertEqual("vdi", vm_utils._fetch_vhd_image(self.context, - self.session, self.instance, 'image_id')['root']['uuid']) - - self.mox.VerifyAll() - - def test_fetch_vhd_image_cleans_up_vdi_on_fail(self): + @mock.patch.object(vm_utils, 'destroy_vdi', + side_effect=exception.StorageError(reason="")) + @mock.patch.object(FakeSession, 'call_xenapi', return_value="ref") + @mock.patch.object( + vm_utils, '_check_vdi_size', + side_effect=exception.FlavorDiskSmallerThanImage(flavor_size=0, + image_size=1)) + @mock.patch.object(vm_utils, '_scan_sr') + @mock.patch.object(vm_utils, 'safe_find_sr', return_value="sr") + def test_fetch_vhd_image_cleans_up_vdi_on_fail( + self, mock_safe_find_sr, mock_scan_sr, mock_check_vdi_size, + mock_call_xenapi, mock_destroy_vdi): self._stub_glance_download_vhd() - self.mox.StubOutWithMock(vm_utils, 'safe_find_sr') - vm_utils.safe_find_sr(self.session).AndReturn("sr") - - self.mox.StubOutWithMock(vm_utils, '_scan_sr') - vm_utils._scan_sr(self.session, "sr") - - self.mox.StubOutWithMock(vm_utils, '_check_vdi_size') - vm_utils._check_vdi_size(self.context, self.session, self.instance, - "vdi").AndRaise(exception.FlavorDiskSmallerThanImage( - flavor_size=0, image_size=1)) - - self.mox.StubOutWithMock(self.session, 'call_xenapi') - self.session.call_xenapi("VDI.get_by_uuid", "vdi").AndReturn("ref") - - self.mox.StubOutWithMock(vm_utils, 'destroy_vdi') - vm_utils.destroy_vdi(self.session, - "ref").AndRaise(exception.StorageError(reason="")) - - self.mox.ReplayAll() - self.assertRaises(exception.FlavorDiskSmallerThanImage, vm_utils._fetch_vhd_image, self.context, self.session, self.instance, 'image_id') - self.mox.VerifyAll() + mock_safe_find_sr.assert_called_once_with(self.session) + mock_scan_sr.assert_called_once_with(self.session, "sr") + mock_check_vdi_size.assert_called_once_with(self.context, self.session, + self.instance, "vdi") + mock_call_xenapi.assert_called_once_with("VDI.get_by_uuid", "vdi") + mock_destroy_vdi.assert_called_once_with(self.session, "ref") + self._assert_call_plugin_serialized_with_retry() + self._assert_make_uuid_stack_and_get_sr_path() def test_fetch_vhd_image_download_exception(self): self._stub_glance_download_vhd(raise_exc=RuntimeError) - self.mox.ReplayAll() - self.assertRaises(RuntimeError, vm_utils._fetch_vhd_image, self.context, self.session, self.instance, 'image_id') - - self.mox.VerifyAll() + self._assert_call_plugin_serialized_with_retry() + self._assert_make_uuid_stack_and_get_sr_path() class TestImageCompression(VMUtilsTestBase):