def test_process_message(self): msg_runner = fakes.get_message_runner('api-cell') dispatcher = rpc_driver.InterCellRPCDispatcher(msg_runner) message = messaging._BroadcastMessage(msg_runner, self.ctxt, 'fake', {}, 'down', fanout=True) call_info = {} def _fake_message_from_json(json_message): call_info['json_message'] = json_message self.assertEqual(message.to_json(), json_message) return message def _fake_process(): call_info['process_called'] = True self.stubs.Set(msg_runner, 'message_from_json', _fake_message_from_json) self.stubs.Set(message, 'process', _fake_process) dispatcher.process_message(self.ctxt, message.to_json()) self.assertEqual(message.to_json(), call_info['json_message']) self.assertTrue(call_info['process_called'])
def test_send_message_to_cell_cast(self): msg_runner = fakes.get_message_runner("api-cell") cell_state = fakes.get_cell_state("api-cell", "child-cell2") message = messaging._TargetedMessage(msg_runner, self.ctxt, "fake", {}, "down", cell_state, fanout=False) expected_server_params = { "hostname": "rpc_host2", "password": "******", "port": 3092, "username": "******", "virtual_host": "rpc_vhost2", } expected_url = ( "rabbit://%(username)s:%(password)s@" "%(hostname)s:%(port)d/%(virtual_host)s" % expected_server_params ) def check_transport_url(cell_state): return cell_state.db_info["transport_url"] == expected_url rpcapi = self.driver.intercell_rpcapi rpcclient = self.mox.CreateMockAnything() self.mox.StubOutWithMock(rpcapi, "_get_client") rpcapi._get_client(mox.Func(check_transport_url), "cells.intercell.targeted").AndReturn(rpcclient) rpcclient.cast(mox.IgnoreArg(), "process_message", message=message.to_json()) self.mox.ReplayAll() self.driver.send_message_to_cell(cell_state, message)
def test_rpc_topic_uses_message_type(self): self.flags(rpc_driver_queue_base="cells.intercell42", group="cells") msg_runner = fakes.get_message_runner("api-cell") cell_state = fakes.get_cell_state("api-cell", "child-cell2") message = messaging._BroadcastMessage(msg_runner, self.ctxt, "fake", {}, "down", fanout=True) message.message_type = "fake-message-type" expected_server_params = { "hostname": "rpc_host2", "password": "******", "port": 3092, "username": "******", "virtual_host": "rpc_vhost2", } expected_url = ( "rabbit://%(username)s:%(password)s@" "%(hostname)s:%(port)d/%(virtual_host)s" % expected_server_params ) def check_transport_url(cell_state): return cell_state.db_info["transport_url"] == expected_url rpcapi = self.driver.intercell_rpcapi rpcclient = self.mox.CreateMockAnything() self.mox.StubOutWithMock(rpcapi, "_get_client") rpcapi._get_client(mox.Func(check_transport_url), "cells.intercell42.fake-message-type").AndReturn(rpcclient) rpcclient.prepare(fanout=True).AndReturn(rpcclient) rpcclient.cast(mox.IgnoreArg(), "process_message", message=message.to_json()) self.mox.ReplayAll() self.driver.send_message_to_cell(cell_state, message)
def test_send_message_to_cell_cast(self): msg_runner = fakes.get_message_runner('api-cell') cell_state = fakes.get_cell_state('api-cell', 'child-cell2') message = messaging._TargetedMessage(msg_runner, self.ctxt, 'fake', {}, 'down', cell_state, fanout=False) expected_server_params = {'hostname': 'rpc_host2', 'password': '******', 'port': 3092, 'username': '******', 'virtual_host': 'rpc_vhost2'} expected_url = ('rabbit://%(username)s:%(password)s@' '%(hostname)s:%(port)d/%(virtual_host)s' % expected_server_params) rpcapi = self.driver.intercell_rpcapi rpcclient = mock.Mock() with mock.patch.object(rpcapi, '_get_client') as m_get_client: m_get_client.return_value = rpcclient self.driver.send_message_to_cell(cell_state, message) m_get_client.assert_called_with(cell_state, 'cells.intercell.targeted') self.assertEqual(expected_url, cell_state.db_info['transport_url']) rpcclient.cast.assert_called_with(mock.ANY, 'process_message', message=message.to_json())
def test_start_servers(self, mock_get_server): self.flags(rpc_driver_queue_base='cells.intercell42', group='cells') fake_msg_runner = fakes.get_message_runner('api-cell') class FakeInterCellRPCDispatcher(object): def __init__(_self, msg_runner): self.assertEqual(fake_msg_runner, msg_runner) endpoints = [test.MatchType(FakeInterCellRPCDispatcher)] self.stub_out('nova.cells.rpc_driver.InterCellRPCDispatcher', FakeInterCellRPCDispatcher) rpcserver = mock.Mock() mock_get_server.return_value = rpcserver expected_mock_get_server_called_list = [] for message_type in messaging.MessageRunner.get_message_types(): topic = 'cells.intercell42.' + message_type target = oslo_messaging.Target(topic=topic, server=CONF.host) expected_mock_get_server_called_list.append( mock.call(target, endpoints=endpoints)) self.driver.start_servers(fake_msg_runner) rpcserver.start.assert_called() self.assertEqual(expected_mock_get_server_called_list, mock_get_server.call_args_list) self.assertEqual(len(messaging.MessageRunner.get_message_types()), rpcserver.start.call_count) self.assertEqual(len(messaging.MessageRunner.get_message_types()), mock_get_server.call_count)
def test_rpc_topic_uses_message_type(self): self.flags(rpc_driver_queue_base='cells.intercell42', group='cells') msg_runner = fakes.get_message_runner('api-cell') cell_state = fakes.get_cell_state('api-cell', 'child-cell2') message = messaging._BroadcastMessage(msg_runner, self.ctxt, 'fake', {}, 'down', fanout=True) message.message_type = 'fake-message-type' expected_server_params = {'hostname': 'rpc_host2', 'password': '******', 'port': 3092, 'username': '******', 'virtual_host': 'rpc_vhost2'} expected_url = ('rabbit://%(username)s:%(password)s@' '%(hostname)s:%(port)d/%(virtual_host)s' % expected_server_params) def check_transport_url(cell_state): return cell_state.db_info['transport_url'] == expected_url rpcapi = self.driver.intercell_rpcapi rpcclient = self.mox.CreateMockAnything() self.mox.StubOutWithMock(rpcapi, '_get_client') rpcapi._get_client( mox.Func(check_transport_url), 'cells.intercell42.fake-message-type').AndReturn(rpcclient) rpcclient.prepare(fanout=True).AndReturn(rpcclient) rpcclient.cast(mox.IgnoreArg(), 'process_message', message=message.to_json()) self.mox.ReplayAll() self.driver.send_message_to_cell(cell_state, message)
def test_send_message_to_cell_cast(self): msg_runner = fakes.get_message_runner('api-cell') cell_state = fakes.get_cell_state('api-cell', 'child-cell2') message = messaging._TargetedMessage(msg_runner, self.ctxt, 'fake', {}, 'down', cell_state, fanout=False) expected_server_params = {'hostname': 'rpc_host2', 'password': '******', 'port': 3092, 'username': '******', 'virtual_host': 'rpc_vhost2'} expected_url = ('rabbit://%(username)s:%(password)s@' '%(hostname)s:%(port)d/%(virtual_host)s' % expected_server_params) def check_transport_url(cell_state): return cell_state.db_info['transport_url'] == expected_url rpcapi = self.driver.intercell_rpcapi rpcclient = self.mox.CreateMockAnything() self.mox.StubOutWithMock(rpcapi, '_get_client') rpcapi._get_client( mox.Func(check_transport_url), 'cells.intercell.targeted').AndReturn(rpcclient) rpcclient.cast(mox.IgnoreArg(), 'process_message', message=message.to_json()) self.mox.ReplayAll() self.driver.send_message_to_cell(cell_state, message)
def test_rpc_topic_uses_message_type(self): self.flags(rpc_driver_queue_base='cells.intercell42', group='cells') msg_runner = fakes.get_message_runner('api-cell') cell_state = fakes.get_cell_state('api-cell', 'child-cell2') message = messaging._BroadcastMessage(msg_runner, self.ctxt, 'fake', {}, 'down', fanout=True) message.message_type = 'fake-message-type' expected_server_params = {'hostname': 'rpc_host2', 'password': '******', 'port': 3092, 'username': '******', 'virtual_host': 'rpc_vhost2'} expected_url = ('rabbit://%(username)s:%(password)s@' '%(hostname)s:%(port)d/%(virtual_host)s' % expected_server_params) rpcapi = self.driver.intercell_rpcapi rpcclient = mock.Mock() with mock.patch.object(rpcapi, '_get_client') as m_get_client: m_get_client.return_value = rpcclient rpcclient.prepare(fanout=True) rpcclient.prepare.return_value = rpcclient self.driver.send_message_to_cell(cell_state, message) m_get_client.assert_called_with(cell_state, 'cells.intercell42.fake-message-type') self.assertEqual(expected_url, cell_state.db_info['transport_url']) rpcclient.prepare.assert_called_with(fanout=True) rpcclient.cast.assert_called_with(mock.ANY, 'process_message', message=message.to_json())
def _init_cells_scheduler(self): fakes.init(self) self.msg_runner = fakes.get_message_runner("api-cell") self.scheduler = self.msg_runner.scheduler self.state_manager = self.msg_runner.state_manager self.my_cell_state = self.state_manager.get_my_state() self.ctxt = context.RequestContext("fake", "fake") instance_uuids = [] for x in range(3): instance_uuids.append(uuidutils.generate_uuid()) self.instance_uuids = instance_uuids self.instances = [objects.Instance(uuid=uuid, id=id) for id, uuid in enumerate(instance_uuids)] self.request_spec = { "num_instances": len(instance_uuids), "instance_properties": self.instances[0], "instance_type": "fake_type", "image": "fake_image", } self.build_inst_kwargs = { "instances": self.instances, "image": "fake_image", "filter_properties": {"instance_type": "fake_type"}, "security_groups": "fake_sec_groups", "block_device_mapping": "fake_bdm", }
def _init_cells_scheduler(self): fakes.init(self) self.msg_runner = fakes.get_message_runner('api-cell') self.scheduler = self.msg_runner.scheduler self.state_manager = self.msg_runner.state_manager self.my_cell_state = self.state_manager.get_my_state() self.ctxt = context.RequestContext('fake', 'fake') instance_uuids = [] for x in xrange(3): instance_uuids.append(uuidutils.generate_uuid()) self.instance_uuids = instance_uuids self.instances = [ objects.Instance(uuid=uuid, id=id) for id, uuid in enumerate(instance_uuids) ] self.request_spec = { 'num_instances': len(instance_uuids), 'instance_properties': self.instances[0], 'instance_type': 'fake_type', 'image': 'fake_image' } self.build_inst_kwargs = { 'instances': self.instances, 'image': 'fake_image', 'filter_properties': { 'instance_type': 'fake_type' }, 'security_groups': 'fake_sec_groups', 'block_device_mapping': 'fake_bdm' }
def setUp(self): super(_FilterTestClass, self).setUp() fakes.init(self) self.msg_runner = fakes.get_message_runner('api-cell') self.scheduler = self.msg_runner.scheduler self.my_cell_state = self.msg_runner.state_manager.get_my_state() self.filter_handler = filters.CellFilterHandler() self.filter_classes = self.filter_handler.get_matching_classes( [self.filter_cls_name]) self.context = context.RequestContext('fake', 'fake', is_admin=True)
def setUp(self): super(_FilterTestClass, self).setUp() fakes.init(self) self.msg_runner = fakes.get_message_runner("api-cell") self.scheduler = self.msg_runner.scheduler self.my_cell_state = self.msg_runner.state_manager.get_my_state() self.filter_handler = filters.CellFilterHandler() filter_classes = self.filter_handler.get_matching_classes([self.filter_cls_name]) self.filters = [cls() for cls in filter_classes] self.context = context.RequestContext("fake", "fake", is_admin=True)
def test_process_message(self): msg_runner = fakes.get_message_runner("api-cell") dispatcher = rpc_driver.InterCellRPCDispatcher(msg_runner) message = messaging._BroadcastMessage(msg_runner, self.ctxt, "fake", {}, "down", fanout=True) call_info = {} def _fake_message_from_json(json_message): call_info["json_message"] = json_message self.assertEqual(message.to_json(), json_message) return message def _fake_process(): call_info["process_called"] = True self.stubs.Set(msg_runner, "message_from_json", _fake_message_from_json) self.stubs.Set(message, "process", _fake_process) dispatcher.process_message(self.ctxt, message.to_json()) self.assertEqual(message.to_json(), call_info["json_message"]) self.assertTrue(call_info["process_called"])
def test_process_message(self): msg_runner = fakes.get_message_runner('api-cell') dispatcher = rpc_driver.InterCellRPCDispatcher(msg_runner) message = messaging._BroadcastMessage(msg_runner, self.ctxt, 'fake', {}, 'down', fanout=True) call_info = {} def _fake_message_from_json(json_message): call_info['json_message'] = json_message self.assertEqual(message.to_json(), json_message) return message def _fake_process(): call_info['process_called'] = True msg_runner.message_from_json = _fake_message_from_json message.process = _fake_process dispatcher.process_message(self.ctxt, message.to_json()) self.assertEqual(message.to_json(), call_info['json_message']) self.assertTrue(call_info['process_called'])
def _init_cells_scheduler(self): fakes.init(self) self.msg_runner = fakes.get_message_runner('api-cell') self.scheduler = self.msg_runner.scheduler self.state_manager = self.msg_runner.state_manager self.my_cell_state = self.state_manager.get_my_state() self.ctxt = context.RequestContext('fake', 'fake') instance_uuids = [] for x in xrange(3): instance_uuids.append(uuidutils.generate_uuid()) self.instance_uuids = instance_uuids self.instances = [{'uuid': uuid} for uuid in instance_uuids] self.request_spec = { 'instance_uuids': instance_uuids, 'instance_properties': self.instances[0], 'instance_type': 'fake_type', 'image': 'fake_image'} self.build_inst_kwargs = { 'instances': self.instances, 'image': 'fake_image', 'filter_properties': {'instance_type': 'fake_type'}, 'security_groups': 'fake_sec_groups', 'block_device_mapping': 'fake_bdm'}
def test_start_servers(self): self.flags(rpc_driver_queue_base="cells.intercell42", group="cells") fake_msg_runner = fakes.get_message_runner("api-cell") class FakeInterCellRPCDispatcher(object): def __init__(_self, msg_runner): self.assertEqual(fake_msg_runner, msg_runner) self.stubs.Set(rpc_driver, "InterCellRPCDispatcher", FakeInterCellRPCDispatcher) self.mox.StubOutWithMock(rpc, "get_server") for message_type in messaging.MessageRunner.get_message_types(): topic = "cells.intercell42." + message_type target = oslo_messaging.Target(topic=topic, server=CONF.host) endpoints = [mox.IsA(FakeInterCellRPCDispatcher)] rpcserver = self.mox.CreateMockAnything() rpc.get_server(target, endpoints=endpoints).AndReturn(rpcserver) rpcserver.start() self.mox.ReplayAll() self.driver.start_servers(fake_msg_runner)
def test_start_servers(self): self.flags(rpc_driver_queue_base='cells.intercell42', group='cells') fake_msg_runner = fakes.get_message_runner('api-cell') class FakeInterCellRPCDispatcher(object): def __init__(_self, msg_runner): self.assertEqual(fake_msg_runner, msg_runner) self.stubs.Set(rpc_driver, 'InterCellRPCDispatcher', FakeInterCellRPCDispatcher) self.mox.StubOutWithMock(rpc, 'get_server') for message_type in messaging.MessageRunner.get_message_types(): topic = 'cells.intercell42.' + message_type target = oslo_messaging.Target(topic=topic, server=CONF.host) endpoints = [mox.IsA(FakeInterCellRPCDispatcher)] rpcserver = self.mox.CreateMockAnything() rpc.get_server(target, endpoints=endpoints).AndReturn(rpcserver) rpcserver.start() self.mox.ReplayAll() self.driver.start_servers(fake_msg_runner)