diff options
author | Mark McLoughlin <markmc@redhat.com> | 2013-08-16 11:01:26 +0100 |
---|---|---|
committer | Mark McLoughlin <markmc@redhat.com> | 2013-08-16 11:08:50 +0100 |
commit | 001d66e6e56cdc946b5c6115423358206942bc9c (patch) | |
tree | 428840770c5150f8a47b369289d91f8ea09f6039 | |
parent | 747e1a4099e003025d523f6ec49395fc91c43f53 (diff) | |
download | oslo-messaging-001d66e6e56cdc946b5c6115423358206942bc9c.tar.gz |
Fix fake driver handling of failure replies
The driver reply() method is actually passed a full sys.exc_info()
tuple.
This was masked in the unit tests because the driver ended up basically
doing:
raise (ValueError, ValueError, ...)
which caused a new ValueError to be instantiated and the test was
satisified. However, if an exception type has some required arguments,
you'll get a TypeError when this statement attempts to instantiate it
with no arguments.
Change-Id: I4af9c5084954d7b9c5f02cdae3387d17c206985b
-rw-r--r-- | oslo/messaging/_drivers/impl_fake.py | 1 | ||||
-rw-r--r-- | tests/test_rpc_server.py | 20 |
2 files changed, 17 insertions, 4 deletions
diff --git a/oslo/messaging/_drivers/impl_fake.py b/oslo/messaging/_drivers/impl_fake.py index ef331b5..e1f204c 100644 --- a/oslo/messaging/_drivers/impl_fake.py +++ b/oslo/messaging/_drivers/impl_fake.py @@ -32,6 +32,7 @@ class FakeIncomingMessage(base.IncomingMessage): def reply(self, reply=None, failure=None, log_failure=True): if self._reply_q: + failure = failure[1] if failure else None self._reply_q.put((reply, failure)) diff --git a/tests/test_rpc_server.py b/tests/test_rpc_server.py index 27bc674..8577c56 100644 --- a/tests/test_rpc_server.py +++ b/tests/test_rpc_server.py @@ -279,12 +279,18 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin): class TestEndpoint(object): def ping(self, ctxt, arg): - raise ValueError + raise ValueError(arg) server_thread = self._setup_server(transport, TestEndpoint()) client = self._setup_client(transport) - self.assertRaises(ValueError, client.call, {}, 'ping', arg='foo') + try: + client.call({}, 'ping', arg='foo') + except Exception as ex: + self.assertIsInstance(ex, ValueError) + self.assertEquals(ex[0], 'dsfoo') + else: + self.assertTrue(False) self._stop_server(client, server_thread) @@ -294,12 +300,18 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin): class TestEndpoint(object): @messaging.expected_exceptions(ValueError) def ping(self, ctxt, arg): - raise ValueError + raise ValueError(arg) server_thread = self._setup_server(transport, TestEndpoint()) client = self._setup_client(transport) - self.assertRaises(ValueError, client.call, {}, 'ping', arg='foo') + try: + client.call({}, 'ping', arg='foo') + except Exception as ex: + self.assertIsInstance(ex, ValueError) + self.assertEquals(ex[0], 'dsfoo') + else: + self.assertTrue(False) self._stop_server(client, server_thread) |