From 7427f45a84b4c750ca7347a34fb39f2a880df3ea Mon Sep 17 00:00:00 2001 From: Colin Vidal Date: Mon, 10 Nov 2025 12:07:18 +0100 Subject: [PATCH] harden configloading system test The configloading system script attempts multiple `rndc {reconfig,reload}` commands without ensuring the system left exclusive mode; which normally raise an RNDC error as the server is currently reloading already. This used to work because the request was enqueued while the server was in exclusive mode, and was processed after the server `reload_status` was reset to `NAMED_RELOAD_DONE`. Due to the fact the exclusive mode is not retaken after `apply_configuration()` by `load_zones()`, the scheduling of pending tasks is changed and, regularly, the RNDC command sent by the test is processed before `NAMED_RELOAD_DONE` is set. This is the same kind of issue the views system tests had, solved by `4b2dcb3128fbd5af4609a5a73aeeee1f93bde237` Fix the problem by waiting for a log line matching the end of the reloading phase. --- bin/tests/system/configloading/tests_configloading.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/tests/system/configloading/tests_configloading.py b/bin/tests/system/configloading/tests_configloading.py index 1b74e31b33..de3d25aa71 100644 --- a/bin/tests/system/configloading/tests_configloading.py +++ b/bin/tests/system/configloading/tests_configloading.py @@ -32,17 +32,18 @@ def test_configloading_log(ns1): "apply_configuration: configure_kasplist", "apply_configuration: create_views", "loop exclusive mode: starting", + "running", ] with ns1.watch_log_from_start() as watcher: watcher.wait_for_sequence(log_sequence) with ns1.watch_log_from_here() as watcher: - ns1.rndc("reconfig") + ns1.rndc("reconfig", log=False) watcher.wait_for_sequence(log_sequence) with ns1.watch_log_from_here() as watcher: - ns1.rndc("reload") + ns1.rndc("reload", log=False) watcher.wait_for_sequence(log_sequence) @@ -61,11 +62,13 @@ def test_reload_fails_log(ns1, templates): re.compile(r".*port '9999999' out of range"), "apply_configuration: detaching views", "loop exclusive mode: ending", + "reloading configuration failed", ] with ns1.watch_log_from_here() as watcher: templates.render("ns1/named.conf", {"wrongoption": True}) try: - ns1.rndc("reload") + ns1.rndc("reload", log=False) + assert False except isctest.rndc.RNDCException: watcher.wait_for_sequence(log_sequence)