]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Rewrite nzd2nzf system test to pytest
authorMichal Nowak <mnowak@isc.org>
Mon, 22 Jul 2024 14:01:51 +0000 (16:01 +0200)
committerMichal Nowak <mnowak@isc.org>
Thu, 13 Feb 2025 17:43:47 +0000 (18:43 +0100)
bin/tests/system/isctest/mark.py
bin/tests/system/isctest/run.py
bin/tests/system/nzd2nzf/prereq.sh [deleted file]
bin/tests/system/nzd2nzf/tests.sh [deleted file]
bin/tests/system/nzd2nzf/tests_nzd2nzf.py [new file with mode: 0644]
bin/tests/system/nzd2nzf/tests_sh_nzd2nzf.py [deleted file]

index 43c4629e435b1a92dfcd7381d6ccf7128aca154e..250f4ccd3c87b6d76f8edb388215f73845200e57 100644 (file)
@@ -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"
 )
index 9f8b22ccaefdf0cff14c5b796f73a2b9b1f101de..49176d7a8827a7d744c79514bb795ddf4831fca2 100644 (file)
@@ -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 (file)
index c3a239b..0000000
+++ /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 (file)
index e48b79d..0000000
+++ /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 (file)
index 0000000..cd22bef
--- /dev/null
@@ -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 (file)
index a42addd..0000000
+++ /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()