Replace mox with mock for xenapi vm_utils.lookup

The py34 check jobs are failing occasionally when trying to use mox on
the vm_utils.lookup method, seemingly because it is not restored
properly at some point. Rather than chase that down this patch replaces
the usage of mox with mock for patching this method.

Change-Id: I3f36b72ab435dea224eb61d449e13ae80d9b61a8
Closes-Bug: 1590896
This commit is contained in:
Andrew Laski 2016-06-09 13:33:37 -04:00
parent d4afe8b368
commit 4e5015f228
4 changed files with 87 additions and 127 deletions

View File

@ -679,55 +679,35 @@ class GetInstanceForVdisForSrTestCase(VMUtilsTestBase):
class VMRefOrRaiseVMFoundTestCase(VMUtilsTestBase):
def test_lookup_call(self):
mock = mox.Mox()
mock.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup('session', 'somename').AndReturn('ignored')
mock.ReplayAll()
@mock.patch.object(vm_utils, 'lookup', return_value='ignored')
def test_lookup_call(self, mock_lookup):
vm_utils.vm_ref_or_raise('session', 'somename')
mock.VerifyAll()
mock_lookup.assert_called_once_with('session', 'somename')
def test_return_value(self):
mock = mox.Mox()
mock.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn('vmref')
mock.ReplayAll()
@mock.patch.object(vm_utils, 'lookup', return_value='vmref')
def test_return_value(self, mock_lookup):
self.assertEqual(
'vmref', vm_utils.vm_ref_or_raise('session', 'somename'))
mock.VerifyAll()
mock_lookup.assert_called_once_with('session', 'somename')
class VMRefOrRaiseVMNotFoundTestCase(VMUtilsTestBase):
def test_exception_raised(self):
mock = mox.Mox()
mock.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup('session', 'somename').AndReturn(None)
mock.ReplayAll()
@mock.patch.object(vm_utils, 'lookup', return_value=None)
def test_exception_raised(self, mock_lookup):
self.assertRaises(
exception.InstanceNotFound,
lambda: vm_utils.vm_ref_or_raise('session', 'somename')
)
mock.VerifyAll()
mock_lookup.assert_called_once_with('session', 'somename')
def test_exception_msg_contains_vm_name(self):
mock = mox.Mox()
mock.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup('session', 'somename').AndReturn(None)
mock.ReplayAll()
@mock.patch.object(vm_utils, 'lookup', return_value=None)
def test_exception_msg_contains_vm_name(self, mock_lookup):
try:
vm_utils.vm_ref_or_raise('session', 'somename')
except exception.InstanceNotFound as e:
self.assertIn('somename', six.text_type(e))
mock.VerifyAll()
mock_lookup.assert_called_once_with('session', 'somename')
@mock.patch.object(vm_utils, 'safe_find_sr', return_value='safe_find_sr')

View File

