1
0
Fork 0
bind9/bin/tests/system/rrchecker/tests_rrchecker.py
Daniel Baumann f66ff7eae6
Adding upstream version 1:9.20.9.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 13:32:37 +02:00

183 lines
4.7 KiB
Python

# 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
pytestmark = pytest.mark.extra_artifacts(
[
"tempzone",
]
)
@pytest.mark.parametrize(
"option,expected_result",
[
("-C", ["HS", "CH", "IN"]),
(
"-T",
[
"A",
"A6",
"AAAA",
"AFSDB",
"AMTRELAY",
"APL",
"ATMA",
"AVC",
"CAA",
"CDNSKEY",
"CDS",
"CERT",
"CNAME",
"CSYNC",
"DHCID",
"DLV",
"DNAME",
"DNSKEY",
"DOA",
"DS",
"EID",
"EUI48",
"EUI64",
"GID",
"GPOS",
"HINFO",
"HIP",
"HTTPS",
"IPSECKEY",
"ISDN",
"KEY",
"KX",
"L32",
"L64",
"LOC",
"LP",
"MB",
"MD",
"MF",
"MG",
"MINFO",
"MR",
"MX",
"NAPTR",
"NID",
"NIMLOC",
"NINFO",
"NS",
"NSAP",
"NSAP-PTR",
"NSEC",
"NSEC3",
"NSEC3PARAM",
"NULL",
"NXT",
"OPENPGPKEY",
"PTR",
"PX",
"RESINFO",
"RKEY",
"RP",
"RRSIG",
"RT",
"SIG",
"SINK",
"SMIMEA",
"SOA",
"SPF",
"SRV",
"SSHFP",
"SVCB",
"TA",
"TALINK",
"TLSA",
"TXT",
"UID",
"UINFO",
"UNSPEC",
"URI",
"WALLET",
"WKS",
"X25",
"ZONEMD",
],
),
("-P", []),
],
)
def test_rrchecker_list_standard_names(option, expected_result):
stdout = isctest.run.cmd([os.environ["RRCHECKER"], option]).stdout.decode("utf-8")
values = [line for line in stdout.split("\n") if line.strip()]
assert sorted(values) == sorted(expected_result)
def run_rrchecker(option, rr_class, rr_type, rr_rest):
rrchecker_output = (
isctest.run.cmd(
[os.environ["RRCHECKER"], option],
input_text=f"{rr_class} {rr_type} {rr_rest}".encode("utf-8"),
)
.stdout.decode("utf-8")
.strip()
)
return rrchecker_output.split()
@pytest.mark.parametrize("option", ["-p", "-u"])
def test_rrchecker_conversions(option):
tempzone_file = "tempzone"
with open(tempzone_file, "w", encoding="utf-8") as file:
isctest.run.cmd(
[
os.environ["SHELL"],
os.environ["TOP_SRCDIR"] + "/bin/tests/system/genzone.sh",
"0",
],
stdout=file,
)
checkzone_output = isctest.run.cmd(
[
os.environ["CHECKZONE"],
"-D",
"-q",
".",
tempzone_file,
],
).stdout.decode("utf-8")
checkzone_output = [
line for line in checkzone_output.splitlines() if not line.startswith(";")
]
for rr in checkzone_output:
rr_parts_orig = rr.split()
assert len(rr_parts_orig) >= 4, f"invalid rr: {rr}"
rr_class_orig, rr_type_orig, rr_rest_orig = (
rr_parts_orig[2],
rr_parts_orig[3],
" ".join(rr_parts_orig[4:]),
)
rr_class, rr_type, rr_rest = rr_class_orig, rr_type_orig, rr_rest_orig
if option == "-u":
rr_class, rr_type, *rr_rest = run_rrchecker(
"-u", rr_class_orig, rr_type_orig, rr_rest_orig
)
rr_rest = " ".join(rr_rest)
rr_class, rr_type, *rr_rest = run_rrchecker("-p", rr_class, rr_type, rr_rest)
assert rr_class_orig == rr_class
assert rr_type_orig == rr_type
assert rr_rest_orig == " ".join(rr_rest)