summaryrefslogtreecommitdiff
path: root/cpp/src/tests/queue_flow_limit_tests.py
diff options
context:
space:
mode:
authorKen Giusti <kgiusti@apache.org>2011-05-05 21:41:40 +0000
committerKen Giusti <kgiusti@apache.org>2011-05-05 21:41:40 +0000
commit2e6c312e97a679187802272defcd873c87a9004d (patch)
tree3a52b1c902a87f3ec888bb2963c967e894600c7b /cpp/src/tests/queue_flow_limit_tests.py
parent9a752cf0eaf17a607b1ac3dd498a835cf2ab690f (diff)
downloadqpid-python-2e6c312e97a679187802272defcd873c87a9004d.tar.gz
QPID-3244: unit test for the fix.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1099979 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests/queue_flow_limit_tests.py')
-rw-r--r--cpp/src/tests/queue_flow_limit_tests.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/cpp/src/tests/queue_flow_limit_tests.py b/cpp/src/tests/queue_flow_limit_tests.py
index d761bde40d..dec7cfb3af 100644
--- a/cpp/src/tests/queue_flow_limit_tests.py
+++ b/cpp/src/tests/queue_flow_limit_tests.py
@@ -325,5 +325,47 @@ class QueueFlowLimitTests(TestBase010):
self.verify_limit(TestQ(oid))
+ def test_blocked_queue_delete(self):
+ """ Verify that blocked senders are unblocked when a queue that is flow
+ controlled is deleted.
+ """
+
+ class BlockedSender(Thread):
+ def __init__(self, tester, queue, count, capacity=10):
+ self.tester = tester
+ self.queue = queue
+ self.count = count
+ self.capacity = capacity
+ Thread.__init__(self)
+ self.done = False
+ self.start()
+ def run(self):
+ # spawn qpid-send
+ p = self.tester._start_qpid_send(self.queue,
+ self.count,
+ self.capacity)
+ p.close() # waits for qpid-send to complete
+ self.done = True
+
+ self.startQmf();
+ oid = self._create_queue("kill-q", stop_size=10, resume_size=2)
+ q = self.qmf.getObjects(_objectId=oid)[0]
+ self.failIf(q.flowStopped)
+
+ sender = BlockedSender(self, "kill-q", count=100)
+ # wait for flow control
+ deadline = time() + 10
+ while (not q.flowStopped) and time() < deadline:
+ q.update()
+
+ self.failUnless(q.flowStopped)
+ self.failIf(sender.done) # sender blocked
+
+ self._delete_queue("kill-q")
+ sender.join(5)
+ self.failIf(sender.isAlive())
+ self.failUnless(sender.done)
+
+