@ -94,30 +94,35 @@ class VMOpsTestCase(VMOpsTestBase):
'task_state': task_states.RESIZE_MIGRATING}
context = 'fake_context'
self.mox.StubOutWithMock(vm_utils, 'lookup')
self.mox.StubOutWithMock(self._vmops, '_destroy')
self.mox.StubOutWithMock(vm_utils, 'set_vm_name_label')
self.mox.StubOutWithMock(self._vmops, '_attach_mapped_block_devices')
self.mox.StubOutWithMock(self._vmops, '_start')
self.mox.StubOutWithMock(vm_utils, 'is_vm_shutdown')
lookup_returns = [backup_made and 'foo' or None,
(not backup_made or new_made) and 'foo' or None]
vm_utils.lookup(self._session, 'foo-orig').AndReturn(
backup_made and 'foo' or None)
vm_utils.lookup(self._session, 'foo').AndReturn(
(not backup_made or new_made) and 'foo' or None)
if backup_made:
if new_made:
self._vmops._destroy(instance, 'foo')
vm_utils.set_vm_name_label(self._session, 'foo', 'foo')
self._vmops._attach_mapped_block_devices(instance, [])
@mock.patch.object(vm_utils, 'lookup',
side_effect=lookup_returns)
@mock.patch.object(self._vmops, '_destroy')
@mock.patch.object(vm_utils, 'set_vm_name_label')
@mock.patch.object(self._vmops, '_attach_mapped_block_devices')
@mock.patch.object(self._vmops, '_start')
@mock.patch.object(vm_utils, 'is_vm_shutdown',
return_value=vm_shutdown)
def test(mock_is_vm, mock_start, mock_attach_bdm, mock_set_vm_name,
mock_destroy, mock_lookup):
self._vmops.finish_revert_migration(context, instance, [])
vm_utils.is_vm_shutdown(self._session, 'foo').AndReturn(vm_shutdown)
if vm_shutdown:
self._vmops._start(instance, 'foo')
mock_lookup.assert_has_calls([mock.call(self._session, 'foo-orig'),
mock.call(self._session, 'foo')])
if backup_made:
if new_made:
mock_destroy.assert_called_once_with(instance, 'foo')
mock_set_vm_name.assert_called_once_with(self._session, 'foo',
'foo')
mock_attach_bdm.assert_called_once_with(instance, [])
self.mox.ReplayAll()
mock_is_vm.assert_called_once_with(self._session, 'foo')
if vm_shutdown:
mock_start.assert_called_once_with(instance, 'foo')
self._vmops.finish_revert_migration(context, instance, [])
test()
def test_finish_revert_migration_after_crash(self):
self._test_finish_revert_migration_after_crash(True, True)
@ -143,14 +148,14 @@ class VMOpsTestCase(VMOpsTestBase):
self.assertEqual(self.make_plugin_call_count, 1)
def test_get_vm_opaque_ref_raises_instance_not_found(self):
@mock.patch.object(vm_utils, 'lookup', return_value=None)
def test_get_vm_opaque_ref_raises_instance_not_found(self, mock_lookup):
instance = {"name": "dummy"}
self.mox.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup(self._session, instance['name'], False).AndReturn(None)
self.mox.ReplayAll()
self.assertRaises(exception.InstanceNotFound,
self._vmops._get_vm_opaque_ref, instance)
mock_lookup.assert_called_once_with(self._session, instance['name'],
False)
@mock.patch.object(vm_utils, 'destroy_vm')
@mock.patch.object(vm_utils, 'clean_shutdown_vm')
@ -704,23 +709,21 @@ class SpawnTestCase(VMOpsTestBase):
self.mox.ReplayAll()
self.vmops._wait_for_instance_to_start(instance, vm_ref)
def test_attach_orig_disks(self):
@mock.patch.object(vm_utils, 'lookup', return_value='ref')
@mock.patch.object(vm_utils, 'create_vbd')
def test_attach_orig_disks(self, mock_create_vbd, mock_lookup):
instance = {"name": "dummy"}
vm_ref = "vm_ref"
vbd_refs = {vmops.DEVICE_ROOT: "vdi_ref"}
self.mox.StubOutWithMock(vm_utils, 'lookup')
self.mox.StubOutWithMock(self.vmops, '_find_vdi_refs')
self.mox.StubOutWithMock(vm_utils, 'create_vbd')
vm_utils.lookup(self.vmops._session, "dummy").AndReturn("ref")
self.vmops._find_vdi_refs("ref", exclude_volumes=True).AndReturn(
vbd_refs)
vm_utils.create_vbd(self.vmops._session, vm_ref, "vdi_ref",
vmops.DEVICE_RESCUE, bootable=False)
self.mox.ReplayAll()
self.vmops._attach_orig_disks(instance, vm_ref)
with mock.patch.object(self.vmops, '_find_vdi_refs',
return_value=vbd_refs) as mock_find_vdi:
self.vmops._attach_orig_disks(instance, vm_ref)
mock_lookup.assert_called_once_with(self.vmops._session, 'dummy')
mock_find_vdi.assert_called_once_with('ref', exclude_volumes=True)
mock_create_vbd.assert_called_once_with(
self.vmops._session, vm_ref, 'vdi_ref', vmops.DEVICE_RESCUE,
bootable=False)
def test_agent_update_setup(self):
# agent updates need to occur after networking is configured

View File

