Unit gtest — tests/unit/ | UnitTest (built only with -Denable_unit_tests=true; not built by ./build.sh) | None — runs as regular user under ASan | RX-side session logic fed synthetic mbufs at the RFC 4175 / RTP payload layer: frame assembly, bitmap dedup, redundancy merge, stat counters, pipeline accounting |
Integration gtest — tests/integration_tests/ | KahawaiTest | Real VFs (≥2; ≥4 for redundant cases) | Full session lifecycle, TX+RX through the NIC, every pacing mode, multi-session, callbacks at real timing, SHA digests, DMA, RSS, kernel-socket, AF_XDP, virtio-user |
NoCtx gtest — tests/integration_tests/noctx/ | KahawaiTest --no_ctx | Real VFs (per-case; redundant cases require ≥4) | Same as integration plus behaviors that depend on mtl_init() flags/callbacks the shared test context cannot supply. One case per process (DPDK EAL cannot re-init) — runner script enforces this |
pytest single-host — tests/validation/tests/single/ | RxTxApp / FFmpeg / GStreamer driven through pytest | Full host: VFs, MtlManager, NFS media, plugins, venv, SSH-to-localhost | End-to-end app behavior on one host: CLI flags, config files, real media bytes, PTP convergence |
pytest dual-host — tests/validation/tests/dual/ | same apps, two hosts | Two hosts wired together | Real two-machine traffic: cross-host pacing, real switch behavior, no loopback shortcuts |