summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@enovance.com>2014-07-07 12:25:12 +0000
committerVictor Stinner <victor.stinner@enovance.com>2014-07-07 14:23:00 +0000
commit71588adbb5a496d9a2d27029441c1afbebebf320 (patch)
tree8512a33917fbc7184ce5f8d52c665e82bca583fb
parent032639e677745a83a670a0c57737954f9f7d8ccd (diff)
downloadoslo-messaging-71588adbb5a496d9a2d27029441c1afbebebf320.tar.gz
Fix AMQPListener for polling with timeout
On timeout, poll() should return None, not raise an exception (Timeout). Add also an unit test. Change-Id: I1ed5ae2f093841111f0b691dddb879c16d218b73
-rw-r--r--[-rwxr-xr-x]oslo/messaging/_cmd/zmq_receiver.py0
-rw-r--r--oslo/messaging/_drivers/amqpdriver.py5
-rw-r--r--tests/drivers/test_impl_rabbit.py17
3 files changed, 21 insertions, 1 deletions
diff --git a/oslo/messaging/_cmd/zmq_receiver.py b/oslo/messaging/_cmd/zmq_receiver.py
index ae0713d..ae0713d 100755..100644
--- a/oslo/messaging/_cmd/zmq_receiver.py
+++ b/oslo/messaging/_cmd/zmq_receiver.py
diff --git a/oslo/messaging/_drivers/amqpdriver.py b/oslo/messaging/_drivers/amqpdriver.py
index 4398363..c5b2378 100644
--- a/oslo/messaging/_drivers/amqpdriver.py
+++ b/oslo/messaging/_drivers/amqpdriver.py
@@ -116,7 +116,10 @@ class AMQPListener(base.Listener):
timeout = deadline - time.time()
if timeout < 0:
return None
- self.conn.consume(limit=1, timeout=timeout)
+ try:
+ self.conn.consume(limit=1, timeout=timeout)
+ except rpc_common.Timeout:
+ return None
else:
self.conn.consume(limit=1)
diff --git a/tests/drivers/test_impl_rabbit.py b/tests/drivers/test_impl_rabbit.py
index f665b44..06f2af4 100644
--- a/tests/drivers/test_impl_rabbit.py
+++ b/tests/drivers/test_impl_rabbit.py
@@ -265,6 +265,23 @@ class TestSendReceive(test_utils.BaseTestCase):
TestSendReceive.generate_scenarios()
+class TestPollAsync(test_utils.BaseTestCase):
+
+ def setUp(self):
+ super(TestPollAsync, self).setUp()
+ self.messaging_conf.transport_driver = 'rabbit'
+ self.messaging_conf.in_memory = True
+
+ def test_poll_timeout(self):
+ transport = messaging.get_transport(self.conf)
+ self.addCleanup(transport.cleanup)
+ driver = transport._driver
+ target = messaging.Target(topic='testtopic')
+ listener = driver.listen(target)
+ received = listener.poll(timeout=0.050)
+ self.assertIsNone(received)
+
+
class TestRacyWaitForReply(test_utils.BaseTestCase):
def setUp(self):