mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-05-11 21:09:27 +00:00
Restore CLI wakunode2 non-zero defaults for ports
* apply auto-port/port-0 default to library users only * revert REST API additions * relax rest/ws conf builders to accept an unset port for consistency * apply fixes to tests and testing infra
This commit is contained in:
parent
c842eaa9ee
commit
0bdf6538ef
@ -94,6 +94,8 @@ suite "LM API health checking":
|
||||
raiseAssert error
|
||||
conf.mode = Core
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
conf.tcpPort = Port(0)
|
||||
conf.discv5UdpPort = Port(0)
|
||||
conf.clusterId = 3'u16
|
||||
conf.numShardsInNetwork = 1
|
||||
conf.rest = false
|
||||
@ -269,6 +271,8 @@ suite "LM API health checking":
|
||||
raiseAssert error
|
||||
edgeConf.mode = Edge
|
||||
edgeConf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
edgeConf.tcpPort = Port(0)
|
||||
edgeConf.discv5UdpPort = Port(0)
|
||||
edgeConf.clusterId = 3'u16
|
||||
edgeConf.maxMessageSize = "150 KiB"
|
||||
edgeConf.rest = false
|
||||
|
||||
@ -65,6 +65,8 @@ proc createApiNodeConf(numShards: uint16 = 1): WakuNodeConf =
|
||||
raiseAssert error
|
||||
conf.mode = cli_args.WakuMode.Core
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
conf.tcpPort = Port(0)
|
||||
conf.discv5UdpPort = Port(0)
|
||||
conf.clusterId = 3'u16
|
||||
conf.numShardsInNetwork = numShards
|
||||
conf.reliabilityEnabled = true
|
||||
|
||||
@ -122,6 +122,8 @@ proc createApiNodeConf(mode: cli_args.WakuMode = cli_args.WakuMode.Core): WakuNo
|
||||
raiseAssert error
|
||||
conf.mode = mode
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
conf.tcpPort = Port(0)
|
||||
conf.discv5UdpPort = Port(0)
|
||||
conf.clusterId = 3'u16
|
||||
conf.numShardsInNetwork = 1
|
||||
conf.reliabilityEnabled = true
|
||||
|
||||
@ -73,6 +73,8 @@ proc createApiNodeConf(
|
||||
raiseAssert error
|
||||
conf.mode = mode
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
conf.tcpPort = Port(0)
|
||||
conf.discv5UdpPort = Port(0)
|
||||
conf.clusterId = 3'u16
|
||||
conf.numShardsInNetwork = numShards
|
||||
conf.reliabilityEnabled = true
|
||||
|
||||
@ -27,7 +27,6 @@ import
|
||||
# TODO: migrate to usage of a test cluster conf
|
||||
proc defaultTestWakuConfBuilder*(): WakuConfBuilder =
|
||||
var builder = WakuConfBuilder.init()
|
||||
builder.withP2pTcpPort(Port(0))
|
||||
builder.withP2pListenAddress(parseIpAddress("0.0.0.0"))
|
||||
builder.restServerConf.withListenAddress(parseIpAddress("127.0.0.1"))
|
||||
builder.withDnsAddrsNameServers(
|
||||
|
||||
@ -99,19 +99,31 @@ suite "Wakunode2 - Waku initialization":
|
||||
(waitFor waku.stop()).isOkOr:
|
||||
raiseAssert error
|
||||
|
||||
test "MyBoundPorts should report a bound port for each enabled service":
|
||||
test "unspecified service ports default to 0 then bind non-zero":
|
||||
var builder = defaultTestWakuConfBuilder()
|
||||
builder.discv5Conf.withEnabled(true)
|
||||
builder.restServerConf.withEnabled(true)
|
||||
builder.restServerConf.withPort(Port(0))
|
||||
builder.restServerConf.withRelayCacheCapacity(50'u32)
|
||||
builder.metricsServerConf.withEnabled(true)
|
||||
builder.webSocketConf.withEnabled(true)
|
||||
builder.webSocketConf.withWebSocketPort(Port(0))
|
||||
|
||||
# the p2pTcp option is private
|
||||
check:
|
||||
builder.discv5Conf.udpPort.isNone()
|
||||
builder.restServerConf.port.isNone()
|
||||
builder.metricsServerConf.httpPort.isNone()
|
||||
builder.webSocketConf.webSocketPort.isNone()
|
||||
|
||||
let conf = builder.build().valueOr:
|
||||
raiseAssert error
|
||||
|
||||
check:
|
||||
conf.endpointConf.p2pTcpPort == Port(0)
|
||||
conf.discv5Conf.get().udpPort == Port(0)
|
||||
conf.restServerConf.get().port == Port(0)
|
||||
conf.metricsServerConf.get().httpPort == Port(0)
|
||||
conf.webSocketConf.get().port == Port(0)
|
||||
|
||||
var waku = (waitFor Waku.new(conf)).valueOr:
|
||||
raiseAssert error
|
||||
defer:
|
||||
|
||||
@ -63,37 +63,6 @@ suite "Waku v2 REST API - Debug":
|
||||
await restServer.closeWait()
|
||||
await node.stop()
|
||||
|
||||
asyncTest "GET /info exposes node.ports":
|
||||
let node = testWakuNode()
|
||||
node.ports = BoundPorts(
|
||||
tcp: some(1001'u16),
|
||||
webSocket: some(1002'u16),
|
||||
rest: some(1003'u16),
|
||||
discv5Udp: some(1004'u16),
|
||||
metrics: some(1005'u16),
|
||||
)
|
||||
|
||||
let restAddress = parseIpAddress("0.0.0.0")
|
||||
let restServer = WakuRestServerRef.init(restAddress, Port(0)).tryGet()
|
||||
defer:
|
||||
await restServer.stop()
|
||||
await restServer.closeWait()
|
||||
|
||||
installDebugApiHandlers(restServer.router, node)
|
||||
restServer.start()
|
||||
|
||||
let client =
|
||||
newRestHttpClient(initTAddress(restAddress, restServer.httpServer.address.port))
|
||||
let response = await client.debugInfoV1()
|
||||
|
||||
check:
|
||||
response.status == 200
|
||||
response.data.ports.tcp == some(1001'u16)
|
||||
response.data.ports.webSocket == some(1002'u16)
|
||||
response.data.ports.rest == some(1003'u16)
|
||||
response.data.ports.discv5Udp == some(1004'u16)
|
||||
response.data.ports.metrics == some(1005'u16)
|
||||
|
||||
asyncTest "Get node version - GET /version":
|
||||
# Given
|
||||
let node = testWakuNode()
|
||||
|
||||
@ -192,9 +192,8 @@ type WakuNodeConf* = object
|
||||
name: "listen-address"
|
||||
.}: IpAddress
|
||||
|
||||
tcpPort* {.
|
||||
desc: "TCP listening port. 0 = auto-assign.", defaultValue: 0, name: "tcp-port"
|
||||
.}: uint16
|
||||
tcpPort* {.desc: "TCP listening port.", defaultValue: 60000, name: "tcp-port".}:
|
||||
Port
|
||||
|
||||
portsShift* {.
|
||||
desc: "Add a shift to all port numbers.", defaultValue: 0, name: "ports-shift"
|
||||
@ -490,8 +489,8 @@ with the drawback of consuming some more bandwidth.""",
|
||||
.}: IpAddress
|
||||
|
||||
restPort* {.
|
||||
desc: "Listening port of the REST HTTP server. 0 = auto-assign.",
|
||||
defaultValue: 0,
|
||||
desc: "Listening port of the REST HTTP server.",
|
||||
defaultValue: 8645,
|
||||
name: "rest-port"
|
||||
.}: uint16
|
||||
|
||||
@ -531,8 +530,8 @@ with the drawback of consuming some more bandwidth.""",
|
||||
.}: IpAddress
|
||||
|
||||
metricsServerPort* {.
|
||||
desc: "Listening HTTP port of the metrics server. 0 = auto-assign.",
|
||||
defaultValue: 0,
|
||||
desc: "Listening HTTP port of the metrics server.",
|
||||
defaultValue: 8008,
|
||||
name: "metrics-server-port"
|
||||
.}: uint16
|
||||
|
||||
@ -565,10 +564,10 @@ with the drawback of consuming some more bandwidth.""",
|
||||
.}: Option[bool]
|
||||
|
||||
discv5UdpPort* {.
|
||||
desc: "Listening UDP port for Node Discovery v5. 0 = auto-assign.",
|
||||
defaultValue: 0,
|
||||
desc: "Listening UDP port for Node Discovery v5.",
|
||||
defaultValue: 9000,
|
||||
name: "discv5-udp-port"
|
||||
.}: uint16
|
||||
.}: Port
|
||||
|
||||
discv5BootstrapNodes* {.
|
||||
desc:
|
||||
@ -665,10 +664,8 @@ with the drawback of consuming some more bandwidth.""",
|
||||
.}: bool
|
||||
|
||||
websocketPort* {.
|
||||
desc: "WebSocket listening port. 0 = auto-assign.",
|
||||
defaultValue: 0,
|
||||
name: "websocket-port"
|
||||
.}: uint16
|
||||
desc: "WebSocket listening port.", defaultValue: 8000, name: "websocket-port"
|
||||
.}: Port
|
||||
|
||||
websocketSecureSupport* {.
|
||||
desc: "Enable secure websocket: true|false",
|
||||
|
||||
@ -46,8 +46,6 @@ proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] =
|
||||
|
||||
if b.listenAddress.isNone():
|
||||
return err("restServer.listenAddress is not specified")
|
||||
if b.port.isNone():
|
||||
return err("restServer.port is not specified")
|
||||
if b.relayCacheCapacity.isNone():
|
||||
return err("restServer.relayCacheCapacity is not specified")
|
||||
|
||||
@ -56,7 +54,7 @@ proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] =
|
||||
RestServerConf(
|
||||
allowOrigin: b.allowOrigin,
|
||||
listenAddress: b.listenAddress.get(),
|
||||
port: b.port.get(),
|
||||
port: b.port.get(Port(0)),
|
||||
admin: b.admin.get(false),
|
||||
relayCacheCapacity: b.relayCacheCapacity.get(),
|
||||
)
|
||||
|
||||
@ -41,14 +41,11 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] =
|
||||
if not b.enabled.get(false):
|
||||
return ok(none(WebSocketConf))
|
||||
|
||||
if b.webSocketPort.isNone():
|
||||
return err("websocket.port is not specified")
|
||||
|
||||
if not b.secureEnabled.get(false):
|
||||
return ok(
|
||||
some(
|
||||
WebSocketConf(
|
||||
port: b.websocketPort.get(), secureConf: none(WebSocketSecureConf)
|
||||
port: b.webSocketPort.get(Port(0)), secureConf: none(WebSocketSecureConf)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -61,7 +58,7 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] =
|
||||
return ok(
|
||||
some(
|
||||
WebSocketConf(
|
||||
port: b.webSocketPort.get(),
|
||||
port: b.webSocketPort.get(Port(0)),
|
||||
secureConf: some(
|
||||
WebSocketSecureConf(keyPath: b.keyPath.get(), certPath: b.certPath.get())
|
||||
),
|
||||
|
||||
@ -101,7 +101,6 @@ type
|
||||
listenAddresses*: seq[string]
|
||||
enrUri*: string #multiaddrStrings*: seq[string]
|
||||
mixPubKey*: Option[string]
|
||||
ports*: BoundPorts
|
||||
|
||||
# NOTE based on Eth2Node in NBC eth2_network.nim
|
||||
WakuNode* = ref object
|
||||
@ -251,7 +250,7 @@ proc info*(node: WakuNode): WakuInfo =
|
||||
var fulladdr = $address & "/p2p/" & $peerInfo.peerId
|
||||
listenStr &= fulladdr
|
||||
let enrUri = node.enr.toUri()
|
||||
var wakuInfo = WakuInfo(listenAddresses: listenStr, enrUri: enrUri, ports: node.ports)
|
||||
var wakuInfo = WakuInfo(listenAddresses: listenStr, enrUri: enrUri)
|
||||
if not node.wakuMix.isNil():
|
||||
let keyStr = node.wakuMix.pubKey.to0xHex()
|
||||
wakuInfo.mixPubKey = some(keyStr)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{.push raises: [].}
|
||||
|
||||
import chronicles, json_serialization, json_serialization/std/options
|
||||
import waku/[waku_node, net/bound_ports, rest_api/endpoint/serdes]
|
||||
import ../../../waku_node, ../serdes
|
||||
import std/typetraits
|
||||
|
||||
#### Types
|
||||
@ -10,7 +10,6 @@ type DebugWakuInfo* = object
|
||||
listenAddresses*: seq[string]
|
||||
enrUri*: Option[string]
|
||||
mixPubKey*: Option[string]
|
||||
ports*: BoundPorts
|
||||
|
||||
#### Type conversion
|
||||
|
||||
@ -19,45 +18,10 @@ proc toDebugWakuInfo*(nodeInfo: WakuInfo): DebugWakuInfo =
|
||||
listenAddresses: nodeInfo.listenAddresses,
|
||||
enrUri: some(nodeInfo.enrUri),
|
||||
mixPubKey: nodeInfo.mixPubKey,
|
||||
ports: nodeInfo.ports,
|
||||
)
|
||||
|
||||
#### Serialization and deserialization
|
||||
|
||||
proc writeValue*(
|
||||
writer: var JsonWriter[RestJson], value: BoundPorts
|
||||
) {.raises: [IOError].} =
|
||||
writer.beginRecord()
|
||||
if value.tcp.isSome():
|
||||
writer.writeField("tcp", value.tcp.get())
|
||||
if value.webSocket.isSome():
|
||||
writer.writeField("webSocket", value.webSocket.get())
|
||||
if value.rest.isSome():
|
||||
writer.writeField("rest", value.rest.get())
|
||||
if value.discv5Udp.isSome():
|
||||
writer.writeField("discv5Udp", value.discv5Udp.get())
|
||||
if value.metrics.isSome():
|
||||
writer.writeField("metrics", value.metrics.get())
|
||||
writer.endRecord()
|
||||
|
||||
proc readValue*(
|
||||
reader: var JsonReader[RestJson], value: var BoundPorts
|
||||
) {.raises: [SerializationError, IOError].} =
|
||||
for fieldName in readObjectFields(reader):
|
||||
case fieldName
|
||||
of "tcp":
|
||||
value.tcp = some(reader.readValue(uint16))
|
||||
of "webSocket":
|
||||
value.webSocket = some(reader.readValue(uint16))
|
||||
of "rest":
|
||||
value.rest = some(reader.readValue(uint16))
|
||||
of "discv5Udp":
|
||||
value.discv5Udp = some(reader.readValue(uint16))
|
||||
of "metrics":
|
||||
value.metrics = some(reader.readValue(uint16))
|
||||
else:
|
||||
unrecognizedFieldWarning(value)
|
||||
|
||||
proc writeValue*(
|
||||
writer: var JsonWriter[RestJson], value: DebugWakuInfo
|
||||
) {.raises: [IOError].} =
|
||||
@ -67,7 +31,6 @@ proc writeValue*(
|
||||
writer.writeField("enrUri", value.enrUri.get())
|
||||
if value.mixPubKey.isSome():
|
||||
writer.writeField("mixPubKey", value.mixPubKey.get())
|
||||
writer.writeField("ports", value.ports)
|
||||
writer.endRecord()
|
||||
|
||||
proc readValue*(
|
||||
@ -76,7 +39,6 @@ proc readValue*(
|
||||
var
|
||||
listenAddresses: Option[seq[string]]
|
||||
enrUri: Option[string]
|
||||
ports = BoundPorts.init()
|
||||
|
||||
for fieldName in readObjectFields(reader):
|
||||
case fieldName
|
||||
@ -96,8 +58,6 @@ proc readValue*(
|
||||
"Multiple `mixPubKey` fields found", "DebugWakuInfo"
|
||||
)
|
||||
value.mixPubKey = some(reader.readValue(string))
|
||||
of "ports":
|
||||
reader.readValue(ports)
|
||||
else:
|
||||
unrecognizedFieldWarning(value)
|
||||
|
||||
@ -105,8 +65,5 @@ proc readValue*(
|
||||
reader.raiseUnexpectedValue("Field `listenAddresses` is missing")
|
||||
|
||||
value = DebugWakuInfo(
|
||||
listenAddresses: listenAddresses.get,
|
||||
enrUri: enrUri,
|
||||
mixPubKey: value.mixPubKey,
|
||||
ports: ports,
|
||||
listenAddresses: listenAddresses.get, enrUri: enrUri, mixPubKey: value.mixPubKey
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user