Skip to content

Commit

Permalink
Merge "Remove mox in test_conductor.py (1)"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and openstack-gerrit committed Jun 26, 2018
2 parents 7b41bac + bcc112f commit 53f14a7
Showing 1 changed file with 96 additions and 116 deletions.
212 changes: 96 additions & 116 deletions nova/tests/unit/conductor/test_conductor.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
from nova import objects
from nova.objects import base as obj_base
from nova.objects import fields
from nova import rpc
from nova.scheduler import client as scheduler_client
from nova.scheduler import utils as scheduler_utils
from nova import test
Expand Down Expand Up @@ -124,8 +123,8 @@ def fake_deserialize_context(serializer, ctxt_dict):
self.assertEqual(self.context.project_id, ctxt_dict['project_id'])
return self.context

self.stubs.Set(rpc.RequestContextSerializer, 'deserialize_context',
fake_deserialize_context)
self.stub_out('nova.rpc.RequestContextSerializer.deserialize_context',
fake_deserialize_context)

self.useFixture(fixtures.SpawnIsSynchronousFixture())

Expand Down Expand Up @@ -314,13 +313,13 @@ def test_wait_until_ready(self):
timeouts = []
calls = dict(count=0)

def fake_ping(context, message, timeout):
def fake_ping(self, context, message, timeout):
timeouts.append(timeout)
calls['count'] += 1
if calls['count'] < 15:
raise messaging.MessagingTimeout("fake")

self.stubs.Set(self.conductor.base_rpcapi, 'ping', fake_ping)
self.stub_out('nova.baserpc.BaseAPI.ping', fake_ping)

self.conductor.wait_until_ready(self.context)

Expand All @@ -341,8 +340,8 @@ def fake_deserialize_context(serializer, ctxt_dict):
self.assertEqual(self.context.project_id, ctxt_dict['project_id'])
return self.context

self.stubs.Set(rpc.RequestContextSerializer, 'deserialize_context',
fake_deserialize_context)
self.stub_out('nova.rpc.RequestContextSerializer.deserialize_context',
fake_deserialize_context)

self.useFixture(fixtures.SpawnIsSynchronousFixture())

Expand Down Expand Up @@ -419,12 +418,18 @@ def test_cold_migrate(self):
def test_cold_migrate_forced_shutdown(self):
self._test_cold_migrate(clean_shutdown=False)

