diff --git a/bin/tests/system/isctest/check.py b/bin/tests/system/isctest/check.py index cfc8d92cee..0906ad92ff 100644 --- a/bin/tests/system/isctest/check.py +++ b/bin/tests/system/isctest/check.py @@ -102,6 +102,12 @@ def is_executable(cmd: str, errmsg: str) -> None: assert executable is not None, errmsg +def named_alive(named_proc, resolver_ip): + assert named_proc.poll() is None, "named isn't running" + msg = dns.message.make_query("version.bind", "TXT", "CH") + isctest.query.tcp(msg, resolver_ip, expected_rcode=dns_rcode.NOERROR) + + def notauth(message: dns.message.Message) -> None: rcode(message, dns.rcode.NOTAUTH) diff --git a/bin/tests/system/isctest/mark.py b/bin/tests/system/isctest/mark.py index 43c4629e43..250f4ccd3c 100644 --- a/bin/tests/system/isctest/mark.py +++ b/bin/tests/system/isctest/mark.py @@ -49,6 +49,10 @@ with_libxml2 = pytest.mark.skipif( not feature_test("--have-libxml2"), reason="libxml2 support disabled in the build" ) +with_lmdb = pytest.mark.skipif( + not feature_test("--with-lmdb"), reason="LMDB support disabled in the build" +) + with_json_c = pytest.mark.skipif( not feature_test("--have-json-c"), reason="json-c support disabled in the build" ) diff --git a/bin/tests/system/isctest/run.py b/bin/tests/system/isctest/run.py index 9f8b22ccae..eed356bbb5 100644 --- a/bin/tests/system/isctest/run.py +++ b/bin/tests/system/isctest/run.py @@ -16,9 +16,6 @@ import time from typing import List, Optional import isctest.log -from isctest.compat import dns_rcode - -import dns.message def cmd( @@ -135,9 +132,3 @@ def get_named_cmdline(cfg_dir, cfg_file="named.conf"): named_cmdline = [named, "-c", cfg_file, "-d", "99", "-g"] return named_cmdline - - -def assert_custom_named_is_alive(named_proc, resolver_ip): - assert named_proc.poll() is None, "named isn't running" - msg = dns.message.make_query("version.bind", "TXT", "CH") - isctest.query.tcp(msg, resolver_ip, expected_rcode=dns_rcode.NOERROR) diff --git a/bin/tests/system/nzd2nzf/prereq.sh b/bin/tests/system/nzd2nzf/prereq.sh deleted file mode 100644 index c3a239b741..0000000000 --- a/bin/tests/system/nzd2nzf/prereq.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# 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. - -. ../conf.sh - -$FEATURETEST --with-lmdb || { - echo_i "This test requires LMDB support." >&2 - exit 255 -} -exit 0 diff --git a/bin/tests/system/nzd2nzf/tests.sh b/bin/tests/system/nzd2nzf/tests.sh deleted file mode 100644 index e48b79dd78..0000000000 --- a/bin/tests/system/nzd2nzf/tests.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh - -# 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 -e - -. ../conf.sh - -dig_with_opts() { - "$DIG" -p "${PORT}" "$@" -} - -rndccmd() { - "$RNDC" -c ../_common/rndc.conf -p "${CONTROLPORT}" -s "$@" -} - -status=0 -n=0 - -n=$((n + 1)) -echo_i "querying for non-existing zone data ($n)" -ret=0 -dig_with_opts @10.53.0.1 a.added.example a >dig.out.ns1.$n || ret=1 -grep 'status: REFUSED' dig.out.ns1.$n >/dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status + ret)) - -n=$((n + 1)) -echo_i "adding a new zone into default NZD using rndc addzone ($n)" -rndccmd 10.53.0.1 addzone 'added.example { type primary; file "added.db"; };' 2>&1 | sed 's/^/I:ns1 /' | cat_i -sleep 2 - -n=$((n + 1)) -echo_i "querying for existing zone data ($n)" -ret=0 -dig_with_opts @10.53.0.1 a.added.example a >dig.out.ns1.$n || ret=1 -grep 'status: NOERROR' dig.out.ns1.$n >/dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status + ret)) - -echo_i "stopping ns1" -stop_server ns1 - -n=$((n + 1)) -echo_i "dumping _default.nzd to _default.nzf ($n)" -$NZD2NZF ns1/_default.nzd >ns1/_default.nzf || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status + ret)) - -n=$((n + 1)) -echo_i "checking that _default.nzf contains the expected content ($n)" -grep 'zone "added.example" { type primary; file "added.db"; };' ns1/_default.nzf >/dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status + ret)) - -echo_i "deleting _default.nzd database" -rm -f ns1/_default.nzd - -echo_i "starting ns1 which should migrate the .nzf to .nzd" -start_server --noclean --restart --port ${PORT} ns1 - -n=$((n + 1)) -echo_i "querying for zone data from migrated zone config ($n)" -# retry loop in case the server restart above causes transient failures -_do_query() ( - dig_with_opts @10.53.0.1 a.added.example a >dig.out.ns1.$n \ - && grep 'status: NOERROR' dig.out.ns1.$n >/dev/null -) -ret=0 -retry_quiet "10" _do_query || ret=1 -n=$((n + 1)) -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status + ret)) - -echo_i "exit status: $status" -exit $status diff --git a/bin/tests/system/nzd2nzf/tests_nzd2nzf.py b/bin/tests/system/nzd2nzf/tests_nzd2nzf.py new file mode 100644 index 0000000000..cd22bef7d9 --- /dev/null +++ b/bin/tests/system/nzd2nzf/tests_nzd2nzf.py @@ -0,0 +1,66 @@ +# 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 os +import pytest + +import isctest +import isctest.mark +import isctest.run + +import dns.message + +pytestmark = [ + isctest.mark.with_lmdb, + pytest.mark.extra_artifacts( + ["ns1/_default.nzd", "ns1/_default.nzf~"], + ), +] + + +def test_nzd2nzf(servers): + zone_data = '"added.example" { type primary; file "added.db"; };' + msg = dns.message.make_query("a.added.example.", "A") + + # query for non-existing zone data + res = isctest.query.tcp(msg, servers["ns1"].ip) + isctest.check.refused(res) + + # add new zone into the default NZD using "rndc addzone" + servers["ns1"].rndc(f"addzone {zone_data}", log=False) + + # query for existing zone data + res = isctest.query.tcp(msg, servers["ns1"].ip) + isctest.check.noerror(res) + + servers["ns1"].stop() + + # dump "_default.nzd" to "_default.nzf" and check that it contains the expected content + cfg_dir = "ns1" + stdout = isctest.run.cmd( + [os.environ["NZD2NZF"], "_default.nzd"], cwd=cfg_dir + ).stdout.decode("utf-8") + assert f"zone {zone_data}" in stdout + nzf_filename = os.path.join(cfg_dir, "_default.nzf") + with open(nzf_filename, "w", encoding="utf-8") as nzf_file: + nzf_file.write(stdout) + + # delete "_default.nzd" database + nzd_filename = os.path.join(cfg_dir, "_default.nzd") + os.remove(nzd_filename) + + # start ns1 again, it should migrate "_default.nzf" to "_default.nzd" + servers["ns1"].start(["--noclean", "--restart", "--port", os.environ["PORT"]]) + + # query for zone data from the migrated zone config + res = isctest.query.tcp(msg, servers["ns1"].ip) + isctest.check.noerror(res) diff --git a/bin/tests/system/nzd2nzf/tests_sh_nzd2nzf.py b/bin/tests/system/nzd2nzf/tests_sh_nzd2nzf.py deleted file mode 100644 index a42addd380..0000000000 --- a/bin/tests/system/nzd2nzf/tests_sh_nzd2nzf.py +++ /dev/null @@ -1,24 +0,0 @@ -# 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 pytest - -pytestmark = pytest.mark.extra_artifacts( - [ - "dig.out.*", - "ns*/*.nzd", - "ns*/*.nzf*", - ] -) - - -def test_nzd2nzf(run_tests_sh): - run_tests_sh() diff --git a/bin/tests/system/shutdown/tests_shutdown.py b/bin/tests/system/shutdown/tests_shutdown.py index 99929be93a..bbfab34cc4 100755 --- a/bin/tests/system/shutdown/tests_shutdown.py +++ b/bin/tests/system/shutdown/tests_shutdown.py @@ -177,7 +177,7 @@ def test_named_shutdown(kill_method): named_cmdline, cwd=cfg_dir, stderr=named_log ) as named_proc: try: - isctest.run.assert_custom_named_is_alive(named_proc, resolver_ip) + isctest.check.named_alive(named_proc, resolver_ip) do_work( named_proc, resolver_ip,