summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark McLoughlin <markmc@redhat.com>2013-08-15 21:06:31 +0100
committerMark McLoughlin <markmc@redhat.com>2013-08-15 21:11:38 +0100
commit747e1a4099e003025d523f6ec49395fc91c43f53 (patch)
treef1ea4bed54cf36a364b2d4679e67d5c04758f4fd
parentf95c5bb6ed00e6eed87159ad105bb0817ada99eb (diff)
downloadoslo-messaging-747e1a4099e003025d523f6ec49395fc91c43f53.tar.gz
Fix handling of None, etc. replies1.2.0a5
A rather embarassing and obvious bug - we're currently not allowing endpoint methods to send replies of None, '', False, [], {}, etc. Change-Id: Ifc5ff8f308f526197559a4df7bed244cff6ed3c1
-rw-r--r--oslo/messaging/_executors/base.py4
-rw-r--r--tests/test_rpc_server.py14
2 files changed, 13 insertions, 5 deletions
diff --git a/oslo/messaging/_executors/base.py b/oslo/messaging/_executors/base.py
index 7a58bb4..9411481 100644
--- a/oslo/messaging/_executors/base.py
+++ b/oslo/messaging/_executors/base.py
@@ -32,9 +32,7 @@ class ExecutorBase(object):
def _dispatch(self, incoming):
try:
- reply = self.callback(incoming.ctxt, incoming.message)
- if reply:
- incoming.reply(reply)
+ incoming.reply(self.callback(incoming.ctxt, incoming.message))
except messaging.ExpectedException as e:
_LOG.debug('Expected exception during message handling (%s)' %
e.exc_info[1])
diff --git a/tests/test_rpc_server.py b/tests/test_rpc_server.py
index 394bf99..27bc674 100644
--- a/tests/test_rpc_server.py
+++ b/tests/test_rpc_server.py
@@ -46,10 +46,10 @@ class ServerSetupMixin(object):
class TestSerializer(object):
def serialize_entity(self, ctxt, entity):
- return 's' + (entity or '')
+ return ('s' + entity) if entity else entity
def deserialize_entity(self, ctxt, entity):
- return 'd' + (entity or '')
+ return ('d' + entity) if entity else entity
def serialize_context(self, ctxt):
return dict([(k, 's' + v) for k, v in ctxt.items()])
@@ -228,6 +228,11 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin):
server_thread = self._setup_server(transport, TestEndpoint())
client = self._setup_client(transport)
+ self.assertIsNone(client.call({}, 'ping', arg=None))
+ self.assertEqual(client.call({}, 'ping', arg=0), 0)
+ self.assertEqual(client.call({}, 'ping', arg=False), False)
+ self.assertEqual(client.call({}, 'ping', arg=[]), [])
+ self.assertEqual(client.call({}, 'ping', arg={}), {})
self.assertEqual(client.call({}, 'ping', arg='foo'), 'dsdsfoo')
self._stop_server(client, server_thread)
@@ -243,6 +248,11 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin):
client = self._setup_client(transport)
direct = client.prepare(server='testserver')
+ self.assertIsNone(direct.call({}, 'ping', arg=None))
+ self.assertEqual(client.call({}, 'ping', arg=0), 0)
+ self.assertEqual(client.call({}, 'ping', arg=False), False)
+ self.assertEqual(client.call({}, 'ping', arg=[]), [])
+ self.assertEqual(client.call({}, 'ping', arg={}), {})
self.assertEqual(direct.call({}, 'ping', arg='foo'), 'dsdsfoo')
self._stop_server(client, server_thread)