Merge pull request #2774 from vitorpamplona/claude/fix-nostr-repeat-sub-test-mOpDe

test(quartz): make repeat-sub test tolerant of resub timing race
This commit is contained in:
Vitor Pamplona
2026-05-07 21:04:01 -04:00
committed by GitHub
@@ -128,17 +128,24 @@ class NostrClientRepeatSubTest : RelayClientTest() {
client.unsubscribe(mySubId)
client.removeConnectionListener(listener)
// The relay may return up to limit events before EOSE; some relays return
// one extra past the requested limit, so don't assert on the exact count.
// The split between the three subscriptions is inherently racy:
// the consumer fires resub1 (filtersShouldIgnore) at events.size==1
// and resub2 (filtersShouldSendAfterEOSE) at events.size==5, but
// those four receive() calls give resub1 enough wall-clock time on
// a slow machine to actually reach the relay and start streaming
// events before resub2 replaces it. Verify only the structural
// invariants: two EOSEs, the loop stopped on the second one, and
// every non-EOSE entry is a valid 64-char event id.
val firstEose = events.indexOf("EOSE")
val lastEose = events.lastIndexOf("EOSE")
val eoseCount = events.count { it == "EOSE" }
assertEquals(true, firstEose >= 0)
assertEquals(true, lastEose > firstEose)
assertEquals(2, eoseCount)
assertEquals(events.size - 1, lastEose)
assertEquals(true, firstEose in 1..101)
assertEquals(true, (lastEose - firstEose - 1) in 1..11)
assertEquals(true, events.take(firstEose).all { it.length == 64 })
assertEquals(true, events.subList(firstEose + 1, lastEose).all { it.length == 64 })
assertEquals(true, firstEose in 0 until lastEose)
assertEquals(true, events.filter { it != "EOSE" }.all { it.length == 64 })
// Upper bound: original (100) + filtersShouldIgnore (50) + filtersShouldSendAfterEOSE (10) + 2 EOSEs,
// plus a small allowance for relays that overshoot their limit by one.
assertEquals(true, events.size <= 165)
}
}