From 0ac4b1f5715980a21a2c210cff2e7f023329e018 Mon Sep 17 00:00:00 2001 From: Stefan Allius Date: Wed, 8 May 2024 23:50:04 +0200 Subject: [PATCH] add more unit tests --- app/tests/test_modbus.py | 121 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 4 deletions(-) diff --git a/app/tests/test_modbus.py b/app/tests/test_modbus.py index b1764e9..a3d24ac 100644 --- a/app/tests/test_modbus.py +++ b/app/tests/test_modbus.py @@ -18,24 +18,137 @@ def test_modbus_crc(): assert 0 == mb._Modbus__calc_crc(b'\x01\x06\x20\x08\x00\x00\x03\xc8') assert mb.check_crc(b'\x01\x06\x20\x08\x00\x00\x03\xc8') + assert 0x5c75 == mb._Modbus__calc_crc(b'\x01\x03\x08\x01\x2c\x00\x2c\x02\x2c\x2c\x46') def test_build_modbus_pdu(): mb = Modbus() pdu = mb.build_msg(1,6,0x2000,0x12) assert pdu == b'\x01\x06\x20\x00\x00\x12\x02\x07' assert mb.check_crc(pdu) +def test_recv_req_crc(): + mb = Modbus() + res = mb.recv_req(b'\x01\x06\x20\x00\x00\x12\x02\x08') + assert not res + assert mb.last_fcode == 0 + assert mb.last_reg == 0 + assert mb.last_len == 0 + assert mb.err == 1 + +def test_recv_req_addr(): + mb = Modbus() + res = mb.recv_req(b'\x02\x06\x20\x00\x00\x12\x02\x34') + assert not res + assert mb.last_fcode == 0 + assert mb.last_reg == 0 + assert mb.last_len == 0 + assert mb.err == 2 + +def test_recv_req(): + mb = Modbus() + res = mb.recv_req(b'\x01\x06\x20\x00\x00\x12\x02\x07') + assert res + assert mb.last_fcode == 6 + assert mb.last_reg == 0x2000 + assert mb.last_len == 0x12 + assert mb.err == 0 + +def test_recv_recv_crc(): + mb = TestHelper() + mb.last_fcode = 3 + mb.last_reg == 0x300e + mb.last_len == 2 + + call = 0 + for key, update, val in mb.recv_resp(mb.db, b'\x01\x03\x04\x01\x2c\x00\x46\xbb\xf3', 'test'): + call += 1 + assert mb.err == 1 + assert 0 == call + +def test_recv_recv_addr(): + mb = TestHelper() + mb.last_fcode = 3 + mb.last_reg == 0x300e + mb.last_len == 2 + + call = 0 + for key, update in mb.recv_resp(mb.db, b'\x02\x03\x04\x01\x2c\x00\x46\x88\xf4', 'test'): + call += 1 + assert mb.err == 2 + assert 0 == call + +def test_recv_recv_fcode(): + mb = TestHelper() + mb.last_fcode = 4 + mb.last_reg == 0x300e + mb.last_len == 2 + + call = 0 + for key, update, val in mb.recv_resp(mb.db, b'\x01\x03\x04\x01\x2c\x00\x46\xbb\xf4', 'test'): + call += 1 + assert mb.err == 3 + assert 0 == call + +def test_recv_recv_len(): + mb = TestHelper() + mb.last_fcode = 3 + mb.last_reg == 0x300e + mb.last_len == 2 + + call = 0 + for key, update, _ in mb.recv_resp(mb.db, b'\x01\x03\x04\x01\x2c\x00\x46\xbb\xf4', 'test'): + call += 1 + assert mb.err == 4 + assert 0 == call + def test_build_recv(): mb = TestHelper() - pdu = mb.build_msg(1,3,0x300e,0x2) - assert pdu == b'\x01\x03\x30\x0e\x00\x02\xaa\xc8' + pdu = mb.build_msg(1,3,0x3007,6) assert mb.check_crc(pdu) + assert mb.err == 0 call = 0 - for key, update in mb.recv_resp(mb.db, b'\x01\x03\x04\x01\x2c\x00\x46\xbb\xf4', 'test'): + exp_result = ['v0.0.212', 4.4, 0.7, 0.7, 30] + for key, update, val in mb.recv_resp(mb.db, b'\x01\x03\x0c\x01\x2c\x00\x2c\x00\x2c\x00\x46\x00\x46\x00\x46\x32\xc8', 'test'): if key == 'grid': assert update == True elif key == 'inverter': assert update == True + elif key == 'env': + assert update == True + else: + assert False + assert exp_result[call] == val + call += 1 + assert 0 == mb.err + assert 5 == call + + call = 0 + for key, update, val in mb.recv_resp(mb.db, b'\x01\x03\x0c\x01\x2c\x00\x2c\x00\x2c\x00\x46\x00\x46\x00\x46\x32\xc8', 'test'): + if key == 'grid': + assert update == False + elif key == 'inverter': + assert update == False + elif key == 'env': + assert update == False + else: + assert False + assert exp_result[call] == val + call += 1 + assert 0 == mb.err + assert 5 == call + +def test_build_long(): + mb = TestHelper() + pdu = mb.build_msg(1,3,0x3022,4) + assert mb.check_crc(pdu) + assert mb.err == 0 + call = 0 + exp_result = [3.0, 28841.4, 113.34] + for key, update, val in mb.recv_resp(mb.db, b'\x01\x03\x08\x01\x2c\x00\x2c\x02\x2c\x2c\x46\x75\x5c', 'test'): + if key == 'input': + assert update == True + assert exp_result[call] == val else: assert False call += 1 - assert 2 == call + assert 0 == mb.err + assert 3 == call