From 50dd0d724203f8085fd73ca769f30a4320c143e5 Mon Sep 17 00:00:00 2001 From: Gabriel mermelstein Date: Fri, 8 Mar 2024 17:55:19 -0600 Subject: [PATCH] adding test and refactor --- apps/wakunode2/app.nim | 32 ++++++++++++++++++++++++ tests/factory/test_node_factory.nim | 25 ++++++++++++++++--- waku/factory/node_factory.nim | 38 +++-------------------------- 3 files changed, 57 insertions(+), 38 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index da842be05..427326758 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -85,6 +85,38 @@ func node*(app: App): WakuNode = func version*(app: App): string = app.version +## Retrieve dynamic bootstrap nodes (DNS discovery) + +proc retrieveDynamicBootstrapNodes(dnsDiscovery: bool, + dnsDiscoveryUrl: string, + dnsDiscoveryNameServers: seq[IpAddress]): + Result[seq[RemotePeerInfo], string] = + + if dnsDiscovery and dnsDiscoveryUrl != "": + # DNS discovery + debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl + + var nameServers: seq[TransportAddress] + for ip in dnsDiscoveryNameServers: + nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 + + let dnsResolver = DnsResolver.new(nameServers) + + proc resolver(domain: string): Future[string] {.async, gcsafe.} = + trace "resolving", domain=domain + let resolved = await dnsResolver.resolveTxt(domain) + return resolved[0] # Use only first answer + + var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl, resolver) + if wakuDnsDiscovery.isOk(): + return wakuDnsDiscovery.get().findPeers() + .mapErr(proc (e: cstring): string = $e) + else: + warn "Failed to init Waku DNS discovery" + + debug "No method for retrieving dynamic bootstrap nodes specified." + ok(newSeq[RemotePeerInfo]()) # Return an empty seq by default + ## Initialisation proc init*(T: type App, conf: WakuNodeConf): Result[App, string] = diff --git a/tests/factory/test_node_factory.nim b/tests/factory/test_node_factory.nim index bd78aa0b6..1383f4fb6 100644 --- a/tests/factory/test_node_factory.nim +++ b/tests/factory/test_node_factory.nim @@ -6,7 +6,8 @@ import import ../testlib/wakunode, - ../../waku/factory/node_factory + ../../waku/factory/node_factory, + ../../waku/waku_node suite "Node Factory": test "Set up a node based on default configurations": @@ -44,7 +45,25 @@ test "Set up a node with Filter enabled": check: not node.isNil() - not node.wakuFilter.isNil() - + not node.wakuFilter.isNil() + +test "Start a node based on default configurations": + let conf = defaultTestWakuNodeConf() + + let node = setupNode(conf).valueOr: + raiseAssert error + + assert not node.isNil(), "Node can't be nil" + + let startRes = catch: (waitFor 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 + waitFor node.stop() diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim index 5a0854181..3bf8d3160 100644 --- a/waku/factory/node_factory.nim +++ b/waku/factory/node_factory.nim @@ -33,7 +33,7 @@ import ## Peer persistence const PeerPersistenceDbUrl = "peers.db" -proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] = +proc setupPeerStorage(): Result[Option[WakuPeerStorage], string] = let db = ? SqliteDatabase.new(PeerPersistenceDbUrl) ? peer_store_sqlite_migrations.migrate(db) @@ -44,41 +44,9 @@ proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] = ok(some(res.value)) -## Retrieve dynamic bootstrap nodes (DNS discovery) - -proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, - dnsDiscoveryUrl: string, - dnsDiscoveryNameServers: seq[IpAddress]): - Result[seq[RemotePeerInfo], string] = - - if dnsDiscovery and dnsDiscoveryUrl != "": - # DNS discovery - debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl - - var nameServers: seq[TransportAddress] - for ip in dnsDiscoveryNameServers: - nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 - - let dnsResolver = DnsResolver.new(nameServers) - - proc resolver(domain: string): Future[string] {.async, gcsafe.} = - trace "resolving", domain=domain - let resolved = await dnsResolver.resolveTxt(domain) - return resolved[0] # Use only first answer - - var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl, resolver) - if wakuDnsDiscovery.isOk(): - return wakuDnsDiscovery.get().findPeers() - .mapErr(proc (e: cstring): string = $e) - else: - warn "Failed to init Waku DNS discovery" - - debug "No method for retrieving dynamic bootstrap nodes specified." - ok(newSeq[RemotePeerInfo]()) # Return an empty seq by default - ## Init waku node instance -proc initNode*(conf: WakuNodeConf, +proc initNode(conf: WakuNodeConf, netConfig: NetConfig, rng: ref HmacDrbgContext, nodeKey: crypto.PrivateKey, @@ -130,7 +98,7 @@ proc initNode*(conf: WakuNodeConf, ## Mount protocols -proc setupProtocols*(node: WakuNode, +proc setupProtocols(node: WakuNode, conf: WakuNodeConf, nodeKey: crypto.PrivateKey): Future[Result[void, string]] {.async.} =