2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-30 22:15:20 +00:00

Merge branch 'mnowak/pytest_rewrite_sortlist' into 'main'

Rewrite sortlist system test to pytest

See merge request isc-projects/bind9!8684
This commit is contained in:
Michal Nowak
2024-02-22 17:39:02 +00:00
6 changed files with 64 additions and 72 deletions

View File

@@ -20,16 +20,22 @@ QUERY_TIMEOUT = 10
def udp(
message: dns.message.Message, ip: str, port: Optional[int] = None
message: dns.message.Message,
ip: str,
port: Optional[int] = None,
source: Optional[str] = None,
) -> dns.message.Message:
if port is None:
port = int(os.environ["PORT"])
return dns.query.udp(message, ip, QUERY_TIMEOUT, port=port)
return dns.query.udp(message, ip, QUERY_TIMEOUT, port=port, source=source)
def tcp(
message: dns.message.Message, ip: str, port: Optional[int] = None
message: dns.message.Message,
ip: str,
port: Optional[int] = None,
source: Optional[str] = None,
) -> dns.message.Message:
if port is None:
port = int(os.environ["PORT"])
return dns.query.tcp(message, ip, QUERY_TIMEOUT, port=port)
return dns.query.tcp(message, ip, QUERY_TIMEOUT, port=port, source=source)

View File

@@ -10,7 +10,7 @@
# information regarding copyright ownership.
[pytest]
addopts = --tb=short -rA
addopts = --tb=short -rA -vv
log_format = %(asctime)s %(levelname)s:%(name)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S
log_cli = 1

View File

@@ -11,7 +11,6 @@
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
rm -f *.dig *.good *.out
rm -f */named.memstats
rm -f */named.run
rm -f */named.conf

View File

@@ -1,52 +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
DIGOPTS="+tcp +noadd +nosea +nostat +noquest +noauth +nocomm +nocmd -p ${PORT}"
status=0
echo_i "test 2-element sortlist statement"
cat <<EOF >test1.good
a.example. 300 IN A 192.168.3.1
a.example. 300 IN A 192.168.1.1
a.example. 300 IN A 1.1.1.5
a.example. 300 IN A 1.1.1.1
a.example. 300 IN A 1.1.1.3
a.example. 300 IN A 1.1.1.2
a.example. 300 IN A 1.1.1.4
EOF
$DIG $DIGOPTS a.example. @10.53.0.1 -b 10.53.0.1 >test1.dig || status=1
# Note that this can't use digcomp.pl because here, the ordering of the
# result RRs is significant.
diff test1.dig test1.good || status=1
echo_i "test 1-element sortlist statement and undocumented BIND 8 features"
cat <<EOF >test2.good
b.example. 300 IN A 10.53.0.$n
EOF
$DIG $DIGOPTS b.example. @10.53.0.1 -b 10.53.0.2 | sed 1q \
| grep -E '10.53.0.(2|3)$' >test2.out \
&& $DIG $DIGOPTS b.example. @10.53.0.1 -b 10.53.0.3 | sed 1q \
| grep -E '10.53.0.(2|3)$' >>test2.out \
&& $DIG $DIGOPTS b.example. @10.53.0.1 -b 10.53.0.4 | sed 1q \
| grep -E '10.53.0.4$' >>test2.out \
&& $DIG $DIGOPTS b.example. @10.53.0.1 -b 10.53.0.5 | sed 1q \
| grep -E '10.53.0.5$' >>test2.out || status=1
echo_i "exit status: $status"
[ $status -eq 0 ] || exit 1

View File

@@ -1,14 +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.
def test_sortlist(run_tests_sh):
run_tests_sh()

View File

@@ -0,0 +1,53 @@
# 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 dns.message
import pytest
import isctest
def test_sortlist():
"""Test two-element sortlist statement"""
msg = dns.message.make_query("a.example.", "A")
resp = isctest.query.tcp(msg, "10.53.0.1", source="10.53.0.1")
sortlist = [
"192.168.3.1",
"192.168.1.1",
"1.1.1.5",
"1.1.1.1",
"1.1.1.3",
"1.1.1.2",
"1.1.1.4",
]
rrset = dns.rrset.from_text_list("a.example.", 300, "IN", "A", sortlist)
assert len(resp.answer) == 1
assert resp.answer[0] == rrset
assert list(resp.answer[0].items) == list(rrset.items)
@pytest.mark.parametrize(
"source_ip,possible_results",
[
("10.53.0.2", ["10.53.0.2", "10.53.0.3"]),
("10.53.0.3", ["10.53.0.2", "10.53.0.3"]),
("10.53.0.4", ["10.53.0.4"]),
("10.53.0.5", ["10.53.0.5"]),
],
)
def test_sortlist_compat(possible_results, source_ip):
"""Test one-element sortlist statement and undocumented BIND 8 features"""
msg = dns.message.make_query("b.example.", "A")
resp = isctest.query.tcp(msg, "10.53.0.1", source=source_ip)
assert (
resp.answer[0][0].to_text() in possible_results
), f"{possible_results} not found"