From 47dd27d87bc217ca1a62cedfa8b245e6db7c0000 Mon Sep 17 00:00:00 2001 From: Colin Vidal Date: Fri, 26 Sep 2025 14:54:42 +0200 Subject: [PATCH] test views are detached before leaving exclusive mode 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. --- .../system/configloading/ns1/named.conf.j2 | 18 +++++++---- .../configloading/tests_configloading.py | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/bin/tests/system/configloading/ns1/named.conf.j2 b/bin/tests/system/configloading/ns1/named.conf.j2 index 6c85c1df5e..ca1c1630a1 100644 --- a/bin/tests/system/configloading/ns1/named.conf.j2 +++ b/bin/tests/system/configloading/ns1/named.conf.j2 @@ -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 %} }; - diff --git a/bin/tests/system/configloading/tests_configloading.py b/bin/tests/system/configloading/tests_configloading.py index 92a1907741..1b74e31b33 100644 --- a/bin/tests/system/configloading/tests_configloading.py +++ b/bin/tests/system/configloading/tests_configloading.py @@ -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)