summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/tests_0-10/tx.py27
1 files changed, 24 insertions, 3 deletions
diff --git a/python/tests_0-10/tx.py b/python/tests_0-10/tx.py
index 6a682e9ae7..3fd1065af3 100644
--- a/python/tests_0-10/tx.py
+++ b/python/tests_0-10/tx.py
@@ -77,8 +77,9 @@ class TxTests(TestBase):
"""
Test that a channel closed with an open transaction is effectively rolled back
"""
- channel = self.channel
- queue_a, queue_b, queue_c = self.perform_txn_work(channel, "tx-autorollback-a", "tx-autorollback-b", "tx-autorollback-c")
+ channel2 = self.client.channel(2)
+ channel2.session_open()
+ queue_a, queue_b, queue_c = self.perform_txn_work(channel2, "tx-autorollback-a", "tx-autorollback-b", "tx-autorollback-c")
for q in [queue_a, queue_b, queue_c]:
try:
@@ -86,7 +87,18 @@ class TxTests(TestBase):
self.fail("Got unexpected message: " + extra.content.body)
except Empty: None
- channel.tx_rollback()
+ channel2.session_close()
+ channel = self.channel
+ channel.tx_select()
+
+ self.subscribe(channel, queue="tx-autorollback-a", destination="qa", confirm_mode=1)
+ queue_a = self.client.queue("qa")
+
+ self.subscribe(channel, queue="tx-autorollback-b", destination="qb", confirm_mode=1)
+ queue_b = self.client.queue("qb")
+
+ self.subscribe(channel, queue="tx-autorollback-c", destination="qc", confirm_mode=1)
+ queue_c = self.client.queue("qc")
#check results
for i in range(1, 5):
@@ -124,8 +136,17 @@ class TxTests(TestBase):
self.fail("Got unexpected message: " + extra.content.body)
except Empty: None
+ #stop subscriptions (ensures no delivery occurs during rollback as messages are requeued)
+ for d in ["sub_a", "sub_b", "sub_c"]:
+ channel.message_stop(destination=d)
+
channel.tx_rollback()
+ #restart susbcriptions
+ for d in ["sub_a", "sub_b", "sub_c"]:
+ channel.message_flow(destination=d, unit=0, value=0xFFFFFFFF)
+ channel.message_flow(destination=d, unit=1, value=0xFFFFFFFF)
+
#check results
for i in range(1, 5):
msg = queue_a.get(timeout=1)