diff --git a/oslo/messaging/_drivers/amqpdriver.py b/oslo/messaging/_drivers/amqpdriver.py index 5a84c1a89..6cd35bb03 100644 --- a/oslo/messaging/_drivers/amqpdriver.py +++ b/oslo/messaging/_drivers/amqpdriver.py @@ -204,7 +204,7 @@ class ReplyWaiter(object): # thread, it wakes up the other thread final_reply = None while True: - if self.conn_lock.acquire(blocking=False): + if self.conn_lock.acquire(False): try: reply, ending = self._poll_connection(msg_id) if reply: diff --git a/tests/test_rabbit.py b/tests/test_rabbit.py index 8266e6b0c..9ea084547 100644 --- a/tests/test_rabbit.py +++ b/tests/test_rabbit.py @@ -15,6 +15,7 @@ # under the License. import datetime +import threading import uuid import fixtures @@ -54,15 +55,28 @@ class TestRabbitDriver(test_utils.BaseTestCase): listener = driver.listen(target) - ctxt = {} - message = {'foo': 'bar'} + replies = [] - driver.send(target, ctxt, message) + def send_and_wait_for_reply(): + replies.append(driver.send(target, + {}, + {'foo': 'bar'}, + wait_for_reply=True)) + + sender = threading.Thread(target=send_and_wait_for_reply) + sender.start() received = listener.poll() self.assertTrue(received is not None) - self.assertEquals(received.ctxt, {}) - self.assertEquals(received.message, {'foo': 'bar'}) + self.assertEqual(received.ctxt, {}) + self.assertEqual(received.message, {'foo': 'bar'}) + + received.reply({'bar': 'foo'}) + + sender.join() + + self.assertEqual(len(replies), 1) + self.assertEqual(replies[0], {'bar': 'foo'}) def _declare_queue(target):