From 177706c3e6fb0905ecaa0074e4697ed1a75c47af Mon Sep 17 00:00:00 2001 From: Stefan Allius Date: Sun, 19 May 2024 21:17:56 +0200 Subject: [PATCH] test Modbus retries --- app/tests/test_modbus.py | 43 ++++++++++++++++++++++++++++++++-------- app/tests/test_talent.py | 2 ++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/app/tests/test_modbus.py b/app/tests/test_modbus.py index 8ea4637..fed9c09 100644 --- a/app/tests/test_modbus.py +++ b/app/tests/test_modbus.py @@ -13,7 +13,7 @@ class TestHelper(Modbus): self.db = Infos() self.pdu = None self.send_calls = 0 - def send_cb(self, pdu: bytearray): + def send_cb(self, pdu: bytearray, retrans: bool): self.pdu = pdu self.send_calls += 1 @@ -247,19 +247,46 @@ def test_queue2(): async def test_timeout(): assert asyncio.get_running_loop() mb = TestHelper() + mb.max_retries = 2 assert asyncio.get_running_loop() == mb.loop mb.build_msg(1,3,0x3007,6) mb.build_msg(1,6,0x2008,4) + assert mb.que.qsize() == 1 assert mb.req_pend - + assert mb.retry_cnt == 0 assert mb.send_calls == 1 assert mb.pdu == b'\x01\x030\x07\x00\x06{\t' - await asyncio.sleep(1.1) # wait for first timeout and next pdu - assert mb.req_pend - assert mb.send_calls == 2 - assert mb.pdu == b'\x01\x06\x20\x08\x00\x04\x02\x0b' - await asyncio.sleep(1.1) # wait for second timout - assert not mb.req_pend + mb.pdu = None + await asyncio.sleep(1.1) # wait for first timeout and retransmittion + assert mb.que.qsize() == 1 + assert mb.req_pend + assert mb.retry_cnt == 1 + assert mb.send_calls == 2 + assert mb.pdu == b'\x01\x030\x07\x00\x06{\t' + + mb.pdu = None + await asyncio.sleep(1.1) # wait for second timeout and retransmittion + assert mb.que.qsize() == 1 + assert mb.req_pend + assert mb.retry_cnt == 2 + assert mb.send_calls == 3 + assert mb.pdu == b'\x01\x030\x07\x00\x06{\t' + + mb.pdu = None + await asyncio.sleep(1.1) # wait for third timeout and next pdu assert mb.que.qsize() == 0 + assert mb.req_pend + assert mb.retry_cnt == 0 + assert mb.send_calls == 4 + assert mb.pdu == b'\x01\x06\x20\x08\x00\x04\x02\x0b' + + mb.max_retries = 0 # next pdu without retranmsission + await asyncio.sleep(1.1) # wait for fourth timout + assert mb.que.qsize() == 0 + assert not mb.req_pend + assert mb.retry_cnt == 0 + assert mb.send_calls == 4 + + # assert mb.counter == {} diff --git a/app/tests/test_talent.py b/app/tests/test_talent.py index ad7b6cb..3387d99 100644 --- a/app/tests/test_talent.py +++ b/app/tests/test_talent.py @@ -815,6 +815,8 @@ def test_msg_modbus_req(ConfigTsunInv1, MsgModbusCmd): ConfigTsunInv1 m = MemoryStream(b'') m.id_str = b"R170000000000001" + m.state = m.STATE_UP + c = m.createClientStream(MsgModbusCmd) m.db.stat['proxy']['Unknown_Ctrl'] = 0