From 6f4e32ad5372465d4505b94cc69064ce08805bc4 Mon Sep 17 00:00:00 2001 From: Kenneth Giusti Date: Tue, 31 Mar 2015 11:23:28 -0400 Subject: [PATCH] Properly deserialize received AMQP 1.0 messages Change-Id: I5c27c06ca4f5b90e5c54a9519b70f9be0232abff Closes-bug: #1438742 --- .../_drivers/protocols/amqp/driver.py | 3 ++- oslo_messaging/tests/test_amqp_driver.py | 27 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/oslo_messaging/_drivers/protocols/amqp/driver.py b/oslo_messaging/_drivers/protocols/amqp/driver.py index ba27f0ce5..03dacc35a 100644 --- a/oslo_messaging/_drivers/protocols/amqp/driver.py +++ b/oslo_messaging/_drivers/protocols/amqp/driver.py @@ -142,7 +142,8 @@ def marshal_request(request, context, envelope): def unmarshal_request(message): data = jsonutils.loads(message.body) - return (data.get("request"), data.get("context")) + msg = common.deserialize_msg(data.get("request")) + return (msg, data.get("context")) class ProtonIncomingMessage(base.IncomingMessage): diff --git a/oslo_messaging/tests/test_amqp_driver.py b/oslo_messaging/tests/test_amqp_driver.py index 767ff0594..0d56f9639 100644 --- a/oslo_messaging/tests/test_amqp_driver.py +++ b/oslo_messaging/tests/test_amqp_driver.py @@ -260,23 +260,30 @@ class TestAmqpNotification(_AmqpBrokerTestCase): (oslo_messaging.Target(topic="topic-2"), 'debug')] nl = driver.listen_for_notifications(notifications, None) - listener = _ListenerThread(nl, 3) + # send one for each support version: + msg_count = len(notifications) * 2 + listener = _ListenerThread(nl, msg_count) targets = ['topic-1.info', 'topic-1.bad', # should be dropped 'bad-topic.debug', # should be dropped - 'topic-1.error', 'topic-2.debug'] + 'topic-1.error', + 'topic-2.debug'] + + for version in (1.0, 2.0): + for t in targets: + driver.send_notification(oslo_messaging.Target(topic=t), + "context", {'target': t}, + version) - for t in targets: - driver.send_notification(oslo_messaging.Target(topic=t), - "context", {'target': t}, - 1.0) listener.join(timeout=30) self.assertFalse(listener.isAlive()) topics = [x.message.get('target') for x in listener.get_messages()] - self.assertTrue('topic-1.info' in topics) - self.assertTrue('topic-1.error' in topics) - self.assertTrue('topic-2.debug' in topics) - self.assertEqual(self._broker.dropped_count, 2) + + self.assertEqual(len(topics), msg_count) + self.assertEqual(topics.count('topic-1.info'), 2) + self.assertEqual(topics.count('topic-1.error'), 2) + self.assertEqual(topics.count('topic-2.debug'), 2) + self.assertEqual(self._broker.dropped_count, 4) driver.cleanup()