@ -33,55 +33,37 @@ class VolumeOpsTestBase(stubs.XenAPITestBaseNoDB):
class VolumeDetachTestCase(VolumeOpsTestBase):
def test_detach_volume_call(self):
registered_calls = []
def regcall(label):
def side_effect(*args, **kwargs):
registered_calls.append(label)
return side_effect
@mock.patch.object(volumeops.vm_utils, 'lookup', return_value='vmref')
@mock.patch.object(volumeops.volume_utils, 'find_vbd_by_number',
return_value='vbdref')
@mock.patch.object(volumeops.vm_utils, 'is_vm_shutdown',
return_value=False)
@mock.patch.object(volumeops.vm_utils, 'unplug_vbd')
@mock.patch.object(volumeops.vm_utils, 'destroy_vbd')
@mock.patch.object(volumeops.volume_utils, 'get_device_number',
return_value='devnumber')
@mock.patch.object(volumeops.volume_utils, 'find_sr_from_vbd',
return_value='srref')
@mock.patch.object(volumeops.volume_utils, 'purge_sr')
def test_detach_volume_call(self, mock_purge, mock_find_sr,
mock_get_device_num, mock_destroy_vbd,
mock_unplug_vbd, mock_is_vm, mock_find_vbd,
mock_lookup):
ops = volumeops.VolumeOps('session')
self.mox.StubOutWithMock(volumeops.vm_utils, 'lookup')
self.mox.StubOutWithMock(volumeops.volume_utils, 'find_vbd_by_number')
self.mox.StubOutWithMock(volumeops.vm_utils, 'is_vm_shutdown')
self.mox.StubOutWithMock(volumeops.vm_utils, 'unplug_vbd')
self.mox.StubOutWithMock(volumeops.vm_utils, 'destroy_vbd')
self.mox.StubOutWithMock(volumeops.volume_utils, 'get_device_number')
self.mox.StubOutWithMock(volumeops.volume_utils, 'find_sr_from_vbd')
self.mox.StubOutWithMock(volumeops.volume_utils, 'purge_sr')
volumeops.vm_utils.lookup('session', 'instance_1').AndReturn(
'vmref')
volumeops.volume_utils.get_device_number('mountpoint').AndReturn(
'devnumber')
volumeops.volume_utils.find_vbd_by_number(
'session', 'vmref', 'devnumber').AndReturn('vbdref')
volumeops.vm_utils.is_vm_shutdown('session', 'vmref').AndReturn(
False)
volumeops.vm_utils.unplug_vbd('session', 'vbdref', 'vmref')
volumeops.vm_utils.destroy_vbd('session', 'vbdref').WithSideEffects(
regcall('destroy_vbd'))
volumeops.volume_utils.find_sr_from_vbd(
'session', 'vbdref').WithSideEffects(
regcall('find_sr_from_vbd')).AndReturn('srref')
volumeops.volume_utils.purge_sr('session', 'srref')
self.mox.ReplayAll()
ops.detach_volume(
dict(driver_volume_type='iscsi', data='conn_data'),
'instance_1', 'mountpoint')
self.assertEqual(
['find_sr_from_vbd', 'destroy_vbd'], registered_calls)
mock_lookup.assert_called_once_with('session', 'instance_1')
mock_get_device_num.assert_called_once_with('mountpoint')
mock_find_vbd.assert_called_once_with('session', 'vmref', 'devnumber')
mock_is_vm.assert_called_once_with('session', 'vmref')
mock_unplug_vbd.assert_called_once_with('session', 'vbdref', 'vmref')
mock_destroy_vbd.assert_called_once_with('session', 'vbdref')
mock_find_sr.assert_called_once_with('session', 'vbdref')
mock_purge.assert_called_once_with('session', 'srref')
@mock.patch.object(volumeops.VolumeOps, "_detach_vbds_and_srs")
@mock.patch.object(volume_utils, "find_vbd_by_number")

View File

@ -347,23 +347,19 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
self.conn.init_host(None)
self.assertEqual(set(xenapi_fake.get_all('VBD')), set([vbd0, vbd2]))
def test_instance_exists(self):
self.mox.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup(mox.IgnoreArg(), 'foo').AndReturn(True)
self.mox.ReplayAll()
@mock.patch.object(vm_utils, 'lookup', return_value=True)
def test_instance_exists(self, mock_lookup):
self.stubs.Set(objects.Instance, 'name', 'foo')
instance = objects.Instance(uuid='fake-uuid')
self.assertTrue(self.conn.instance_exists(instance))
mock_lookup.assert_called_once_with(mock.ANY, 'foo')
def test_instance_not_exists(self):
self.mox.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup(mox.IgnoreArg(), 'bar').AndReturn(None)
self.mox.ReplayAll()
@mock.patch.object(vm_utils, 'lookup', return_value=None)
def test_instance_not_exists(self, mock_lookup):
self.stubs.Set(objects.Instance, 'name', 'bar')
instance = objects.Instance(uuid='fake-uuid')
self.assertFalse(self.conn.instance_exists(instance))
mock_lookup.assert_called_once_with(mock.ANY, 'bar')
def test_list_instances_0(self):
instances = self.conn.list_instances()
@ -1397,12 +1393,11 @@ iface eth0 inet6 static
real_result = vm_utils.lookup(conn._session, instance['name'])
self.mox.StubOutWithMock(vm_utils, 'lookup')
vm_utils.lookup(conn._session, instance['name'],
True).AndReturn(real_result)
self.mox.ReplayAll()
conn.reboot(self.context, instance, None, "SOFT")
with mock.patch.object(vm_utils, 'lookup',
return_value=real_result) as mock_lookup:
conn.reboot(self.context, instance, None, "SOFT")
mock_lookup.assert_called_once_with(conn._session,
instance['name'], True)
def test_get_console_output_succeeds(self):