]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
harden configloading system test
authorColin Vidal <colin@isc.org>
Mon, 10 Nov 2025 11:07:18 +0000 (12:07 +0100)
committerColin Vidal <colin@isc.org>
Tue, 18 Nov 2025 11:16:14 +0000 (12:16 +0100)
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

index 1b74e31b330322137a09b73cc9bff3f79bb9610d..de3d25aa71e16174aecf03a8dbb0d8486616a232 100644 (file)
@@ -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)