2023-09-29 13:30:07 +00:00
|
|
|
{.used.}
|
|
|
|
|
|
|
|
import
|
|
|
|
chronos,
|
|
|
|
confutils/toml/std/net,
|
|
|
|
libp2p/multiaddress,
|
|
|
|
testutils/unittests
|
|
|
|
|
|
|
|
import
|
|
|
|
./testlib/wakunode,
|
|
|
|
../../waku/waku_enr/capabilities
|
|
|
|
|
|
|
|
include
|
|
|
|
../../waku/node/config
|
|
|
|
|
|
|
|
proc defaultTestWakuFlags(): CapabilitiesBitfield =
|
|
|
|
CapabilitiesBitfield.init(
|
|
|
|
lightpush = false,
|
|
|
|
filter = false,
|
|
|
|
store = false,
|
|
|
|
relay = true
|
|
|
|
)
|
|
|
|
|
|
|
|
suite "Waku NetConfig":
|
|
|
|
|
|
|
|
asyncTest "Create NetConfig with default values":
|
|
|
|
|
|
|
|
let conf = defaultTestWakuNodeConf()
|
|
|
|
|
|
|
|
let wakuFlags = defaultTestWakuFlags()
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extIp = none(ValidIpAddress),
|
|
|
|
extPort = none(Port),
|
|
|
|
extMultiAddrs = @[],
|
|
|
|
wsBindPort = conf.websocketPort,
|
|
|
|
wsEnabled = conf.websocketSupport,
|
|
|
|
wssEnabled = conf.websocketSecureSupport,
|
|
|
|
dns4DomainName = none(string),
|
|
|
|
discv5UdpPort = none(Port),
|
|
|
|
wakuFlags = some(wakuFlags)
|
|
|
|
)
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfigRes.isOk()
|
|
|
|
|
|
|
|
asyncTest "AnnouncedAddresses contains only bind address when no external addresses are provided":
|
|
|
|
|
|
|
|
let conf = defaultTestWakuNodeConf()
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 1 # Only bind address should be present
|
|
|
|
netConfig.announcedAddresses[0] == formatListenAddress(ip4TcpEndPoint(conf.listenAddress, conf.tcpPort))
|
|
|
|
|
|
|
|
|
|
|
|
asyncTest "AnnouncedAddresses contains external address if extIp/Port are provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
extIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extPort = Port(1234)
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extIp = some(extIp),
|
|
|
|
extPort = some(extPort)
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 1 # Only external address should be present
|
|
|
|
netConfig.announcedAddresses[0] == ip4TcpEndPoint(extIp, extPort)
|
|
|
|
|
|
|
|
asyncTest "AnnouncedAddresses contains dns4DomainName if provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
dns4DomainName = "example.com"
|
|
|
|
extPort = Port(1234)
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
dns4DomainName = some(dns4DomainName),
|
|
|
|
extPort = some(extPort)
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 1 # Only DNS address should be present
|
|
|
|
netConfig.announcedAddresses[0] == dns4TcpEndPoint(dns4DomainName, extPort)
|
|
|
|
|
|
|
|
asyncTest "AnnouncedAddresses includes extMultiAddrs when provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
extIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extPort = Port(1234)
|
|
|
|
extMultiAddrs = @[ip4TcpEndPoint(extIp, extPort)]
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extMultiAddrs = extMultiAddrs
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # Bind address + extAddress
|
|
|
|
netConfig.announcedAddresses[1] == extMultiAddrs[0]
|
|
|
|
|
|
|
|
|
|
|
|
asyncTest "AnnouncedAddresses uses dns4DomainName over extIp when both are provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
dns4DomainName = "example.com"
|
|
|
|
extIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extPort = Port(1234)
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
dns4DomainName = some(dns4DomainName),
|
|
|
|
extIp = some(extIp),
|
|
|
|
extPort = some(extPort)
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 1 # DNS address
|
|
|
|
netConfig.announcedAddresses[0] == dns4TcpEndPoint(dns4DomainName, extPort)
|
|
|
|
|
|
|
|
asyncTest "AnnouncedAddresses includes WebSocket addresses when enabled":
|
|
|
|
|
|
|
|
var
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
wssEnabled = false
|
|
|
|
|
|
|
|
var netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
wsEnabled = true,
|
|
|
|
wssEnabled = wssEnabled
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
var netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # Bind address + wsHostAddress
|
|
|
|
netConfig.announcedAddresses[1] == (ip4TcpEndPoint(conf.listenAddress,
|
|
|
|
conf.websocketPort) & wsFlag(wssEnabled))
|
|
|
|
|
|
|
|
## Now try the same for the case of wssEnabled = true
|
|
|
|
|
|
|
|
wssEnabled = true
|
|
|
|
|
|
|
|
netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
wsEnabled = true,
|
|
|
|
wssEnabled = wssEnabled
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # Bind address + wsHostAddress
|
|
|
|
netConfig.announcedAddresses[1] == (ip4TcpEndPoint(conf.listenAddress,
|
|
|
|
conf.websocketPort) & wsFlag(wssEnabled))
|
|
|
|
|
|
|
|
asyncTest "Announced WebSocket address contains external IP if provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
extIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extPort = Port(1234)
|
|
|
|
wssEnabled = false
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extIp = some(extIp),
|
|
|
|
extPort = some(extPort),
|
|
|
|
wsEnabled = true,
|
|
|
|
wssEnabled = wssEnabled
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # External address + wsHostAddress
|
|
|
|
netConfig.announcedAddresses[1] == (ip4TcpEndPoint(extIp,
|
|
|
|
conf.websocketPort) & wsFlag(wssEnabled))
|
|
|
|
|
|
|
|
asyncTest "Announced WebSocket address contains dns4DomainName if provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
dns4DomainName = "example.com"
|
|
|
|
extPort = Port(1234)
|
|
|
|
wssEnabled = false
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
dns4DomainName = some(dns4DomainName),
|
|
|
|
extPort = some(extPort),
|
|
|
|
wsEnabled = true,
|
|
|
|
wssEnabled = wssEnabled
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # Bind address + wsHostAddress
|
|
|
|
netConfig.announcedAddresses[1] == (dns4TcpEndPoint(dns4DomainName, conf.websocketPort) &
|
|
|
|
wsFlag(wssEnabled))
|
|
|
|
|
|
|
|
asyncTest "Announced WebSocket address contains dns4DomainName if provided alongside extIp":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
dns4DomainName = "example.com"
|
|
|
|
extIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extPort = Port(1234)
|
|
|
|
wssEnabled = false
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
dns4DomainName = some(dns4DomainName),
|
|
|
|
extIp = some(extIp),
|
|
|
|
extPort = some(extPort),
|
|
|
|
wsEnabled = true,
|
|
|
|
wssEnabled = wssEnabled
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # DNS address + wsHostAddress
|
|
|
|
netConfig.announcedAddresses[0] == dns4TcpEndPoint(dns4DomainName, extPort)
|
|
|
|
netConfig.announcedAddresses[1] == (dns4TcpEndPoint(dns4DomainName, conf.websocketPort) &
|
|
|
|
wsFlag(wssEnabled))
|
|
|
|
|
|
|
|
asyncTest "ENR is set with bindIp/Port if no extIp/Port are provided":
|
|
|
|
|
|
|
|
let conf = defaultTestWakuNodeConf()
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.enrIp.get() == conf.listenAddress
|
|
|
|
netConfig.enrPort.get() == conf.tcpPort
|
|
|
|
|
|
|
|
asyncTest "ENR is set with extIp/Port if provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
extIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extPort = Port(1234)
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extIp = some(extIp),
|
|
|
|
extPort = some(extPort)
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.extIp.get() == extIp
|
|
|
|
netConfig.enrPort.get() == extPort
|
|
|
|
|
|
|
|
asyncTest "ENR is set with dns4DomainName if provided":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
dns4DomainName = "example.com"
|
|
|
|
extPort = Port(1234)
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
dns4DomainName = some(dns4DomainName),
|
|
|
|
extPort = some(extPort)
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.enrMultiaddrs.contains(dns4TcpEndPoint(dns4DomainName, extPort))
|
|
|
|
|
2023-10-24 15:39:25 +00:00
|
|
|
asyncTest "wsHostAddress is not announced if a WS/WSS address is provided in extMultiAddrs":
|
2023-10-17 09:53:41 +00:00
|
|
|
|
2023-10-24 15:39:25 +00:00
|
|
|
var
|
2023-10-17 09:53:41 +00:00
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
extAddIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extAddPort = Port(1234)
|
2023-10-24 15:39:25 +00:00
|
|
|
wsEnabled = true
|
2023-10-17 09:53:41 +00:00
|
|
|
wssEnabled = false
|
|
|
|
extMultiAddrs = @[(ip4TcpEndPoint(extAddIp, extAddPort) & wsFlag(wssEnabled))]
|
|
|
|
|
2023-10-24 15:39:25 +00:00
|
|
|
var netConfigRes = NetConfig.init(
|
2023-10-17 09:53:41 +00:00
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
2023-10-24 15:39:25 +00:00
|
|
|
extMultiAddrs = extMultiAddrs,
|
|
|
|
wsEnabled = wsEnabled
|
2023-10-17 09:53:41 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
2023-10-24 15:39:25 +00:00
|
|
|
var netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # Bind address + extAddress
|
|
|
|
netConfig.announcedAddresses[1] == extMultiAddrs[0]
|
|
|
|
|
|
|
|
# Now same test for WSS external address
|
|
|
|
wssEnabled = true
|
|
|
|
extMultiAddrs = @[(ip4TcpEndPoint(extAddIp, extAddPort) & wsFlag(wssEnabled))]
|
|
|
|
|
|
|
|
netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extMultiAddrs = extMultiAddrs,
|
|
|
|
wssEnabled = wssEnabled
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
netConfig = netConfigRes.get()
|
2023-10-17 09:53:41 +00:00
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 2 # Bind address + extAddress
|
|
|
|
netConfig.announcedAddresses[1] == extMultiAddrs[0]
|
|
|
|
|
2023-10-24 15:39:25 +00:00
|
|
|
asyncTest "Only extMultiAddrs are published when enabling extMultiAddrsOnly flag":
|
|
|
|
|
|
|
|
let
|
|
|
|
conf = defaultTestWakuNodeConf()
|
|
|
|
extAddIp = ValidIpAddress.init("1.2.3.4")
|
|
|
|
extAddPort = Port(1234)
|
|
|
|
extMultiAddrs = @[ip4TcpEndPoint(extAddIp, extAddPort)]
|
|
|
|
|
|
|
|
let netConfigRes = NetConfig.init(
|
|
|
|
bindIp = conf.listenAddress,
|
|
|
|
bindPort = conf.tcpPort,
|
|
|
|
extMultiAddrs = extMultiAddrs,
|
|
|
|
extMultiAddrsOnly = true
|
|
|
|
)
|
|
|
|
|
|
|
|
assert netConfigRes.isOk(), $netConfigRes.error
|
|
|
|
|
|
|
|
let netConfig = netConfigRes.get()
|
|
|
|
|
|
|
|
check:
|
|
|
|
netConfig.announcedAddresses.len == 1 # ExtAddress
|
|
|
|
netConfig.announcedAddresses[0] == extMultiAddrs[0]
|
|
|
|
|