Problem Statement
The consensus layer has no automated regression suite that simulates specific failure modes (network partition, Byzantine equivocation, message timeout, view-change deadlock). Failures discovered in production require manual reproduction. Build a test harness that injects controlled faults and verifies protocol-level recovery within bounded time.
Technical Bounds
- Must support at least 8 concurrent validators in simulation.
- Fault injection: network partition, message delay, equivocation, timeout, duplicate messages.
- Test scenarios: minimum 95% coverage of known failure modes.
- Run complete suite within 10 minutes on CI (4-core machine).
- Assertions: liveness (block committed within N rounds), safety (no conflicting blocks), recovery (partition healed within M rounds).
Steps
- Design fault injection API:
InjectFault { fault_type, target_nodes, duration, params }.
- Implement simulation runner with configurable validator sets; use
tokio::time::pause() for deterministic timing.
- Write test scenarios for each failure mode category: partition, equivocation, timeout, reorg, cache invalidation.
- Implement safety and liveness assertions:
assert_no_conflict(blocks), assert_eventually_commit(block, max_rounds).
- Add CI pipeline step that runs simulation suite; output JUnit XML for test reporting.
- Add chaos test: randomly inject 5 simultaneous faults, verify protocol recovers within 20 rounds.
Problem Statement
The consensus layer has no automated regression suite that simulates specific failure modes (network partition, Byzantine equivocation, message timeout, view-change deadlock). Failures discovered in production require manual reproduction. Build a test harness that injects controlled faults and verifies protocol-level recovery within bounded time.
Technical Bounds
Steps
InjectFault { fault_type, target_nodes, duration, params }.tokio::time::pause()for deterministic timing.assert_no_conflict(blocks),assert_eventually_commit(block, max_rounds).