Mutation and high-load correctness testing

May 22, 2026 ยท View on GitHub

SnowID is an ID generator intended for database-core use. The normal CI suite runs deterministic unit, property, and stress tests. For Stryker-style mutation testing in Rust, use cargo-mutants.

Local mutation testing

Install the tool locally:

cargo install cargo-mutants

Run mutation testing against the generator and tests:

cargo mutants --package snowid --file src/generator --file src/config --file src/extractor -- --tests

The repository also includes a manual GitHub Actions workflow named mutation that runs the same check with workflow_dispatch. Use it before release candidates or after large generator changes.

cargo-mutants repeatedly rewrites expressions and runs the test suite to check whether the tests catch the injected bugs. It is intentionally slower than cargo test, so keep it as a local or scheduled release gate rather than a fast pull-request check.

Property and stress tests

The regular test suite includes property-based tests with proptest for invariants that should hold across many input shapes:

  • generated IDs are unique and monotonic
  • extracted node and sequence components stay within configured bounds
  • logical batch generation preserves ordering across rollover
  • try_generate_batch() never writes more IDs than requested or current wall-clock capacity allows

Run them with the rest of the suite:

cargo test --release

Focused high-load checks are also included:

cargo test test_high_load_shared_logical_generation --release
cargo test test_concurrent_logical_overflow_lockfree --release
cargo test test_concurrent_logical_batch_generation_lockfree --release

These tests exercise one shared generator under heavy logical rollover and concurrent batch generation. They are not a formal proof of correctness, but they are the practical equivalent of penetration-style load tests for this library's core failure modes: duplicates, non-monotonic IDs, sequence rollover bugs, and future logical timestamp handling.