mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 06:25:31 +00:00
Rewrite nzd2nzf system test to pytest
This commit is contained in:
@@ -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"
|
||||
)
|
||||
|
@@ -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(
|
||||
|
@@ -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
|
@@ -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
|
66
bin/tests/system/nzd2nzf/tests_nzd2nzf.py
Normal file
66
bin/tests/system/nzd2nzf/tests_nzd2nzf.py
Normal file
@@ -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)
|
@@ -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()
|
Reference in New Issue
Block a user