mirror of https://github.com/waku-org/nwaku.git
adding test and refactor
This commit is contained in:
parent
b36d823d99
commit
50dd0d7242
|
@ -85,6 +85,38 @@ func node*(app: App): WakuNode =
|
||||||
func version*(app: App): string =
|
func version*(app: App): string =
|
||||||
app.version
|
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
|
## Initialisation
|
||||||
|
|
||||||
proc init*(T: type App, conf: WakuNodeConf): Result[App, string] =
|
proc init*(T: type App, conf: WakuNodeConf): Result[App, string] =
|
||||||
|
|
|
@ -6,7 +6,8 @@ import
|
||||||
|
|
||||||
import
|
import
|
||||||
../testlib/wakunode,
|
../testlib/wakunode,
|
||||||
../../waku/factory/node_factory
|
../../waku/factory/node_factory,
|
||||||
|
../../waku/waku_node
|
||||||
|
|
||||||
suite "Node Factory":
|
suite "Node Factory":
|
||||||
test "Set up a node based on default configurations":
|
test "Set up a node based on default configurations":
|
||||||
|
@ -44,7 +45,25 @@ test "Set up a node with Filter enabled":
|
||||||
|
|
||||||
check:
|
check:
|
||||||
not node.isNil()
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import
|
||||||
## Peer persistence
|
## Peer persistence
|
||||||
|
|
||||||
const PeerPersistenceDbUrl = "peers.db"
|
const PeerPersistenceDbUrl = "peers.db"
|
||||||
proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] =
|
proc setupPeerStorage(): Result[Option[WakuPeerStorage], string] =
|
||||||
let db = ? SqliteDatabase.new(PeerPersistenceDbUrl)
|
let db = ? SqliteDatabase.new(PeerPersistenceDbUrl)
|
||||||
|
|
||||||
? peer_store_sqlite_migrations.migrate(db)
|
? peer_store_sqlite_migrations.migrate(db)
|
||||||
|
@ -44,41 +44,9 @@ proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] =
|
||||||
|
|
||||||
ok(some(res.value))
|
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
|
## Init waku node instance
|
||||||
|
|
||||||
proc initNode*(conf: WakuNodeConf,
|
proc initNode(conf: WakuNodeConf,
|
||||||
netConfig: NetConfig,
|
netConfig: NetConfig,
|
||||||
rng: ref HmacDrbgContext,
|
rng: ref HmacDrbgContext,
|
||||||
nodeKey: crypto.PrivateKey,
|
nodeKey: crypto.PrivateKey,
|
||||||
|
@ -130,7 +98,7 @@ proc initNode*(conf: WakuNodeConf,
|
||||||
|
|
||||||
## Mount protocols
|
## Mount protocols
|
||||||
|
|
||||||
proc setupProtocols*(node: WakuNode,
|
proc setupProtocols(node: WakuNode,
|
||||||
conf: WakuNodeConf,
|
conf: WakuNodeConf,
|
||||||
nodeKey: crypto.PrivateKey):
|
nodeKey: crypto.PrivateKey):
|
||||||
Future[Result[void, string]] {.async.} =
|
Future[Result[void, string]] {.async.} =
|
||||||
|
|
Loading…
Reference in New Issue