You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Open-ended by design (dtinth): this map has no fixed endpoint — the direction is get the Jamulus codebase under test, and we chart more as we explore ("the mapping part of wayfinding is more useful than reaching a fixed destination"). Both unit tests and smoke tests are wanted eventually — different benefits, limitations, and confidence levels; separate PRs. Milestones along the way, not destinations:
Background: initial assessment and evidence + churn analysis in this issue's comments. Pre-map decisions recorded there: upstreaming is the goal, qmake+QtTest, first targets protocol.cpp → util → buffer.
Decisions so far
Scope the first upstream PR — PR opened: jamulussoftware/jamulus#3828 (harness + 19-case protocol suite + 6-job CI, +1029 lines); scope/design settled through comment-by-comment review on this map; milestone 1 reached pending upstream review
Split test helpers into a shared header — protocoltester.h precedent set; GenTestFrame retired for golden-hex snapshots (space-separated) + mutation of production frames
Linux coverage job — gcovr HTML artifact + summary table; baseline: protocol.cpp 34.3% lines
CI test reports — junitxml from every job + zero-permission step-summary rendering; checks-write action documented as opt-in alternative
CI design for the test suite — 4-job matrix green in 26–66s (Linux Qt 5.15 + Qt 6, macOS Qt 6.10.2 w/ Xcode 16.3.0 pin, Windows MSVC), hard Totals: 41 passed gate on every platform; verified run 29926662716; triggers still need reshaping for upstream
Prove the harness: QtTest seed suite builds and passes in the fork — proven: src/test/ harness links protocol.cpp+util.cpp with no stubs/production changes, 41/41 green incl. ASan/UBSan; dtinth: keep (structure review deferred), wire up CI on all three platforms next
Exact contents and narrative of the first upstream PR (sharpens after the prototype and research tickets resolve).
How upstream review feedback gets worked once the PR is open.
Later suites and their order: buffer/jitter regressions, wider util coverage, recorder golden-file tests, JSON-RPC surface tests.
Smoke-test upstreaming (parked side-quest per dtinth, 2026-07-23): the headless build fixes (three one-liners — verification uncovered a third, link-stage bug the old workaround masked) are upstream as issue #3825 and PR #3826 (fronted by dtinth, first upstream PR of this effort). Once merged, the eventual smoke PR ships zero production changes.
Fault-injection integration tier on top of the smoke test (TCP fallback per upstream PR Support TCP for protocol messages jamulussoftware/jamulus#3636 — pljones asked there for test cases): needs CAP_NET_ADMIN (netns/iptables/tc) so local/privileged-only, not per-PR. A third party (mcfnord) reports having such a netns harness and offered to share scripts — unverified, to be assessed when this graduates.
Whether to revive fuzzing (afl-fuzz found the 2020 protocol bugs) on top of the harness, and what becomes of src/testbench.h.
Destination
Open-ended by design (dtinth): this map has no fixed endpoint — the direction is get the Jamulus codebase under test, and we chart more as we explore ("the mapping part of wayfinding is more useful than reaching a fixed destination"). Both unit tests and smoke tests are wanted eventually — different benefits, limitations, and confidence levels; separate PRs. Milestones along the way, not destinations:
Notes
Jamulus.pro(no CMake/Catch2 for now)./tdd(test implementation),/prototype(harness spikes),/grilling+/domain-modeling(decisions).protocol.cpp→util→buffer.Decisions so far
protocoltester.hprecedent set;GenTestFrameretired for golden-hex snapshots (space-separated) + mutation of production framesQVERIFY2+ richlastError()so failure messages identify the exact mismatch (anti-debugging-frenzy)Totals: 41 passedgate on every platform; verified run 29926662716; triggers still need reshaping for upstreamsrc/test/harness linksprotocol.cpp+util.cppwith no stubs/production changes, 41/41 green incl. ASan/UBSan; dtinth: keep (structure review deferred), wire up CI on all three platforms nextsrc/, one tiny workflow modeled oncheck-json-rpcs-docs.yml, targetmain; small CI PRs merge friction-freeParseMessageFramecontract tests + a Add bounds check iChanID before array access jamulussoftware/jamulus#3810 regression test instead, cite GetValFromStream uses ASSERT which is likely compiled out during release builds jamulussoftware/jamulus#3819 only as contextNot yet specified
utilcoverage, recorder golden-file tests, JSON-RPC surface tests.src/testbench.h.Out of scope