From: Michal Nowak Date: Mon, 22 Jul 2024 14:01:51 +0000 (+0200) Subject: Rewrite nzd2nzf system test to pytest X-Git-Tag: ondrej/lock-free-qpzone-reads-v1~62^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c499d168988c4a38d71987b1390a67ba62d633f;p=thirdparty%2Fbind9.git Rewrite nzd2nzf system test to pytest --- diff --git a/bin/tests/system/isctest/mark.py b/bin/tests/system/isctest/mark.py index 43c4629e435..250f4ccd3c8 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 9f8b22ccaef..49176d7a882 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( diff --git a/bin/tests/system/nzd2nzf/prereq.sh b/bin/tests/system/nzd2nzf/prereq.sh deleted file mode 100644 index c3a239b7411..00000000000 --- 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 e48b79dd781..00000000000 --- 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 00000000000..cd22bef7d93 --- /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 a42addd3800..00000000000 --- 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()