From: Evan Hunt Date: Wed, 15 Jul 2026 22:03:50 +0000 (-0700) Subject: Allow null nameserver for jinja2 test-zone templates X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=bc77e4b49ff752f6597907fc6f999d90168c1682;p=thirdparty%2Fbind9.git Allow null nameserver for jinja2 test-zone templates It is now possible to generate a zone file from a jinja2 template that isn't written to a nameserver directory, but to "zones/" in the top level of the system test directory, by specifying the server name "NO_NS" instead of NS1, NS2, etc. This can be used for testing command line tools such as dnssec-verify on generated zone files, without starting an unnecessary name server. --- diff --git a/bin/tests/system/_common/zones/ns.partial.db.j2 b/bin/tests/system/_common/zones/ns.partial.db.j2 index 27a2c2ecbb7..5c0198b0368 100644 --- a/bin/tests/system/_common/zones/ns.partial.db.j2 +++ b/bin/tests/system/_common/zones/ns.partial.db.j2 @@ -1,2 +1,7 @@ +{% if ns.name != "." %} @zone.name@. NS @zone.ns.name@.@zone.name@. @zone.ns.name@.@zone.name@. A @zone.ns.ip@ +{% else %} +@zone.name@. NS @zone.name@. +@zone.name@. A 127.0.0.1 +{% endif %} diff --git a/bin/tests/system/_common/zones/soa.partial.db.j2 b/bin/tests/system/_common/zones/soa.partial.db.j2 index fe3a0cb3d8a..7a084c4b0d7 100644 --- a/bin/tests/system/_common/zones/soa.partial.db.j2 +++ b/bin/tests/system/_common/zones/soa.partial.db.j2 @@ -2,7 +2,11 @@ $ORIGIN @zone.name@. {% endif %} $TTL 300 +{% if zone.ns.name == "." %} +{% raw %}@{% endraw %} IN SOA @zone.name@. . ( +{% else %} {% raw %}@{% endraw %} IN SOA @zone.ns.name@.@zone.name@. . ( +{% endif %} 1 ; serial 20 ; refresh (20 seconds) 20 ; retry (20 seconds) diff --git a/bin/tests/system/isctest/template.py b/bin/tests/system/isctest/template.py index 0198af3d3d0..e0606fb0fb4 100644 --- a/bin/tests/system/isctest/template.py +++ b/bin/tests/system/isctest/template.py @@ -93,10 +93,10 @@ class TemplateEngine: data = {**self.env_vars, **data} # directory-specific "ns" var - assert "ns" not in data, '"ns" variable is reserved for nameserver data' - match = NS_DIR_RE.search(output) - if match: - data["ns"] = Nameserver(match.group(1)) + if "ns" not in data: + match = NS_DIR_RE.search(output) + if match: + data["ns"] = Nameserver(match.group(1)) debug("rendering template `%s` to file `%s`", template, output) stream = self.j2env.get_template(template).stream(data) @@ -145,6 +145,7 @@ NS8 = Nameserver("ns8") NS9 = Nameserver("ns9") NS10 = Nameserver("ns10") NS11 = Nameserver("ns11") +NO_NS = Nameserver(".", 0, "", "") @dataclass diff --git a/bin/tests/system/isctest/zone.py b/bin/tests/system/isctest/zone.py index 7790fa87f89..9bfcf86cff9 100644 --- a/bin/tests/system/isctest/zone.py +++ b/bin/tests/system/isctest/zone.py @@ -473,6 +473,7 @@ class Zone: data = { "zone": self, + "ns": self.ns, "delegations": self.delegations, } templates.render(str(output), data, template=template)