From 9cb803ee1068f05eb1c8e9ce332087c869dad127 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc@redhat.com>
Date: Sun, 16 Jun 2013 12:23:11 +0100
Subject: [PATCH] Fix fake driver with eventlet

By storing the reply_q on the listener, we were assuming there was only
one message being dispatched at the time. Put it on the incoming message
instead and use it directly in reply().
---
 oslo/messaging/_drivers/impl_fake.py | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/oslo/messaging/_drivers/impl_fake.py b/oslo/messaging/_drivers/impl_fake.py
index 3a65cf30e..96b4e5b8e 100644
--- a/oslo/messaging/_drivers/impl_fake.py
+++ b/oslo/messaging/_drivers/impl_fake.py
@@ -35,8 +35,14 @@ class InvalidTarget(base.TransportDriverError, ValueError):
 
 class FakeIncomingMessage(base.IncomingMessage):
 
+    def __init__(self, listener, ctxt, message, reply_q):
+        super(FakeIncomingMessage, self).__init__(listener, ctxt, message)
+        self._reply_q = reply_q
+
     def reply(self, reply=None, failure=None):
-        self.listener._deliver_reply(reply, failure)
+        # FIXME: handle failure
+        if self._reply_q:
+            self._reply_q.put(reply)
 
     def done(self):
         pass
@@ -48,18 +54,11 @@ class FakeListener(base.Listener):
         super(FakeListener, self).__init__(driver, target)
         self._exchange = exchange
 
-    def _deliver_reply(self, reply=None, failure=None):
-        # FIXME: handle failure
-        if self._reply_q:
-            self._reply_q.put(reply)
-
     def poll(self):
-        self._reply_q = None
         while True:
             (ctxt, message, reply_q) = self._exchange.poll(self.target)
             if message is not None:
-                self._reply_q = reply_q
-                return FakeIncomingMessage(self, ctxt, message)
+                return FakeIncomingMessage(self, ctxt, message, reply_q)
             time.sleep(.05)