nwaku/tests/wakunode2/test_app.nim

124 lines
3.1 KiB
Nim

{.used.}
import
stew/shims/net,
testutils/unittests,
chronicles,
chronos,
libp2p/crypto/crypto,
libp2p/crypto/secp,
libp2p/multiaddress,
libp2p/switch
import
../testlib/common,
../testlib/wakucore,
../testlib/wakunode
include
../../apps/wakunode2/app
suite "Wakunode2 - App":
test "compilation version should be reported":
## Given
let conf = defaultTestWakuNodeConf()
var wakunode2 = App.init(rng(), conf)
## When
let version = wakunode2.version
## Then
check:
version == git_version
suite "Wakunode2 - App initialization":
test "peer persistence setup should be successfully mounted":
## Given
var conf = defaultTestWakuNodeConf()
conf.peerPersistence = true
var wakunode2 = App.init(rng(), conf)
## When
let res = wakunode2.setupPeerPersistence()
## Then
check res.isOk()
test "node setup is successful with default configuration":
## Given
let conf = defaultTestWakuNodeConf()
## When
var wakunode2 = App.init(rng(), conf)
let persRes = wakunode2.setupPeerPersistence()
assert persRes.isOk(), persRes.error
let bootRes = wakunode2.setupDyamicBootstrapNodes()
assert bootRes.isOk(), bootRes.error
let setupRes = wakunode2.setupWakuApp()
assert setupRes.isOk(), setupRes.error
let mountRes = waitFor wakunode2.setupAndMountProtocols()
assert mountRes.isOk(), mountRes.error
let startRes = wakunode2.startApp()
assert startRes.isOk(), startRes.error
let monitorRes = wakunode2.setupMonitoringAndExternalInterfaces()
assert monitorRes.isOk(), monitorRes.error
## Then
let node = wakunode2.node
check:
not node.isNil()
node.wakuArchive.isNil()
node.wakuStore.isNil()
not node.wakuStoreClient.isNil()
not node.rendezvous.isNil()
## Cleanup
waitFor wakunode2.stop()
test "app properly handles dynamic port configuration":
## Given
var conf = defaultTestWakuNodeConf()
conf.tcpPort = Port(0)
## When
var wakunode2 = App.init(rng(), conf)
require wakunode2.setupPeerPersistence().isOk()
require wakunode2.setupDyamicBootstrapNodes().isOk()
require wakunode2.setupWakuApp().isOk()
require isOk(waitFor wakunode2.setupAndMountProtocols())
require isOk(wakunode2.startApp())
require wakunode2.setupMonitoringAndExternalInterfaces().isOk()
## Then
let
node = wakunode2.node
typedNodeEnr = node.enr.toTypedRecord()
typedAppEnr = wakunode2.record.toTypedRecord()
assert typedNodeEnr.isOk(), $typedNodeEnr.error
assert typedAppEnr.isOk(), $typedAppEnr.error
check:
# App started properly
not node.isNil()
node.wakuArchive.isNil()
node.wakuStore.isNil()
not node.wakuStoreClient.isNil()
not node.rendezvous.isNil()
# DS structures are updated with dynamic ports
wakunode2.netConf.bindPort != Port(0)
wakunode2.netConf.enrPort.get() != Port(0)
typedNodeEnr.get().tcp.get() != 0
typedAppEnr.get().tcp.get() != 0
## Cleanup
waitFor wakunode2.stop()