# Test Strategy This repository uses four host-side test pillars to preserve compatibility and deterministic behavior. ## 1) Byte-exact protocol compatibility - Crate: `dd3_protocol` - Scope: - CRC16-CCITT vectors - Frame encode/decode byte identity - ACK payload byte identity - Chunk reassembly deterministic reset semantics - Payload schema v3 decode/re-encode golden vectors - Fixtures: - `fixtures/protocol/frames/*.bin` - `fixtures/protocol/chunks/*.bin` - `fixtures/protocol/payload_v3/*.bin` ## 2) Contract stability - Crate: `dd3_contracts` - Scope: - Home Assistant discovery JSON contract - MQTT state JSON key/semantic stability - CSV header and line format stability - sanitize/html/url behavior including adversarial inputs - manufacturer drift guard - Fixtures: - `fixtures/contracts/ha_discovery/*.json` - `fixtures/contracts/mqtt_state/*.json` - `fixtures/contracts/sd_csv/*.csv` ## 3) Deterministic state machine behavior - Crates: `dd3_core`, `dd3_sim` - Scope: - unsynced sender sync-request cadence - time bootstrap unlock via valid ACK - stop-and-wait retry behavior under loss/backpressure - ACK mismatch handling - duplicate-batch suppression on receiver publish/log paths ## 4) Robustness fuzz/property checks - `fuzz/` targets: - `frame_decode` - `chunk_stream_ingest` - `payload_decode_v3` - `sanitize_device_id` - `url_encode_component` ## Running Tests (host only) Prerequisite: install Rust toolchain (`rustup`, `cargo`, `rustfmt`, `clippy`). - Workspace tests: - `make test` - or `cargo test --workspace` - Lint: - `make lint` - Fuzz smoke (optional, skipped when `cargo-fuzz` missing): - `make fuzz-smoke` ## Fixture Refresh - Ensure baseline subtree exists at `vendor/dd3-cpp` pinned to baseline commit. - Run: - `cargo run -p xtask -- sync-fixtures` - `cargo run -p xtask -- verify-fixture-sources`