]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
test views are detached before leaving exclusive mode
authorColin Vidal <colin@isc.org>
Fri, 26 Sep 2025 12:54:42 +0000 (14:54 +0200)
committerColin Vidal <colin@isc.org>
Fri, 26 Sep 2025 12:55:01 +0000 (14:55 +0200)
Adds a log-based test ensuring that when a reconfiguration fails inside
the view configuration, the newly created view are always detached
before the exclusive mode is ended.

bin/tests/system/configloading/ns1/named.conf.j2
bin/tests/system/configloading/tests_configloading.py

index 6c85c1df5ee9bb28a753d573da65a671632c1a1e..ca1c1630a1eaf848491794ef461a55cfa227844d 100644 (file)
@@ -11,7 +11,7 @@
  * information regarding copyright ownership.
  */
 
-// NS2
+{% set wrongoption = wrongoption | default(False) %}
 
 options {
        port @PORT@;
@@ -30,9 +30,15 @@ controls {
        inet 10.53.0.1 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
 };
 
-
-zone "example." {
-       type primary;
-       file "example.db";
+view "default" {
+       zone "example." {
+               type primary;
+               file "example.db";
+       };
+       /*
+        * failure to reconfig must occurs during configuration of the views
+        */
+       {% if wrongoption %}
+               forwarders port 9999999 { 127.0.0.1; };
+       {% endif %}
 };
-
index 92a19077412c4e571249de4e7b6b7a5feab9f533..1b74e31b330322137a09b73cc9bff3f79bb9610d 100644 (file)
@@ -9,6 +9,11 @@
 # See the COPYRIGHT file distributed with this work for additional
 # information regarding copyright ownership.
 
+import re
+
+
+import isctest
+
 
 def test_configloading_log(ns1):
     """
@@ -39,3 +44,28 @@ def test_configloading_log(ns1):
     with ns1.watch_log_from_here() as watcher:
         ns1.rndc("reload")
         watcher.wait_for_sequence(log_sequence)
+
+
+def test_reload_fails_log(ns1, templates):
+    """
+    This test ensures that when a reconfig fails during view configuration (or
+    after), views/zones (which are newly created view/zones which won't be used
+    and local of apply_configuration) are detached (and freed) before the
+    exclusive mode is released
+    """
+
+    log_sequence = [
+        "apply_configuration",
+        "loop exclusive mode: starting",
+        "apply_configuration: configure_views",
+        re.compile(r".*port '9999999' out of range"),
+        "apply_configuration: detaching views",
+        "loop exclusive mode: ending",
+    ]
+
+    with ns1.watch_log_from_here() as watcher:
+        templates.render("ns1/named.conf", {"wrongoption": True})
+        try:
+            ns1.rndc("reload")
+        except isctest.rndc.RNDCException:
+            watcher.wait_for_sequence(log_sequence)