--- /dev/null
+/*
+ * 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; };
+};
--- /dev/null
+# 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