@mock.patch.object(compute_rpcapi.ComputeAPI, 'build_and_run_instance')
@mock.patch.object(db, 'block_device_mapping_get_all_by_instance',
return_value=[])
@mock.patch.object(conductor_manager.ComputeTaskManager,
'_schedule_instances')
@mock.patch('nova.objects.BuildRequest.get_by_instance_uuid')
@mock.patch('nova.availability_zones.get_host_availability_zone')
@mock.patch('nova.objects.Instance.save')
@mock.patch.object(objects.RequestSpec, 'from_primitives')
def test_build_instances(self, mock_fp, mock_save, mock_getaz,
mock_buildreq):
mock_buildreq, mock_schedule, mock_bdm,
mock_build):
"""Tests creating two instances and the scheduler returns a unique
host/node combo for each instance.
"""
Expand All @@ -442,58 +447,19 @@ def test_build_instances(self, mock_fp, mock_save, mock_getaz,
instance_properties['system_metadata'] = flavors.save_flavor_info(
{}, instance_type)

self.mox.StubOutWithMock(self.conductor_manager, '_schedule_instances')
self.mox.StubOutWithMock(db,
'block_device_mapping_get_all_by_instance')
self.mox.StubOutWithMock(self.conductor_manager.compute_rpcapi,
'build_and_run_instance')

spec = {'image': {'fake_data': 'should_pass_silently'},
'instance_properties': instance_properties,
'instance_type': instance_type_p,
'num_instances': 2}
filter_properties = {'retry': {'num_attempts': 1, 'hosts': []}}
sched_return = copy.deepcopy(fake_host_lists2)
self.conductor_manager._schedule_instances(self.context,
fake_spec, [uuids.fake, uuids.fake], return_alternates=True
).AndReturn(sched_return)
db.block_device_mapping_get_all_by_instance(self.context,
instances[0].uuid).AndReturn([])
mock_schedule.return_value = sched_return
filter_properties2 = {'retry': {'num_attempts': 1,
'hosts': [['host1', 'node1']]},
'limits': {}}
self.conductor_manager.compute_rpcapi.build_and_run_instance(
self.context,
instance=mox.IgnoreArg(),
host='host1',
image={'fake_data': 'should_pass_silently'},
request_spec=fake_spec,
filter_properties=filter_properties2,
admin_password='admin_password',
injected_files='injected_files',
requested_networks=None,
security_groups='security_groups',
block_device_mapping=mox.IgnoreArg(),
node='node1', limits=None, host_list=sched_return[0])
db.block_device_mapping_get_all_by_instance(self.context,
instances[1].uuid).AndReturn([])
filter_properties3 = {'limits': {},
'retry': {'num_attempts': 1,
'hosts': [['host2', 'node2']]}}
self.conductor_manager.compute_rpcapi.build_and_run_instance(
self.context,
instance=mox.IgnoreArg(),
host='host2',
image={'fake_data': 'should_pass_silently'},
request_spec=fake_spec,
filter_properties=filter_properties3,
admin_password='admin_password',
injected_files='injected_files',
requested_networks=None,
security_groups='security_groups',
block_device_mapping=mox.IgnoreArg(),
node='node2', limits=None, host_list=sched_return[1])
self.mox.ReplayAll()

# build_instances() is a cast, we need to wait for it to complete
self.useFixture(cast_as_call.CastAsCall(self))
Expand All @@ -519,6 +485,32 @@ def test_build_instances(self, mock_fp, mock_save, mock_getaz,
mock.call(self.context, spec, filter_properties),
mock.call(self.context, spec, filter_properties2),
mock.call(self.context, spec, filter_properties3)])
mock_schedule.assert_called_once_with(
self.context, fake_spec, [uuids.fake, uuids.fake],
return_alternates=True)
mock_bdm.assert_has_calls([mock.call(self.context, instances[0].uuid),
mock.call(self.context, instances[1].uuid)])
mock_build.assert_has_calls([
mock.call(self.context, instance=mock.ANY, host='host1',
image={'fake_data': 'should_pass_silently'},
request_spec=fake_spec,
filter_properties=filter_properties2,
admin_password='admin_password',
injected_files='injected_files',
requested_networks=None,
security_groups='security_groups',
block_device_mapping=mock.ANY,
node='node1', limits=None, host_list=sched_return[0]),
mock.call(self.context, instance=mock.ANY, host='host2',
image={'fake_data': 'should_pass_silently'},
request_spec=fake_spec,
filter_properties=filter_properties3,
admin_password='admin_password',
injected_files='injected_files',
requested_networks=None,
security_groups='security_groups',
block_device_mapping=mock.ANY,
node='node2', limits=None, host_list=sched_return[1])])

