From 3eebc7288b76fdc4ba40c3bfd838e325668fd2d1 Mon Sep 17 00:00:00 2001 From: Darshan <35736874+darshankabariya@users.noreply.github.com> Date: Fri, 26 Jun 2026 01:23:57 +0530 Subject: [PATCH] test: add S16 lightpush dynamic-recovery unittest (#3995) --- tests/api/test_api_send.nim | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/api/test_api_send.nim b/tests/api/test_api_send.nim index f64715592..0ad1cea4a 100644 --- a/tests/api/test_api_send.nim +++ b/tests/api/test_api_send.nim @@ -387,6 +387,46 @@ suite "Waku API - Send": (await node.stop()).isOkOr: raiseAssert "Failed to stop node: " & error + asyncTest "S16 - isolated sender recovers when lightpush peer appears later": + ## Edge sender starts with no peer; a lightpush peer appears mid-send and a + ## later retry must deliver the queued message. + var node: LogosDelivery + lockNewGlobalBrokerContext: + node = (await LogosDelivery.new(createApiNodeConf(cli_args.WakuMode.Edge))).valueOr: + raiseAssert error + (await node.start()).isOkOr: + raiseAssert "Failed to start Waku node: " & error + # No connectToNodes: the sender has no reachable peer at T0. + + check node.waku.node.wakuRelay.isNil() + + let eventManager = newSendEventListenerManager(node.waku.brokerCtx) + defer: + await eventManager.teardown() + + let envelope = MessageEnvelope.init( + ContentTopic("/waku/2/default-content/proto"), "test payload" + ) + + # send() with no peer must still succeed; the message is queued and retried. + let requestId = (await node.messagingClient.send(envelope)).valueOr: + raiseAssert error + + # Nothing should propagate while isolated (retry interval is 1s). + await sleepAsync(5.seconds) + check eventManager.propagatedCount == 0 + + # The lightpush peer appears; a later retry must now deliver. + await node.waku.node.connectToNodes(@[lightpushNodePeerInfo]) + + const eventTimeout = 10.seconds + discard await eventManager.waitForEvents(eventTimeout) + + eventManager.validate({SendEventOutcome.Propagated}, requestId) + + (await node.stop()).isOkOr: + raiseAssert "Failed to stop node: " & error + asyncTest "Send fully validates fallback to lightpush": var node: LogosDelivery lockNewGlobalBrokerContext: