mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-06-04 13:09:32 +00:00
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>
61 lines
1.5 KiB
Nim
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()
|