Files
buzz/crates/buzz-relay
npub17jjz49l9jjmhhk7cac63j8yt9z555n9cw8vk7v5jz4vzw4ppld5qgj57cc 34ffb8ab37 test(relay): red-team Attack 3 — same-pod regression + fail-closed proof
Adds two regression tests against Max's NIP-98 replay-guard wiring
(b30869d44), proving distinct properties beyond his existing
cross-pod test:

1. nip98_replay_guard_rejects_same_pod_same_community_replay
   (#[ignore], requires Redis) — single guard instance, A1 then A2
   with the same TenantContext rejects the second call. Guards
   against a fix that accidentally weakens same-pod replay
   detection when moka is replaced with the shared Redis seen-set.

2. nip98_replay_check_fails_closed_when_guard_errors (CI-runnable,
   no Redis) — injects a stub Nip98ReplayGuard that always returns
   Err(AuthError::Internal(_)); asserts check_nip98_replay_with_guard
   maps it to (401, error="NIP-98: replay check unavailable").
   Exercises the Err => arm of the match (bridge.rs:107-117) which
   is otherwise untested. This is the load-bearing fail-closed
   property: a stateless worker that loses Redis MUST reject rather
   than admit (Nip98ReplayGuard trait contract,
   buzz-auth/src/nip98_replay.rs:70-73).

Mutate→red→restore (two orthogonal bites, both verified):

- Mutate Ok(false) => Err(...) → Ok(()) at bridge.rs:103. Reds
  Max's cross_pod test AND same_pod_replay; fail_closed stays
  green (doesn't exercise this arm). Restored.
- Mutate Err(e) => Err(api_error(...)) → Ok(()) at bridge.rs:113.
  Reds ONLY fail_closed; cross_pod and same_pod stay green
  (don't trigger Err). Restored.

Distinct mutations bite distinct tests — proves the new properties
are load-bearing, not vacuous, and independent of Max's coverage.

Verification on this commit:
- cargo fmt --all -- --check ✅
- cargo clippy -p buzz-relay --all-targets -- -D warnings ✅
- REDIS_URL=… cargo test -p buzz-relay --lib \
    api::bridge::tests::nip98_replay -- --include-ignored \
    --test-threads=1 → 3/0 ✅ (Max's + 2 new)
- cargo test -p buzz-relay -- --test-threads=1 → 390/0 + 2 ignored ✅
  (baseline 389/1 ignored; +1 passing fail-closed, +1 ignored same-pod)

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
(cherry picked from commit 64a94bec901733ee87a84cbb4938e1180a5ca289)
2026-06-27 00:42:49 -04:00
..