Add messaging REST client test

This commit is contained in:
NagyZoltanPeter 2026-07-14 21:00:39 +02:00
parent 6cc7b3b9a9
commit 821fbe028f
No known key found for this signature in database
GPG Key ID: 3E1F97CF4A7B6F42

View File

@ -1,10 +1,13 @@
{.used.}
import std/[options, net]
import chronos, testutils/unittests
import chronos, testutils/unittests, presto, presto/client as presto_client
import brokers/broker_context
import logos_delivery
import logos_delivery/api/conf/logos_delivery_conf
import
logos_delivery/api/conf/logos_delivery_conf,
logos_delivery/messaging/rest_api/client as messaging_rest_client,
logos_delivery/waku/rest_api/endpoint/client
import tools/confutils/cli_args
import ../testlib/testasync
@ -16,7 +19,7 @@ import ../testlib/testasync
## messaging -> waku + messagingClient
## channels -> waku + messagingClient + reliableChannelManager
proc nodeConf(entryLayer: EntryLayer): WakuNodeConf =
proc nodeConf(entryLayer: EntryLayer, rest = false): WakuNodeConf =
var conf = defaultWakuNodeConf().valueOr:
raiseAssert error
conf.entryLayer = entryLayer
@ -26,9 +29,15 @@ proc nodeConf(entryLayer: EntryLayer): WakuNodeConf =
conf.discv5UdpPort = Port(0)
conf.clusterId = some(3'u16)
conf.numShardsInNetwork = 1
conf.rest = false
conf.rest = rest
conf.restAddress = parseIpAddress("127.0.0.1")
conf.restPort = 0'u16 # bind to an ephemeral port
return conf
proc restClientFor(node: LogosDelivery): RestClientRef =
let boundPort = node.waku.restServer.httpServer.address.port
newRestHttpClient(initTAddress(parseIpAddress("127.0.0.1"), boundPort))
suite "LogosDelivery - entry layer selection":
asyncTest "kernel: waku only, no messaging / channels":
var node: LogosDelivery
@ -71,3 +80,49 @@ suite "LogosDelivery - entry layer selection":
node.ensureChannels().isOk()
(await node.stop()).isOkOr:
raiseAssert "stop failed: " & error
asyncTest "messaging + rest: messaging REST endpoints are installed and working":
## entry-layer=messaging, mode=Core, rest=true -> `start` mounts the messaging
## REST endpoints; they respond over HTTP.
var node: LogosDelivery
lockNewGlobalBrokerContext:
node = (await LogosDelivery.new(nodeConf(EntryLayer.messaging, rest = true))).valueOr:
raiseAssert error
(await node.start()).isOkOr:
raiseAssert "start failed: " & error
check not node.messagingClient.isNil()
let client = restClientFor(node)
# A command endpoint and an observability endpoint both respond -> the
# handlers were installed onto the kernel router.
let subResp =
await client.messagingPostSubscriptionsV1(@["/test/1/entry-layer/proto"])
check subResp.status == 200
let sendEventsResp = await client.messagingGetSendEventsV1()
check sendEventsResp.status == 200
(await node.stop()).isOkOr:
raiseAssert "stop failed: " & error
asyncTest "kernel + rest: messaging REST endpoints are NOT installed":
## Gating check: a kernel-only node still starts a REST server, but the
## messaging endpoints must be absent (no messaging client to mount them).
var node: LogosDelivery
lockNewGlobalBrokerContext:
node = (await LogosDelivery.new(nodeConf(EntryLayer.kernel, rest = true))).valueOr:
raiseAssert error
(await node.start()).isOkOr:
raiseAssert "start failed: " & error
check node.messagingClient.isNil()
let client = restClientFor(node)
let subResp =
await client.messagingPostSubscriptionsV1(@["/test/1/entry-layer/proto"])
check subResp.status == 404 # route not mounted
(await node.stop()).isOkOr:
raiseAssert "stop failed: " & error