From 821fbe028ff95070e4fed5d92619bccdc1519b5c Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Tue, 14 Jul 2026 21:00:39 +0200 Subject: [PATCH] Add messaging REST client test --- tests/api/test_entry_layer.nim | 63 +++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/tests/api/test_entry_layer.nim b/tests/api/test_entry_layer.nim index 12fc92236..93e1bfce8 100644 --- a/tests/api/test_entry_layer.nim +++ b/tests/api/test_entry_layer.nim @@ -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