Skip to content

Hushwheel Testing

The hushwheel fixture now carries a full verification and instrumentation stack:

Lint

make lint compiles every source file with strict warnings and runs tools/lint_hushwheel.py to check text surfaces, target markers, README references, the orbit structure in docs/constellation-atlas.md, and the Doxygen mainpage block.

Static Analysis

make static-analysis runs cppcheck with exhaustive style, portability, performance, and warning checks, then writes both XML and GCC-style text reports into build/reports/cppcheck/.

Complexity

make complexity runs lizard against the coordinator, spokes, headers, and C unit test with thresholds for cyclomatic complexity, function length, and parameter count. The persisted outputs live in build/reports/complexity/.

Hardening

make hardening rebuilds hushwheel with hardened compile and link flags, reruns the unit, integration, and BDD harnesses against that binary, then persists file, size, readelf, and nm outputs under build/reports/hardening/. The target fails if PIE, RELRO, BIND_NOW, or a non-executable stack are missing from the emitted ELF metadata.

Sanitizers

make sanitizers rebuilds hushwheel with AddressSanitizer and UndefinedBehaviorSanitizer, reruns the same harness surfaces, and saves the command logs plus sanitizer environment details under build/reports/sanitizers/.

Unit

tests/unit/test_hushwheel_unit.c now links against the split production sources instead of including the implementation directly. The build defines HUSHWHEEL_NO_MAIN so the coordinator can participate in the link without exporting a duplicate main(...).

Integration

tests/integration/cli_suite.py treats hushwheel like a built executable and checks lookup, prefix, category, stats, and about behavior. The runner accepts HUSHWHEEL_BIN so coverage or other instrumented builds can reuse the same assertions.

BDD

tests/bdd/hushwheel.feature and tests/bdd/run_bdd.py keep the operator-facing command stories aligned with the compiled program. Like the integration suite, the runner accepts HUSHWHEEL_BIN for instrumented builds.

Coverage And Reports

make coverage rebuilds hushwheel with --coverage, reruns the unit, integration, and BDD surfaces, and writes gcovr text, XML, HTML, JSON, and Markdown summary reports under build/reports/coverage/. The coverage report intentionally excludes the generated src/hushwheel_spoke_*.c tables and src/hushwheel_spokes.c, because those files are data-heavy catalog surfaces rather than executable control-flow logic.

Profiling

make profiling runs a repeated CLI workload against an instrumented binary, records per-scenario wall-clock timings in build/reports/profiling/runtime-profile.tsv, and writes a Markdown report plus sample stdout and stderr captures for the profiled commands.

Documentation

make docs runs Doxygen, builds the LaTeX output with lualatex, and refreshes docs/hushwheel-reference.pdf. The Doxygen input also includes docs/constellation-atlas.md so the markdown-only orbit structure appears in the generated manual without forcing the C sources to imitate it.

Combined Gate

make reports refreshes all persisted analysis artifacts and writes build/reports/quality-summary.md. make quality is the CI-facing superset that runs check plus static analysis, complexity, hardening, sanitizers, coverage, profiling, and the aggregated report surface in one pass.