From 9d74ee40c6080a8ee656e0783fc72287e0d55e4d Mon Sep 17 00:00:00 2001 From: Matthew Booth <mbooth@redhat.com> Date: Mon, 19 Oct 2015 10:40:15 +0100 Subject: [PATCH] Fix assumptions in test_server_wait_method test_server_wait_method was calling server.wait without having previously called server.start and server.stop. This happened to work because it also injected server._executor_obj. This is problematic, though, as it assumes internal details of the server and does not represent the calling contract of server.wait, which is that it must follow server.stop (which must itself also follow server.start). This change makes the necessary changes to call server.wait in the correct sequence. Change-Id: I205683ac6e0f2d64606bb06d08d3d1419f7645f4 --- oslo_messaging/tests/rpc/test_server.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/oslo_messaging/tests/rpc/test_server.py b/oslo_messaging/tests/rpc/test_server.py index 93b5e9d69..9a2b53b24 100644 --- a/oslo_messaging/tests/rpc/test_server.py +++ b/oslo_messaging/tests/rpc/test_server.py @@ -117,14 +117,23 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin): endpoints = [object()] serializer = object() + class MagicMockIgnoreArgs(mock.MagicMock): + '''A MagicMock which can never misinterpret the arguments passed to + it during construction.''' + + def __init__(self, *args, **kwargs): + super(MagicMockIgnoreArgs, self).__init__() + server = oslo_messaging.get_rpc_server(transport, target, endpoints, serializer=serializer) # Mocking executor - server._executor_obj = mock.Mock() + server._executor_cls = MagicMockIgnoreArgs # Here assigning executor's listener object to listener variable # before calling wait method, because in wait method we are # setting executor to None. + server.start() listener = server._executor_obj.listener + server.stop() # call server wait method server.wait() self.assertIsNone(server._executor_obj)