> torch-lock@0.1.0 test:unit:lock-backend > node --test test/lock-ops.test.mjs test/lock-ops-publish-retry.test.mjs TAP version 13 # [publish:primary] Publishing to 1 relays (wss://relay-a)... # Published to 1/1 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 1 relays (wss://relay-a)... # [publish:primary] Publishing to 1 relays (wss://relay-a)... # Published to 1/1 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 1 relays (wss://relay-a)... # [publish:primary] Publishing to 1 relays (wss://relay-a)... # [publish:primary] Publishing to 1 relays (wss://relay-a)... # [publish:primary] Publishing to 1 relays (wss://relay-a)... # (node:3760) ExperimentalWarning: The MockTimers API is an experimental feature and might change at any time # (Use `node --trace-warnings ...` to show where the warning was created) # Subtest: publishLock retry behavior # Subtest: succeeds immediately on first attempt without retries ok 1 - succeeds immediately on first attempt without retries --- duration_ms: 7.968017 type: 'test' ... # Subtest: retries a transient failure then succeeds within retry budget with bounded jitter ok 2 - retries a transient failure then succeeds within retry budget with bounded jitter --- duration_ms: 4.052192 type: 'test' ... # Subtest: returns terminal relay_publish_quorum_failure after exhausting retry budget ok 3 - returns terminal relay_publish_quorum_failure after exhausting retry budget --- duration_ms: 4.597509 type: 'test' ... # Subtest: short-circuits non-retryable failures without extra attempts ok 4 - short-circuits non-retryable failures without extra attempts --- duration_ms: 5.143082 type: 'test' ... 1..4 ok 1 - publishLock retry behavior --- duration_ms: 25.051826 type: 'suite' ... # [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)... # [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)... # Published to 2/2 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 1 relays (wss://primary-down)... # [publish:primary] Publishing to 1 relays (wss://primary-down)... # [publish:primary] Publishing to 1 relays (wss://primary-down)... # [publish:primary] Publishing to 1 relays (wss://primary-bad)... # [publish:primary] Publishing to 5 relays (relay-timeout, wss://dns, wss://tcp, wss://tls, wss://ws)... # [publish:primary] Publishing to 2 relays (wss://relay-bad, wss://relay-ok)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":1}],"totalElapsedMs":1} # Published to 1/2 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 1 relays (wss://primary-bad)... # [publish:fallback] Publishing to 1 relays (wss://fallback-ok)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":0}],"totalElapsedMs":0} # Published to 1/2 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 2 relays (wss://bad, wss://healthy)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":1}],"totalElapsedMs":1} # Published to 1/2 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 2 relays (wss://healthy, wss://bad)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":0}],"totalElapsedMs":0} # Published to 1/2 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 1 relays (wss://healthy)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"elapsedMs":0}],"totalElapsedMs":0} # Published to 1/1 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 1 relays (wss://healthy)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"elapsedMs":1}],"totalElapsedMs":1} # Published to 1/1 relays (required=1, timeout=200ms) # [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)... # [publish:fallback] Publishing to 1 relays (wss://fallback-healthy)... # {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":3,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":3,"elapsedMs":1}],"totalElapsedMs":1} # Published to 1/3 relays (required=1, timeout=200ms) # Subtest: lock-ops # Subtest: parseLockEvent # Subtest: parses a valid lock event correctly ok 1 - parses a valid lock event correctly --- duration_ms: 4.396514 type: 'test' ... 1..1 ok 1 - parseLockEvent --- duration_ms: 6.9509 type: 'suite' ... # Subtest: queryLocks # Subtest: falls back to fallback relays when primary query fails ok 1 - falls back to fallback relays when primary query fails --- duration_ms: 19.306079 type: 'test' ... 1..1 ok 2 - queryLocks --- duration_ms: 19.534904 type: 'suite' ... # Subtest: publishLock # Subtest: retries transient failures and succeeds on a later attempt ok 1 - retries transient failures and succeeds on a later attempt --- duration_ms: 11.113808 type: 'test' ... # Subtest: fails after retry budget is exhausted for persistent transient failures ok 2 - fails after retry budget is exhausted for persistent transient failures --- duration_ms: 5.744097 type: 'test' ... # Subtest: fails without retry for persistent validation failures ok 3 - fails without retry for persistent validation failures --- duration_ms: 3.423183 type: 'test' ... # Subtest: includes per-relay reason categories and retry metadata in failure diagnostics ok 4 - includes per-relay reason categories and retry metadata in failure diagnostics --- duration_ms: 3.009087 type: 'test' ... # Subtest: returns success when mixed relay outcomes still satisfy quorum ok 5 - returns success when mixed relay outcomes still satisfy quorum --- duration_ms: 1.594997 type: 'test' ... # Subtest: uses fallback relays to satisfy min success quorum ok 6 - uses fallback relays to satisfy min success quorum --- duration_ms: 1.382646 type: 'test' ... # Subtest: quarantines repeatedly failing relays and still reaches quorum with one healthy relay ok 7 - quarantines repeatedly failing relays and still reaches quorum with one healthy relay --- duration_ms: 3.866976 type: 'test' ... # Subtest: uses fallback and min active pool to reintroduce quarantined relay when needed ok 8 - uses fallback and min active pool to reintroduce quarantined relay when needed --- duration_ms: 2.56156 type: 'test' ... 1..8 ok 3 - publishLock --- duration_ms: 34.278329 type: 'suite' ... 1..3 ok 2 - lock-ops --- duration_ms: 62.352434 type: 'suite' ... 1..2 # tests 14 # suites 5 # pass 14 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 245.037609