From ae53e8775e57ddf8debfd6fc7b8e3cb5e2c93dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=ADckolas=20Goline?= Date: Tue, 19 May 2026 10:34:05 -0300 Subject: [PATCH] tests: fix test_low_fd_limit failing on RLIM_INFINITY platforms When RLIMIT_NOFILE hard limit is RLIM_INFINITY (macOS default) or larger than UINT32_MAX, passing limits[1] and limits[1]+1 directly as --dev-fd-limit-multiplier (a u32 option) causes lightningd to reject the argument as out-of-range and exit(1), making both nodes fail to start with "Unable to find Server started with public key" timeout. Cap to TEST_CEILING=65536 when the hard limit is RLIM_INFINITY or exceeds the ceiling, keeping the existing soft==hard halving path for normal bounded limits. Also add the test to the macOS CI list, so the platform it was broken on now covers it. Changelog-None --- .github/workflows/macos.yaml | 1 + tests/test_misc.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/macos.yaml b/.github/workflows/macos.yaml index 9346bb357..cf67a1e17 100644 --- a/.github/workflows/macos.yaml +++ b/.github/workflows/macos.yaml @@ -60,6 +60,7 @@ jobs: PYTEST_OPTS: "-vvv --timeout=1800 --durations=10" PYTEST_TESTS: | tests/test_misc.py::test_ipv4_and_ipv6 + tests/test_misc.py::test_low_fd_limit tests/test_connection.py::test_websocket tests/test_connection.py::test_wss_proxy tests/test_plugin.py::test_inline_plugin_wait_for_log_no_selfmatch diff --git a/tests/test_misc.py b/tests/test_misc.py index 197140eea..48dea0a80 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -4998,8 +4998,16 @@ def test_set_feerate_offset(node_factory, bitcoind): def test_low_fd_limit(node_factory, bitcoind): limits = resource.getrlimit(resource.RLIMIT_NOFILE) - # We assume this, otherwise l2 cannot increase limits! - if limits[0] == limits[1]: + # dev-fd-limit-multiplier is a u32, so values > UINT32_MAX fail option + # parsing. macOS also reports RLIM_INFINITY as the hard limit, making + # "ask for more than the hard limit" meaningless. Cap to a bounded + # ceiling so the test works on any platform. + TEST_CEILING = 65536 + if limits[1] == resource.RLIM_INFINITY or limits[1] > TEST_CEILING: + limits = (TEST_CEILING // 2, TEST_CEILING) + resource.setrlimit(resource.RLIMIT_NOFILE, limits) + elif limits[0] == limits[1]: + # We assume this, otherwise l2 cannot increase limits! limits = (limits[1] // 2, limits[1]) resource.setrlimit(resource.RLIMIT_NOFILE, limits)