diff --git a/tests/api/test_api_health.nim b/tests/api/test_api_health.nim index 320e0e119..f3dd340af 100644 --- a/tests/api/test_api_health.nim +++ b/tests/api/test_api_health.nim @@ -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 diff --git a/tests/api/test_api_receive.nim b/tests/api/test_api_receive.nim index 1f61fd0a3..52f8713f9 100644 --- a/tests/api/test_api_receive.nim +++ b/tests/api/test_api_receive.nim @@ -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 diff --git a/tests/api/test_api_send.nim b/tests/api/test_api_send.nim index bf9d7013e..28f0ca2ff 100644 --- a/tests/api/test_api_send.nim +++ b/tests/api/test_api_send.nim @@ -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 diff --git a/tests/api/test_api_subscription.nim b/tests/api/test_api_subscription.nim index 189054bae..e0ceb9226 100644 --- a/tests/api/test_api_subscription.nim +++ b/tests/api/test_api_subscription.nim @@ -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 diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index e904604ab..77c017d96 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -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( diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 1ad35725d..9ef1bbcac 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -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: diff --git a/tests/wakunode_rest/test_rest_debug.nim b/tests/wakunode_rest/test_rest_debug.nim index f700523bf..1171f5878 100644 --- a/tests/wakunode_rest/test_rest_debug.nim +++ b/tests/wakunode_rest/test_rest_debug.nim @@ -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() diff --git a/tools/confutils/cli_args.nim b/tools/confutils/cli_args.nim index a5358bdb4..d63b5880c 100644 --- a/tools/confutils/cli_args.nim +++ b/tools/confutils/cli_args.nim @@ -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", diff --git a/waku/factory/conf_builder/rest_server_conf_builder.nim b/waku/factory/conf_builder/rest_server_conf_builder.nim index 2efd91f02..5ad5b3a39 100644 --- a/waku/factory/conf_builder/rest_server_conf_builder.nim +++ b/waku/factory/conf_builder/rest_server_conf_builder.nim @@ -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(), ) diff --git a/waku/factory/conf_builder/web_socket_conf_builder.nim b/waku/factory/conf_builder/web_socket_conf_builder.nim index 88edc0941..26af7cd4a 100644 --- a/waku/factory/conf_builder/web_socket_conf_builder.nim +++ b/waku/factory/conf_builder/web_socket_conf_builder.nim @@ -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()) ), diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 9e97d3aa7..7cd334b53 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -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) diff --git a/waku/rest_api/endpoint/debug/types.nim b/waku/rest_api/endpoint/debug/types.nim index 2c1c1dcc8..c03af0675 100644 --- a/waku/rest_api/endpoint/debug/types.nim +++ b/waku/rest_api/endpoint/debug/types.nim @@ -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 )