# tests/test_msg_codec.py """ cpp_reversed/msg_codec 算法库的 pytest 测试套件 覆盖: hdr_codec / frame / xxtea / msg_codec 顶层 API / 抓包分析场景 """ import os import sys import struct import pytest # 让 pytest 能 import cpp_reversed 模块 CPP_REV = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "cpp_reversed")) if CPP_REV not in sys.path: sys.path.insert(0, CPP_REV) # 兼容 protocol_bot (用于 cross-verify) PROTO_BOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "protocol_bot")) if PROTO_BOT not in sys.path: sys.path.insert(0, PROTO_BOT) import hdr_codec import xxtea import frame as frame_mod import msg_codec # ============== hdr_codec: 24B 头编解码 ============== class TestHdrCodec: """测试 24B 头编解码 (Encode6BitBuf 算法核心)""" def test_encode_24b_to_32b(self): plain = b"\x00" * 24 enc = hdr_codec.encode_header(plain) assert len(enc) == 32 assert all(0x3C <= b <= 0x7B for b in enc), "编码字节非可打印" def test_decode_32b_to_24b(self): plain = b"\x00" * 24 enc = hdr_codec.encode_header(plain) dec = hdr_codec.decode_header(enc) assert dec == plain def test_roundtrip_random(self): import random random.seed(42) for _ in range(50): plain = bytes(random.randint(0, 255) for _ in range(24)) enc = hdr_codec.encode_header(plain) dec = hdr_codec.decode_header(enc) assert dec == plain, f"roundtrip fail: {plain.hex()} → {enc.hex()} → {dec.hex()}" def test_parse_header_legacy_24b(self): # 24B 旧格式: recog(4) + p1(4) + p2(4) + p3(4) + p4(4) + msgId(2) + 2 字节 hdr = bytearray(24) struct.pack_into("