This is an automated email from the ASF dual-hosted git repository. kgiusti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
commit 51fb44adb68b67a17cef3d9374b19557bccc180d Author: Kenneth Giusti <[email protected]> AuthorDate: Wed Jan 26 14:49:13 2022 -0500 DISPATCH-2312: replace no-op test with credit test This closes #1497 --- tests/system_tests_one_router.py | 62 +++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/tests/system_tests_one_router.py b/tests/system_tests_one_router.py index c36de30..9b74e29 100644 --- a/tests/system_tests_one_router.py +++ b/tests/system_tests_one_router.py @@ -399,10 +399,14 @@ class OneRouterTest(TestCase): test.run() self.assertIsNone(test.error) - def test_07_unsettled_undeliverable(self) : + def test_07_no_consumer_no_credit(self): + """ + Ensure a sending client never gets credit if there is no + consumer present. + """ addr = self.address + '/closest/' + str(OneRouterTest.closest_count) OneRouterTest.closest_count += 1 - test = UsettledUndeliverable(addr, n_messages=10) + test = NoConsumerNoCredit(addr) test.run() self.assertIsNone(test.error) @@ -1863,35 +1867,31 @@ class PropagatedDisposition (MessagingHandler) : dlv.update(Delivery.ACCEPTED) -class UsettledUndeliverable (MessagingHandler) : - def __init__(self, - addr, - n_messages - ) : - super(UsettledUndeliverable, self) . __init__(prefetch=n_messages) - self.addr = addr - self.n_messages = n_messages +class NoConsumerNoCredit(MessagingHandler): + def __init__(self, addr): + super(NoConsumerNoCredit, self).__init__() + self.addr = addr + self.test_timer = None + self.credit_timer = None + self.sender = None + self.bailing = False - self.test_timer = None - self.sender = None - self.n_sent = 0 - self.n_received = 0 - self.bailing = False - - def run(self) : + def run(self): Container(self).run() - def bail(self, travail) : + def bail(self, travail): self.bailing = True self.error = travail self.send_conn.close() - self.test_timer.cancel() + self.test_timer and self.test_timer.cancel() + self.credit_timer and self.credit_timer.cancel() def timeout(self): - if self.n_sent > 0 : - self.bail("Messages sent with no receiver.") - else : - self.bail(None) + self.bail("Test timed out - should not happen!") + + def on_timer_task(self, event): + # no credit arrived: success + self.bail(None) def on_start(self, event): self.send_conn = event.container.connect(self.addr) @@ -1899,15 +1899,17 @@ class UsettledUndeliverable (MessagingHandler) : # Uh-oh. We are not creating a receiver! self.test_timer = event.reactor.schedule(TIMEOUT, TestTimeout(self)) - def on_sendable(self, event) : - while self.n_sent < self.n_messages : - msg = Message(body=self.n_sent) - dlv = self.sender.send(msg) - dlv.settle() - self.n_sent += 1 + def on_link_opened(self, event): + # delay to ensure no credit arrives + if event.link == self.sender: + self.credit_timer = event.reactor.schedule(1.0, self) + + def on_sendable(self, event): + if event.link == self.sender: + self.bail("Received credit even though no consumer present") def on_message(self, event) : - self.n_received += 1 + self.bail("on_message should never happen") class ThreeAck (MessagingHandler) : --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