@mock.patch.object(scheduler_utils, 'build_request_spec')
@mock.patch.object(scheduler_utils, 'setup_instance_group')
Expand Down Expand Up @@ -965,27 +957,23 @@ def do_test(mock_destroy_build_req, mock_pop_inst_map,

do_test()

def test_unshelve_instance_on_host(self):
@mock.patch.object(compute_rpcapi.ComputeAPI, 'unshelve_instance')
@mock.patch.object(compute_rpcapi.ComputeAPI, 'start_instance')
def test_unshelve_instance_on_host(self, mock_start, mock_unshelve):
instance = self._create_fake_instance_obj()
instance.vm_state = vm_states.SHELVED
instance.task_state = task_states.UNSHELVING
instance.save()
system_metadata = instance.system_metadata

self.mox.StubOutWithMock(self.conductor_manager.compute_rpcapi,
'start_instance')
self.mox.StubOutWithMock(self.conductor_manager.compute_rpcapi,
'unshelve_instance')

self.conductor_manager.compute_rpcapi.start_instance(self.context,
instance)
self.mox.ReplayAll()

system_metadata['shelved_at'] = timeutils.utcnow()
system_metadata['shelved_image_id'] = 'fake_image_id'
system_metadata['shelved_host'] = 'fake-mini'
self.conductor_manager.unshelve_instance(self.context, instance)

mock_start.assert_called_once_with(self.context, instance)
mock_unshelve.assert_not_called()

def test_unshelve_offload_instance_on_host_with_request_spec(self):
instance = self._create_fake_instance_obj()
instance.vm_state = vm_states.SHELVED_OFFLOADED
Expand Down Expand Up @@ -1060,31 +1048,27 @@ def do_test(reset_forced_destinations,

do_test()

def test_unshelve_offloaded_instance_glance_image_not_found(self):
shelved_image_id = "image_not_found"

@mock.patch.object(image_api.API, 'get',
side_effect=exc.ImageNotFound(image_id=uuids.image))
def test_unshelve_offloaded_instance_glance_image_not_found(
self, mock_get):
instance = self._create_fake_instance_obj()
instance.vm_state = vm_states.SHELVED_OFFLOADED
instance.task_state = task_states.UNSHELVING
instance.save()
system_metadata = instance.system_metadata

self.mox.StubOutWithMock(self.conductor_manager.image_api, 'get')

e = exc.ImageNotFound(image_id=shelved_image_id)
self.conductor_manager.image_api.get(
self.context, shelved_image_id, show_deleted=False).AndRaise(e)
self.mox.ReplayAll()

system_metadata['shelved_at'] = timeutils.utcnow()
system_metadata['shelved_host'] = 'fake-mini'
system_metadata['shelved_image_id'] = shelved_image_id
system_metadata['shelved_image_id'] = uuids.image

self.assertRaises(
exc.UnshelveException,
self.conductor_manager.unshelve_instance,
self.context, instance)
self.assertEqual(instance.vm_state, vm_states.ERROR)
mock_get.assert_called_once_with(self.context, uuids.image,
show_deleted=False)

def test_unshelve_offloaded_instance_image_id_is_none(self):

Expand All @@ -1109,9 +1093,20 @@ def test_unshelve_offloaded_instance_image_id_is_none(self):
self.conductor_manager.unshelve_instance(self.context, instance)
self.assertEqual(1, unshelve_mock.call_count)

@mock.patch.object(compute_rpcapi.ComputeAPI, 'unshelve_instance')
@mock.patch.object(conductor_manager.ComputeTaskManager,
'_schedule_instances',
return_value=[[objects.Selection(
service_host='fake_host', nodename='fake_node',
limits=None)]])
@mock.patch.object(scheduler_utils, 'build_request_spec',
return_value='req_spec')
@mock.patch.object(image_api.API, 'get', return_value='fake_image')
@mock.patch.object(objects.InstanceMapping, 'get_by_instance_uuid')
@mock.patch.object(objects.RequestSpec, 'from_primitives')
def test_unshelve_instance_schedule_and_rebuild(self, fp, mock_im):
def test_unshelve_instance_schedule_and_rebuild(
self, fp, mock_im, mock_get, mock_build, mock_schedule,
mock_unshelve):
fake_spec = objects.RequestSpec()
# Set requested_destination to test setting cell_mapping in
# existing object.
Expand All @@ -1127,36 +1122,24 @@ def test_unshelve_instance_schedule_and_rebuild(self, fp, mock_im):
instance.save()
system_metadata = instance.system_metadata

self.mox.StubOutWithMock(self.conductor_manager.image_api, 'get')
self.mox.StubOutWithMock(scheduler_utils, 'build_request_spec')
self.mox.StubOutWithMock(self.conductor_manager, '_schedule_instances')
self.mox.StubOutWithMock(self.conductor_manager.compute_rpcapi,
'unshelve_instance')

self.conductor_manager.image_api.get(self.context,
'fake_image_id', show_deleted=False).AndReturn('fake_image')
scheduler_utils.build_request_spec('fake_image',
mox.IgnoreArg()).AndReturn('req_spec')
fake_selection = objects.Selection(service_host="fake_host",
nodename="fake_node", limits=None)
self.conductor_manager._schedule_instances(self.context,
fake_spec, [instance.uuid], return_alternates=False).AndReturn(
[[fake_selection]])
self.conductor_manager.compute_rpcapi.unshelve_instance(self.context,
instance, 'fake_host', image='fake_image',
filter_properties={'limits': {},
'retry': {'num_attempts': 1,
'hosts': [['fake_host',
'fake_node']]}},
node='fake_node')
self.mox.ReplayAll()

system_metadata['shelved_at'] = timeutils.utcnow()
system_metadata['shelved_image_id'] = 'fake_image_id'
system_metadata['shelved_host'] = 'fake-mini'
self.conductor_manager.unshelve_instance(self.context, instance)
fp.assert_called_once_with(self.context, 'req_spec', mock.ANY)
self.assertEqual(cell_mapping, fake_spec.requested_destination.cell)
mock_get.assert_called_once_with(
self.context, 'fake_image_id', show_deleted=False)
mock_build.assert_called_once_with('fake_image', mock.ANY)
mock_schedule.assert_called_once_with(
self.context, fake_spec, [instance.uuid], return_alternates=False)
mock_unshelve.assert_called_once_with(
self.context, instance, 'fake_host', image='fake_image',
filter_properties={'limits': {},
'retry': {'num_attempts': 1,
'hosts': [['fake_host',
'fake_node']]}},
node='fake_node')

def test_unshelve_instance_schedule_and_rebuild_novalid_host(self):
instance = self._create_fake_instance_obj()
Expand Down Expand Up @@ -1217,10 +1200,18 @@ def test_unshelve_instance_schedule_and_rebuild_messaging_exception(
self.assertEqual(vm_states.SHELVED_OFFLOADED, instance.vm_state)
self.assertIsNone(instance.task_state)

@mock.patch.object(compute_rpcapi.ComputeAPI, 'unshelve_instance')
@mock.patch.object(conductor_manager.ComputeTaskManager,
'_schedule_instances', return_value=[[
objects.Selection(service_host='fake_host',
nodename='fake_node',
limits=None)]])
@mock.patch.object(scheduler_utils, 'build_request_spec',
return_value='req_spec')
@mock.patch.object(objects.InstanceMapping, 'get_by_instance_uuid')
@mock.patch.object(objects.RequestSpec, 'from_primitives')
def test_unshelve_instance_schedule_and_rebuild_volume_backed(
self, fp, mock_im):
self, fp, mock_im, mock_build, mock_schedule, mock_unshelve):
fake_spec = objects.RequestSpec()
fp.return_value = fake_spec
mock_im.return_value = objects.InstanceMapping(
Expand All @@ -1231,31 +1222,20 @@ def test_unshelve_instance_schedule_and_rebuild_volume_backed(
instance.save()
system_metadata = instance.system_metadata

self.mox.StubOutWithMock(scheduler_utils, 'build_request_spec')
self.mox.StubOutWithMock(self.conductor_manager, '_schedule_instances')
self.mox.StubOutWithMock(self.conductor_manager.compute_rpcapi,
'unshelve_instance')

scheduler_utils.build_request_spec(None,
mox.IgnoreArg()).AndReturn('req_spec')
fake_selection = objects.Selection(service_host="fake_host",
nodename="fake_node", limits=None)
self.conductor_manager._schedule_instances(self.context,
fake_spec, [instance.uuid], return_alternates=False).AndReturn(
[[fake_selection]])
self.conductor_manager.compute_rpcapi.unshelve_instance(self.context,
instance, 'fake_host', image=None,
filter_properties={'limits': {},
'retry': {'num_attempts': 1,
'hosts': [['fake_host',
'fake_node']]}},
node='fake_node')
self.mox.ReplayAll()

system_metadata['shelved_at'] = timeutils.utcnow()
system_metadata['shelved_host'] = 'fake-mini'
self.conductor_manager.unshelve_instance(self.context, instance)
fp.assert_called_once_with(self.context, 'req_spec', mock.ANY)
mock_build.assert_called_once_with(None, mock.ANY)
mock_schedule.assert_called_once_with(
self.context, fake_spec, [instance.uuid], return_alternates=False)
mock_unshelve.assert_called_once_with(
self.context, instance, 'fake_host', image=None,
filter_properties={'limits': {},
'retry': {'num_attempts': 1,
'hosts': [['fake_host',
'fake_node']]}},
node='fake_node')

def test_rebuild_instance(self):
inst_obj = self._create_fake_instance_obj()
Expand Down

0 comments on commit 53f14a7

Please sign in to comment.