From e39a954fe7f649a6eebb69d0b32c50999e9e0904 Mon Sep 17 00:00:00 2001 From: Fabiana Cecin Date: Mon, 11 May 2026 13:40:58 -0300 Subject: [PATCH] Misc fixes * Remove auto-port default value (Port==0) from all services * Fixes from Ivan's latest review --- tests/wakunode2/test_app.nim | 14 ++++++-------- waku/discovery/waku_discv5.nim | 2 ++ waku/factory/conf_builder/discv5_conf_builder.nim | 4 +++- .../conf_builder/metrics_server_conf_builder.nim | 4 +++- .../conf_builder/rest_server_conf_builder.nim | 4 +++- waku/factory/conf_builder/waku_conf_builder.nim | 6 ++++-- .../conf_builder/web_socket_conf_builder.nim | 7 +++++-- waku/factory/waku.nim | 4 ++-- waku/factory/waku_state_info.nim | 2 +- waku/net/bound_ports.nim | 2 +- 10 files changed, 30 insertions(+), 19 deletions(-) diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 9ef1bbcac..7621ab1e7 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -99,20 +99,18 @@ suite "Wakunode2 - Waku initialization": (waitFor waku.stop()).isOkOr: raiseAssert error - test "unspecified service ports default to 0 then bind non-zero": + test "explicit port=0 triggers auto-bind across all services": var builder = defaultTestWakuConfBuilder() + builder.withP2pTcpPort(Port(0)) builder.discv5Conf.withEnabled(true) + builder.discv5Conf.withUdpPort(Port(0)) builder.restServerConf.withEnabled(true) builder.restServerConf.withRelayCacheCapacity(50'u32) + builder.restServerConf.withPort(Port(0)) builder.metricsServerConf.withEnabled(true) + builder.metricsServerConf.withHttpPort(Port(0)) builder.webSocketConf.withEnabled(true) - - # the p2pTcp option is private - check: - builder.discv5Conf.udpPort.isNone() - builder.restServerConf.port.isNone() - builder.metricsServerConf.httpPort.isNone() - builder.webSocketConf.webSocketPort.isNone() + builder.webSocketConf.withWebSocketPort(Port(0)) let conf = builder.build().valueOr: raiseAssert error diff --git a/waku/discovery/waku_discv5.nim b/waku/discovery/waku_discv5.nim index 5877a0c1e..c1b253c8c 100644 --- a/waku/discovery/waku_discv5.nim +++ b/waku/discovery/waku_discv5.nim @@ -410,6 +410,8 @@ proc setupDiscoveryV5*( p2pListenAddress: IpAddress, portsShift: uint16, ): Result[WakuDiscoveryV5, string] = + ## Public only for testing. Callers should use `setupAndStartDiscv5`, which + ## additionally handles `udpPort == 0` via auto-port retry. if conf.udpPort == Port(0): return err( "setupDiscoveryV5: udpPort must be non-zero; " & diff --git a/waku/factory/conf_builder/discv5_conf_builder.nim b/waku/factory/conf_builder/discv5_conf_builder.nim index c87901ea3..5dd269d23 100644 --- a/waku/factory/conf_builder/discv5_conf_builder.nim +++ b/waku/factory/conf_builder/discv5_conf_builder.nim @@ -4,6 +4,8 @@ import ../waku_conf logScope: topics = "waku conf builder discv5" +const DefaultDiscv5UdpPort*: Port = Port(9000) + ########################### ## Discv5 Config Builder ## ########################### @@ -57,7 +59,7 @@ proc build*(b: Discv5ConfBuilder): Result[Option[Discv5Conf], string] = bucketIpLimit: b.bucketIpLimit.get(2), enrAutoUpdate: b.enrAutoUpdate.get(true), tableIpLimit: b.tableIpLimit.get(10), - udpPort: b.udpPort.get(Port(0)), + udpPort: b.udpPort.get(DefaultDiscv5UdpPort), ) ) ) diff --git a/waku/factory/conf_builder/metrics_server_conf_builder.nim b/waku/factory/conf_builder/metrics_server_conf_builder.nim index 29ba035a2..8b2ea4eb8 100644 --- a/waku/factory/conf_builder/metrics_server_conf_builder.nim +++ b/waku/factory/conf_builder/metrics_server_conf_builder.nim @@ -4,6 +4,8 @@ import ../waku_conf logScope: topics = "waku conf builder metrics server" +const DefaultMetricsHttpPort*: Port = Port(8008) + ################################### ## Metrics Server Config Builder ## ################################### @@ -40,7 +42,7 @@ proc build*(b: MetricsServerConfBuilder): Result[Option[MetricsServerConf], stri some( MetricsServerConf( httpAddress: b.httpAddress.get(static parseIpAddress("127.0.0.1")), - httpPort: b.httpPort.get(Port(0)), + httpPort: b.httpPort.get(DefaultMetricsHttpPort), logging: b.logging.get(false), ) ) diff --git a/waku/factory/conf_builder/rest_server_conf_builder.nim b/waku/factory/conf_builder/rest_server_conf_builder.nim index 5ad5b3a39..dcafbb56a 100644 --- a/waku/factory/conf_builder/rest_server_conf_builder.nim +++ b/waku/factory/conf_builder/rest_server_conf_builder.nim @@ -4,6 +4,8 @@ import ../waku_conf logScope: topics = "waku conf builder rest server" +const DefaultRestPort*: Port = Port(8645) + ################################ ## REST Server Config Builder ## ################################ @@ -54,7 +56,7 @@ proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] = RestServerConf( allowOrigin: b.allowOrigin, listenAddress: b.listenAddress.get(), - port: b.port.get(Port(0)), + port: b.port.get(DefaultRestPort), admin: b.admin.get(false), relayCacheCapacity: b.relayCacheCapacity.get(), ) diff --git a/waku/factory/conf_builder/waku_conf_builder.nim b/waku/factory/conf_builder/waku_conf_builder.nim index 40c6e5244..5954bbe58 100644 --- a/waku/factory/conf_builder/waku_conf_builder.nim +++ b/waku/factory/conf_builder/waku_conf_builder.nim @@ -34,7 +34,9 @@ import logScope: topics = "waku conf builder" -const DefaultMaxConnections* = 150 +const + DefaultMaxConnections* = 150 + DefaultP2pTcpPort*: Port = Port(60000) type MaxMessageSizeKind* = enum mmskNone @@ -576,7 +578,7 @@ proc build*( warn "Nat Strategy is not specified, defaulting to none" "none" - let p2pTcpPort = builder.p2pTcpPort.get(Port(0)) + let p2pTcpPort = builder.p2pTcpPort.get(DefaultP2pTcpPort) let p2pListenAddress = if builder.p2pListenAddress.isSome(): diff --git a/waku/factory/conf_builder/web_socket_conf_builder.nim b/waku/factory/conf_builder/web_socket_conf_builder.nim index 26af7cd4a..61334d958 100644 --- a/waku/factory/conf_builder/web_socket_conf_builder.nim +++ b/waku/factory/conf_builder/web_socket_conf_builder.nim @@ -4,6 +4,8 @@ import waku/factory/waku_conf logScope: topics = "waku conf builder websocket" +const DefaultWebSocketPort*: Port = Port(8000) + ############################## ## WebSocket Config Builder ## ############################## @@ -45,7 +47,8 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] = return ok( some( WebSocketConf( - port: b.webSocketPort.get(Port(0)), secureConf: none(WebSocketSecureConf) + port: b.webSocketPort.get(DefaultWebSocketPort), + secureConf: none(WebSocketSecureConf), ) ) ) @@ -58,7 +61,7 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] = return ok( some( WebSocketConf( - port: b.webSocketPort.get(Port(0)), + port: b.webSocketPort.get(DefaultWebSocketPort), secureConf: some( WebSocketSecureConf(keyPath: b.keyPath.get(), certPath: b.certPath.get()) ), diff --git a/waku/factory/waku.nim b/waku/factory/waku.nim index e2efb471c..395841130 100644 --- a/waku/factory/waku.nim +++ b/waku/factory/waku.nim @@ -424,9 +424,9 @@ proc startWaku*(waku: ptr Waku): Future[Result[void, string]] {.async: (raises: ## Update waku data that is set dynamically on node start try: (await updateWaku(waku)).isOkOr: - return err("Error in updateWaku: " & $error) + return err("Error in startWaku: " & $error) except CatchableError: - return err("Caught exception in updateWaku: " & getCurrentExceptionMsg()) + return err("Caught exception in startWaku: " & getCurrentExceptionMsg()) ## Reliability if not waku[].deliveryService.isNil(): diff --git a/waku/factory/waku_state_info.nim b/waku/factory/waku_state_info.nim index 1c0dc137e..397b90d6d 100644 --- a/waku/factory/waku_state_info.nim +++ b/waku/factory/waku_state_info.nim @@ -45,7 +45,7 @@ proc getNodeInfoItem*(self: WakuStateInfo, infoItemId: NodeInfoId): string = of NodeInfoId.MyPeerId: return $PeerId(self.node.peerId()) of NodeInfoId.MyBoundPorts: - return self.node.ports.toJsonString() + return $self.node.ports else: return "unknown info item id" diff --git a/waku/net/bound_ports.nim b/waku/net/bound_ports.nim index 797698a60..f8f561940 100644 --- a/waku/net/bound_ports.nim +++ b/waku/net/bound_ports.nim @@ -16,5 +16,5 @@ proc init*(T: type BoundPorts): BoundPorts = tcp: 0'u16, webSocket: 0'u16, rest: 0'u16, discv5Udp: 0'u16, metrics: 0'u16 ) -proc toJsonString*(p: BoundPorts): string = +proc `$`*(p: BoundPorts): string = return $(%*p)