From: Colin Vidal Date: Tue, 16 Sep 2025 15:14:46 +0000 (+0200) Subject: test that cache is preserved on reconfing failure X-Git-Tag: v9.21.14~36^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=714693742e9361c4ad9397debae530070a4b1cd2;p=thirdparty%2Fbind9.git test that cache is preserved on reconfing failure A named bug scrap the cache on a second reload after an initial reload failure. Adds a test checking that the cache is preserved between server reconfiguration/reloads even if it fails at some point (after attempting to re-use the cache) and the server is re-loaded later. --- diff --git a/bin/tests/system/resolver/ns1/named.conf.j2 b/bin/tests/system/resolver/ns1/named.conf.j2 new file mode 100644 index 00000000000..ff3caa82167 --- /dev/null +++ b/bin/tests/system/resolver/ns1/named.conf.j2 @@ -0,0 +1,49 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ +{% set wrongoption = wrongoption | default(False) %} + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion yes; + dnssec-validation no; + attach-cache "globalcache"; + max-zone-ttl unlimited; + resolver-query-timeout 5000; # 5 seconds + max-recursion-queries 100; + request-zoneversion yes; +}; + +view "default" { + zone "." { + type hint; + file "root.hint"; + }; +{% if wrongoption %} + forwarders port 9999999 { 127.0.0.1; }; +{% endif %} +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm @DEFAULT_HMAC@; +}; + +controls { + inet 10.53.0.1 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; +}; diff --git a/bin/tests/system/resolver/tests_resolver.py b/bin/tests/system/resolver/tests_resolver.py new file mode 100644 index 00000000000..286a33e4e08 --- /dev/null +++ b/bin/tests/system/resolver/tests_resolver.py @@ -0,0 +1,39 @@ +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +import time + + +import isctest + + +def test_resolver_cache_reloadfails(ns1, templates): + ns1.rndc("flush") + msg = isctest.query.create("www.example.org.", "A") + res = isctest.query.udp(msg, "10.53.0.1") + isctest.check.noerror(res) + assert res.answer[0].ttl == 300 + templates.render("ns1/named.conf", {"wrongoption": True}) + try: + # The first reload fails, and the old cache list will be preserved + ns1.rndc("reload") + except isctest.rndc.RNDCException: + templates.render("ns1/named.conf", {"wrongoption": False}) + # The second reload succeed, and the cache is still there, as preserved + # from the old cache list + ns1.rndc("reload") + time.sleep(3) + msg = isctest.query.create("www.example.org.", "A") + res = isctest.query.udp(msg, "10.53.0.1") + isctest.check.noerror(res) + # The ttl being lower than 300 (provided by fake authoritative) proves + # the cache is still in use + assert res.answer[0].ttl < 300 diff --git a/bin/tests/system/resolver/tests_sh_resolver.py b/bin/tests/system/resolver/tests_sh_resolver.py index 10a36ce4e4f..0a90735408e 100644 --- a/bin/tests/system/resolver/tests_sh_resolver.py +++ b/bin/tests/system/resolver/tests_sh_resolver.py @@ -11,6 +11,7 @@ import pytest + pytestmark = pytest.mark.extra_artifacts( [ ".digrc",