Skip to content

Commit ef8afbd

Browse files
committed
test(xmtp_mls): randomized bidi delivery fuzz against the live node
Two seeded fuzz tests run against the containerized backend, closing the gap the scripted suite cannot: unscripted interleavings, and the real server rather than a model of it. - fuzz_server_honors_the_bidi_wave_contract: raw BidiConnection under random publish/add/yank/remove churn; asserts always-ack, per-topic wave cursor order, the live-lane hold for yanked topics (armed at the wave's first tagged frame — stream-ordered, race-free), live frames strictly above the cross-lane high-water, and completeness above the lowest asked cursor against a final authoritative query. - fuzz_transport_delivery_never_loses_above_the_floor: a real BidiTransport whose wire runs through toxiproxy; random lease/yank/ unsubscribe/stall/suspend-resume schedules plus real TCP blips; asserts per-lease exactly-once above its floor, completeness to the live edge for every surviving lease, catch-up liveness, and recovery-chain union completeness across backpressure drops (relinked from received state — the durable-cursor recovery shape). Welcome topics ride the same invariants; schedule telemetry is logged so dark levers are visible. Seeds print at start and ride every assertion (XMTP_BIDI_FUZZ_SEED to replay; XMTP_BIDI_FUZZ_ROUNDS to scale). nextest retries are disabled for these tests — a retry would re-roll the seed and mask a finding. Already earned its keep: caught the removes-wave/untagged-tombstone collision and validated the deref-mid-replay fix, both in the tags PR.
1 parent fe57383 commit ef8afbd

3 files changed

Lines changed: 1110 additions & 0 deletions

File tree

.config/nextest.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,13 @@ path = "junit.xml"
4242
platform = 'cfg(all(target_family = "wasm", target_os = "unknown"))'
4343
default-filter = "not (test(/\\w*commit_log*/))"
4444
threads-required = 2
45+
46+
# Fuzz tests print their seed and must fail loudly — a retry would re-roll
47+
# the seed and mask the finding.
48+
[[profile.default.overrides]]
49+
filter = 'test(/bidi_fuzz/)'
50+
retries = 0
51+
52+
[[profile.ci.overrides]]
53+
filter = 'test(/bidi_fuzz/)'
54+
retries = 0

0 commit comments

Comments
 (0)