logos-delivery/tests/test_waku_keepalive.nim
Ivan FB 89d1f87bfe
Rename kernel_api dir to waku_node and tidy node module layout
Why these changes hang together:

- Rename `waku/node/kernel_api/` to `waku/node/waku_node/`: the folder
  holds the node's protocol APIs, so it should carry the node's name
  rather than the legacy "kernel_api" label.

- Collapse the old `kernel_api.nim` aggregator into the top-level
  `waku/waku_node.nim` barrel, and drop `net_config`/`health_monitor`
  from it. Those aren't the node's concern; consumers that used them
  now import them directly (clearer, explicit deps).

- Move the `WakuNode` type from `node_types.nim` into `waku_node.nim`.
  `node_types.nim` only existed to dodge a `WakuNode`/`SubscriptionManager`
  import cycle that Nim actually handles fine, so the type now lives in
  one obvious home and the indirection module is deleted.

- Extract `ShardSubscription` and `EdgeFilterSubState` into their own
  small modules: they are standalone value types with no back-reference
  to the node. `SubscriptionManager` stays with `WakuNode` on purpose
  (it is the node's subscription subsystem; the relationship is real).

Verified: `wakunode2` and `libwaku` build; representative node tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 13:59:07 +02:00

61 lines
1.5 KiB
Nim

{.used.}
import
testutils/unittests,
chronos,
chronicles,
libp2p/switch,
libp2p/protocols/ping,
libp2p/stream/bufferstream,
libp2p/stream/connection,
libp2p/crypto/crypto
import
waku/waku_core,
waku/waku_node,
waku/node/health_monitor,
./testlib/wakucore,
./testlib/wakunode
suite "Waku Keepalive":
asyncTest "handle ping keepalives":
let
nodeKey1 = generateSecp256k1Key()
node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0))
nodeKey2 = generateSecp256k1Key()
node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0))
var completionFut = newFuture[bool]()
proc pingHandler(peerId: PeerID) {.async, gcsafe.} =
info "Ping received"
check:
peerId == node1.switch.peerInfo.peerId
completionFut.complete(true)
await node1.start()
(await node1.mountRelay()).isOkOr:
assert false, "Failed to mount relay"
await node1.mountLibp2pPing()
await node2.start()
(await node2.mountRelay()).isOkOr:
assert false, "Failed to mount relay"
let pingProto = Ping.new(handler = pingHandler)
await pingProto.start()
node2.switch.mount(pingProto)
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
let healthMonitor = NodeHealthMonitor.new(node1)
healthMonitor.startKeepalive(2.seconds).isOkOr:
assert false, "Failed to start keepalive"
check:
(await completionFut.withTimeout(5.seconds)) == true
await node2.stop()
await node1.stop()