meshcore_py/tests/unit
Matthew Wolter f3973151d6 G1: add verification tests for F06, N07, NEW-C, R02
Adds the four unit tests required by proposal §4.1 verification:

(a) test_g1_handle_rx_malformed_frame_logged_and_swallowed — F06.
    Sends a 4-byte CHANNEL_MSG_RECV_V3 frame missing the channel_idx
    byte. The handler raises IndexError on dbuf.read(1)[0]; the F06
    umbrella must catch it, log "handle_rx parse error" with a
    traceback, and return cleanly without dispatching any event.

(b) test_g1_battery_short_frame_omits_storage_fields — N07.
    Sends a 3-byte BATTERY frame (type + 2-byte level only). Verifies
    that exactly one BATTERY event is dispatched, the payload contains
    `level` but does NOT contain `used_kb` or `total_kb`. Pre-fix the
    `len(data) > 3` gate would have produced both fields with bogus
    silent zeros.

(c) test_g1_status_response_short_frame_skipped — NEW-C.
    Sends a 30-byte STATUS_RESPONSE push frame (well below the 60-byte
    minimum). Verifies that no STATUS_RESPONSE event is dispatched and
    the new "STATUS_RESPONSE push frame too short" debug log fires.

(d) test_g1_parse_packet_payload_txt_type_decodes_high_bits — R02.
    Sets up a synthetic channel with a known 16-byte AES key, encrypts
    a 16-byte plaintext where byte 4 = (5 << 2) | 1 = 0x15, builds the
    full pkt_payload (chan_hash + cipher_mac + ciphertext), wraps it in
    a minimal route header, calls parsePacketPayload directly, and
    asserts log_data["txt_type"] == 5 and log_data["attempt"] == 1.
    Pre-R02-fix `uncrypted[4:4]` was the empty slice, so txt_type was
    always 0 — this test would have failed with txt_type=0.

Adds a small _CapturingDispatcher helper class. Adds imports for
logging at the top of the file. The existing test_binary_response is
left untouched.

File: tests/unit/test_reader.py
2026-04-11 18:39:01 -07:00
..
test_commands.py Fix 16 failing unit tests to match current source behavior 2026-04-05 18:38:16 -07:00
test_events.py feat: Refactor binary commands and apply BLE fixes 2025-08-05 15:31:54 -04:00
test_lpp_parsing.py Fix 16 failing unit tests to match current source behavior 2026-04-05 18:38:16 -07:00
test_path_discovery_response.py Fix three byte path packets 2026-03-18 17:31:17 -07:00
test_private_key_export.py Fix 16 failing unit tests to match current source behavior 2026-04-05 18:38:16 -07:00
test_reader.py G1: add verification tests for F06, N07, NEW-C, R02 2026-04-11 18:39:01 -07:00
test_serial_connection.py Use the frame start once we've found it 2026-03-21 21:08:04 -07:00