From 63547bb51f038746497c43f639224cb98b312769 Mon Sep 17 00:00:00 2001 From: Stefan Allius Date: Mon, 29 Apr 2024 22:51:31 +0200 Subject: [PATCH] adapt tests for stateless timestamp handling --- app/tests/test_talent.py | 76 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 7 deletions(-) diff --git a/app/tests/test_talent.py b/app/tests/test_talent.py index 89fd420..0b806c7 100644 --- a/app/tests/test_talent.py +++ b/app/tests/test_talent.py @@ -43,7 +43,8 @@ class MemoryStream(Talent): return copied_bytes def _timestamp(self): - return 1700260990000 + # return 1700260990000 + return 1691246944000 def _Talent__flush_recv_msg(self) -> None: super()._Talent__flush_recv_msg() @@ -101,6 +102,18 @@ def MsgControllerInd(): # Data indication from the controller msg += b'\x49\x00\x00\x00\x02\x00\x0d\x04\x08\x49\x00\x00\x00\x00\x00\x07\xa1\x84\x49\x00\x00\x00\x01\x00\x0c\x50\x59\x49\x00\x00\x00\x4c\x00\x0d\x1f\x60\x49\x00\x00\x00\x00' return msg +@pytest.fixture +def MsgControllerIndTsOffs(): # Data indication from the controller - offset 0x1000 + msg = b'\x00\x00\x01\x2f\x10R170000000000001\x91\x71\x0e\x10\x00\x00\x10R170000000000001' + msg += b'\x01\x00\x00\x01\x89\xc6\x63\x45\x50' + msg += b'\x00\x00\x00\x15\x00\x09\x2b\xa8\x54\x10\x52\x53\x57\x5f\x34\x30\x30\x5f\x56\x31\x2e\x30\x30\x2e\x30\x36\x00\x09\x27\xc0\x54\x06\x52\x61\x79\x6d\x6f' + msg += b'\x6e\x00\x09\x2f\x90\x54\x0b\x52\x53\x57\x2d\x31\x2d\x31\x30\x30\x30\x31\x00\x09\x5a\x88\x54\x0f\x74\x2e\x72\x61\x79\x6d\x6f\x6e\x69\x6f\x74\x2e\x63\x6f\x6d\x00\x09\x5a\xec\x54' + msg += b'\x1c\x6c\x6f\x67\x67\x65\x72\x2e\x74\x61\x6c\x65\x6e\x74\x2d\x6d\x6f\x6e\x69\x74\x6f\x72\x69\x6e\x67\x2e\x63\x6f\x6d\x00\x0d\x00\x20\x49\x00\x00\x00\x01\x00\x0c\x35\x00\x49\x00' + msg += b'\x00\x00\x64\x00\x0c\x96\xa8\x49\x00\x00\x00\x1d\x00\x0c\x7f\x38\x49\x00\x00\x00\x01\x00\x0c\xfc\x38\x49\x00\x00\x00\x01\x00\x0c\xf8\x50\x49\x00\x00\x01\x2c\x00\x0c\x63\xe0\x49' + msg += b'\x00\x00\x00\x00\x00\x0c\x67\xc8\x49\x00\x00\x00\x00\x00\x0c\x50\x58\x49\x00\x00\x00\x01\x00\x09\x5e\x70\x49\x00\x00\x13\x8d\x00\x09\x5e\xd4\x49\x00\x00\x13\x8d\x00\x09\x5b\x50' + msg += b'\x49\x00\x00\x00\x02\x00\x0d\x04\x08\x49\x00\x00\x00\x00\x00\x07\xa1\x84\x49\x00\x00\x00\x01\x00\x0c\x50\x59\x49\x00\x00\x00\x4c\x00\x0d\x1f\x60\x49\x00\x00\x00\x00' + return msg + @pytest.fixture def MsgControllerAck(): # Get Time Request message return b'\x00\x00\x00\x14\x10R170000000000001\x99\x71\x01' @@ -117,6 +130,14 @@ def MsgInverterInd(): # Data indication from the controller msg += b'\x54\x10T170000000000001\x00\x00\x00\x32\x54\x0a\x54\x53\x4f\x4c\x2d\x4d\x53\x36\x30\x30\x00\x00\x00\x3c\x54\x05\x41\x2c\x42\x2c\x43' return msg +@pytest.fixture +def MsgInverterIndTsOffs(): # Data indication from the controller + offset 256 + msg = b'\x00\x00\x00\x8b\x10R170000000000001\x91\x04\x01\x90\x00\x01\x10R170000000000001' + msg += b'\x01\x00\x00\x01\x89\xc6\x63\x62\x08' + msg += b'\x00\x00\x00\x06\x00\x00\x00\x0a\x54\x08\x4d\x69\x63\x72\x6f\x69\x6e\x76\x00\x00\x00\x14\x54\x04\x54\x53\x55\x4e\x00\x00\x00\x1E\x54\x07\x56\x35\x2e\x30\x2e\x31\x31\x00\x00\x00\x28' + msg += b'\x54\x10T170000000000001\x00\x00\x00\x32\x54\x0a\x54\x53\x4f\x4c\x2d\x4d\x53\x36\x30\x30\x00\x00\x00\x3c\x54\x05\x41\x2c\x42\x2c\x43' + return msg + @pytest.fixture def MsgInverterAck(): # Get Time Request message return b'\x00\x00\x00\x14\x10R170000000000001\x99\x04\x01' @@ -407,9 +428,10 @@ def test_msg_get_time(ConfigTsunInv1, MsgGetTime): assert int(m.ctrl)==145 assert m.msg_id==34 assert m.header_len==23 + assert m.ts_offset==0 assert m.data_len==0 assert m._forward_buffer==MsgGetTime - assert m._send_buffer==b'' + assert m._send_buffer==b'\x00\x00\x00\x1b\x10R170000000000001\x91"\x00\x00\x01\x89\xc6,_\x00' assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 m.close() @@ -425,9 +447,10 @@ def test_msg_get_time_autark(ConfigNoTsunInv1, MsgGetTime): assert int(m.ctrl)==145 assert m.msg_id==34 assert m.header_len==23 + assert m.ts_offset==0 assert m.data_len==0 assert m._forward_buffer==b'' - assert m._send_buffer==b'\x00\x00\x00\x1b\x10R170000000000001\x91"\x00\x00\x01\x8b\xdfs\xcc0' + assert m._send_buffer==bytearray(b'\x00\x00\x00\x1b\x10R170000000000001\x91"\x00\x00\x01\x89\xc6,_\x00') assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 m.close() @@ -443,8 +466,9 @@ def test_msg_time_resp(ConfigTsunInv1, MsgTimeResp): assert int(m.ctrl)==145 assert m.msg_id==34 assert m.header_len==23 + assert m.ts_offset==3600000 assert m.data_len==8 - assert m._forward_buffer==MsgTimeResp + assert m._forward_buffer==b'' assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 m.close() @@ -461,6 +485,7 @@ def test_msg_time_resp_autark(ConfigNoTsunInv1, MsgTimeResp): assert int(m.ctrl)==145 assert m.msg_id==34 assert m.header_len==23 + assert m.ts_offset==0 assert m.data_len==8 assert m._forward_buffer==b'' assert m._send_buffer==b'' @@ -479,8 +504,9 @@ def test_msg_time_invalid(ConfigTsunInv1, MsgTimeInvalid): assert int(m.ctrl)==148 assert m.msg_id==34 assert m.header_len==23 + assert m.ts_offset==0 assert m.data_len==0 - assert m._forward_buffer==MsgTimeInvalid + assert m._forward_buffer==b'' assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 1 m.close() @@ -496,6 +522,7 @@ def test_msg_time_invalid_autark(ConfigNoTsunInv1, MsgTimeInvalid): assert m.unique_id == 'R170000000000001' assert int(m.ctrl)==148 assert m.msg_id==34 + assert m.ts_offset==0 assert m.header_len==23 assert m.data_len==0 assert m._forward_buffer==b'' @@ -503,7 +530,7 @@ def test_msg_time_invalid_autark(ConfigNoTsunInv1, MsgTimeInvalid): assert m.db.stat['proxy']['Unknown_Ctrl'] == 1 m.close() -def test_msg_cntrl_ind(ConfigTsunInv1, MsgControllerInd, MsgControllerAck): +def test_msg_cntrl_ind(ConfigTsunInv1, MsgControllerInd, MsgControllerIndTsOffs, MsgControllerAck): ConfigTsunInv1 m = MemoryStream(MsgControllerInd, (0,)) m.db.stat['proxy']['Unknown_Ctrl'] = 0 @@ -516,7 +543,12 @@ def test_msg_cntrl_ind(ConfigTsunInv1, MsgControllerInd, MsgControllerAck): assert m.msg_id==113 assert m.header_len==23 assert m.data_len==284 + m.ts_offset = 0 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgControllerInd + m.ts_offset = -4096 + m._update_header(m._forward_buffer) + assert m._forward_buffer==MsgControllerIndTsOffs assert m._send_buffer==MsgControllerAck assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 m.close() @@ -552,12 +584,17 @@ def test_msg_cntrl_invalid(ConfigTsunInv1, MsgControllerInvalid): assert m.msg_id==113 assert m.header_len==23 assert m.data_len==1 + m.ts_offset = 0 + m._update_header(m._forward_buffer) + assert m._forward_buffer==MsgControllerInvalid + m.ts_offset = -4096 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgControllerInvalid assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 1 m.close() -def test_msg_inv_ind(ConfigTsunInv1, MsgInverterInd, MsgInverterAck): +def test_msg_inv_ind(ConfigTsunInv1, MsgInverterInd, MsgInverterIndTsOffs, MsgInverterAck): ConfigTsunInv1 tracer.setLevel(logging.DEBUG) m = MemoryStream(MsgInverterInd, (0,)) @@ -571,7 +608,12 @@ def test_msg_inv_ind(ConfigTsunInv1, MsgInverterInd, MsgInverterAck): assert m.msg_id==4 assert m.header_len==23 assert m.data_len==120 + m.ts_offset = 0 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgInverterInd + m.ts_offset = +256 + m._update_header(m._forward_buffer) + assert m._forward_buffer==MsgInverterIndTsOffs assert m._send_buffer==MsgInverterAck assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 m.close() @@ -609,6 +651,11 @@ def test_msg_inv_invalid(ConfigTsunInv1, MsgInverterInvalid): assert m.msg_id==4 assert m.header_len==23 assert m.data_len==1 + m.ts_offset = 0 + m._update_header(m._forward_buffer) + assert m._forward_buffer==MsgInverterInvalid + m.ts_offset = 256 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgInverterInvalid assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 1 @@ -628,6 +675,11 @@ def test_msg_ota_req(ConfigTsunInv1, MsgOtaReq): assert m.msg_id==19 assert m.header_len==23 assert m.data_len==259 + m.ts_offset = 0 + m._update_header(m._forward_buffer) + assert m._forward_buffer==MsgOtaReq + m.ts_offset = 4096 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgOtaReq assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 @@ -650,6 +702,11 @@ def test_msg_ota_ack(ConfigTsunInv1, MsgOtaAck): assert m.msg_id==19 assert m.header_len==23 assert m.data_len==1 + m.ts_offset = 0 + m._update_header(m._forward_buffer) + assert m._forward_buffer==MsgOtaAck + m.ts_offset = 256 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgOtaAck assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 @@ -670,7 +727,12 @@ def test_msg_ota_invalid(ConfigTsunInv1, MsgOtaInvalid): assert m.msg_id==19 assert m.header_len==23 assert m.data_len==1 + m.ts_offset = 0 + m._update_header(m._forward_buffer) assert m._forward_buffer==MsgOtaInvalid + m.ts_offset = 4096 + assert m._forward_buffer==MsgOtaInvalid + m._update_header(m._forward_buffer) assert m._send_buffer==b'' assert m.db.stat['proxy']['Unknown_Ctrl'] == 1 assert m.db.stat['proxy']['OTA_Start_Msg'] == 0