logos-delivery/tests/factory/test_node_factory.nim
NagyZoltanPeter 300f584efc
Removed duplicates of announcedAddresses, extMultiaddresses (#3831)
Removing duplicates of multiaddresses for Enr.
Safe building Enr Record.

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 15:10:21 +02:00

120 lines
3.2 KiB
Nim

{.used.}
import
std/[options, sequtils],
testutils/unittests,
chronos,
libp2p/multiaddress,
libp2p/protocols/connectivity/relay/relay
import eth/p2p/discoveryv5/enr
import
../testlib/wakunode,
waku/waku_node,
waku/waku_enr,
waku/factory/node_factory,
waku/factory/internal_config,
waku/factory/conf_builder/conf_builder,
waku/factory/conf_builder/web_socket_conf_builder
suite "Node Factory":
asynctest "Set up a node based on default configurations":
let conf = defaultTestWakuConf()
let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error
check:
not node.isNil()
node.wakuArchive.isNil()
node.wakuStore.isNil()
node.wakuFilter.isNil()
not node.wakuStoreClient.isNil()
not node.wakuRendezvous.isNil()
asynctest "Set up a node with Store enabled":
var confBuilder = defaultTestWakuConfBuilder()
confBuilder.storeServiceConf.withEnabled(true)
confBuilder.storeServiceConf.withDbUrl("sqlite://store.sqlite3")
let conf = confBuilder.build().value
let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error
check:
not node.isNil()
not node.wakuStore.isNil()
not node.wakuArchive.isNil()
test "ENR configuration trims multiaddrs until record fits":
var conf = defaultTestWakuConf()
let bindIp = conf.endpointConf.p2pListenAddress
let bindPort = Port(30303)
let oversizedMultiaddrs = (0 .. 11).mapIt(
MultiAddress
.init(
"/dns4/very-long-logical-hostname-" & $it &
".example.logos.dev.status.im/tcp/30303/wss"
)
.get()
)
let netConfig = NetConfig.init(
clusterId = conf.clusterId,
bindIp = bindIp,
bindPort = bindPort,
extMultiAddrs = oversizedMultiaddrs,
extMultiAddrsOnly = true,
wakuFlags = some(conf.wakuFlags),
).valueOr:
raiseAssert error
let record = enrConfiguration(conf, netConfig).valueOr:
raiseAssert error
let typedRecord = record.toTyped()
require typedRecord.isOk()
let multiaddrsOpt = typedRecord.value.multiaddrs
require multiaddrsOpt.isSome()
let retainedMultiaddrs = multiaddrsOpt.get()
check:
retainedMultiaddrs.len < oversizedMultiaddrs.len
retainedMultiaddrs.len > 0
retainedMultiaddrs == oversizedMultiaddrs[0 ..< retainedMultiaddrs.len]
asynctest "Set up a node with Filter enabled":
var confBuilder = defaultTestWakuConfBuilder()
confBuilder.filterServiceConf.withEnabled(true)
let conf = confBuilder.build().value
let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error
check:
not node.isNil()
not node.wakuFilter.isNil()
echo "TEST END"
asynctest "Start a node based on default test configuration":
let conf = defaultTestWakuConf()
let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error
assert not node.isNil(), "Node can't be nil"
let startRes = catch:
(await startNode(node, conf))
assert not startRes.isErr(), "Exception starting node"
assert startRes.get().isOk(), "Error starting node " & startRes.get().error
check:
node.started == true
## Cleanup
await node.stop()