Files
torlando-agent[bot] 988e42c52c fix: run TCP interface connect on its own task (instant UI / screen wake)
The blocking WiFiClient.connect() ran on the main loop and stalled it for the
lwIP default (~18.5s) when the host was unreachable -- including the DNS lookup --
freezing the UI, so the screen took ~10s to wake. The 2-arg connect() also
ignored CONNECT_TIMEOUT_MS (that only bounds reads).

Move only the blocking connect() to a dedicated FreeRTOS task. read/write/frame
stay on the main loop exactly as before (unchanged low-latency data path -- the
link/Resource timing is untouched). An atomic _conn_state hands _client ownership
between the task (while CONNECTING) and the main loop (while CONNECTED) so they
never touch the socket concurrently. Bound the connect via the 3-arg connect()
and back off retries to 15s.

tests/hardware: wait_for_tcp_link() matched "started", keying on interface
startup rather than the actual connect. With the async connect that let the
harness drive the announce before the link was up, so the device's announce was
lost and the first direct message (bz2-probe) failed. Match "connected to".

Verified on a T-Deck: screen wake instant (connect off the main loop); e2e smoke
5/5 including bz2-on-receive.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UWZuYkHBRqNb6BZHV8sTG5
2026-06-19 22:14:45 -04:00
..
2026-05-04 14:50:16 -04:00

Pyxis Tests

Three test surfaces, each runnable independently.

1. Pyxis-unique pytest suite

Native C++ tests of pyxis-unique code (BLE fragmenter, HDLC, etc.) and Python tests of build scripts.

/usr/bin/python3 -m pytest tests/build_scripts tests/native -v

System Python 3.9 has pytest pre-installed; Homebrew Python does not.

  • build_scripts/test_patch_nimble.py — verifies patch_nimble.py idempotency, drift detection, missing-file handling
  • native/test_hdlc.{cpp,py} — HDLC escape/unescape/frame round-trip + golden vector against Python RNS
  • native/test_ble_fragmenter.{cpp,py} — BLEFragmenter ↔ BLEReassembler: in-order, out-of-order, duplicate, dropped+timeout, per-peer isolation, MTU change
  • native/test_ble_peer_manager.{cpp,py} — connection-map state machine: discover, identity promotion, blacklist, handle map cleanup, MAC rotation, pool exhaustion
  • native/test_ble_operation_queue.{cpp,py} — GATT op queue: FIFO, busy-state, timeout, clearForConnection, builder
  • native/test_ring_buffers.{cpp,py} — PCM + encoded SPSC ring buffers, including 100k-frame multithreaded producer/consumer stress
  • native/test_audio_filters.{cpp,py} — VoiceFilterChain frequency response, peak limiting, multichannel

Adding a new native C++ test

Pattern: pure C++ unit + thin pytest wrapper.

  1. Write tests/native/test_<thing>.cpp — include from ../../{src,lib/...} for the unit under test, use the existing EXPECT_EQ/EXPECT_TRUE/RUN(name) framework, return non-zero on any failure.
  2. If the unit pulls in microReticulum types, the shims in tests/native/ cover what's been needed so far:
    • Bytes.hbytes_shim.h (minimal RNS::Bytes — append/data/size/writable/resize/mid)
    • Log.h (no-op TRACE/WARNING/INFO/ERROR macros)
    • Utilities/OS.h (OS::time() with set_fake_time()/clear_fake_time())
  3. Write tests/native/test_<thing>.py — copy the test_hdlc.py template, swap source/include paths, run.
  4. Confirm: /usr/bin/python3 -m pytest tests/native/test_<thing>.py -v

2. LXST audio interop tests

Python tests verifying wire format and codec compatibility between pyxis (C++), Python LXST, and LXST-kt (Kotlin).

/usr/bin/python3 -m pytest tests/interop -v

Requires pycodec2 and access to $HOME/repos/public/LXST.

3. microReticulum native unit tests (PlatformIO)

The fork's microReticulum tests live under deps/microReticulum/test/ and run via PlatformIO Unity.

cd deps/microReticulum && pio test -e native17

Use native17, not native — the C++11 env is broken (static-constexpr ODR-use). Baseline as of 2026-05-02: 94/114 PASS, 7 FAIL, 5 SKIPPED, 7 suites ERRORED. The clean suites are test_os, test_bytes, test_msgpack, test_crypto, test_filesystem, test_objects, test_interop, test_general, test_reference, test_example, test_collections.