diff options
Diffstat (limited to '')
35 files changed, 948 insertions, 0 deletions
diff --git a/bin/tests/system/rrsetorder/clean.sh b/bin/tests/system/rrsetorder/clean.sh new file mode 100644 index 0000000..c64ae34 --- /dev/null +++ b/bin/tests/system/rrsetorder/clean.sh @@ -0,0 +1,23 @@ +#!/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. + +rm -f dig.out.test* +rm -f dig.out.cyclic dig.out.fixed dig.out.random dig.out.nomatch dig.out.none +rm -f dig.out.0 dig.out.1 dig.out.2 dig.out.3 +rm -f dig.out.cyclic2 +rm -f ns2/root.bk +rm -f ns?/named.run ns?/named.core +rm -f */named.memstats +rm -f ns*/named.lock +rm -f ns*/named.conf +rm -f ns*/managed-keys.bind* diff --git a/bin/tests/system/rrsetorder/ns1/named.conf.in b/bin/tests/system/rrsetorder/ns1/named.conf.in new file mode 100644 index 0000000..98301c2 --- /dev/null +++ b/bin/tests/system/rrsetorder/ns1/named.conf.in @@ -0,0 +1,40 @@ +/* + * 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. + */ + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + dnssec-validation no; + notify no; + rrset-order { + name "fixed.example" order fixed; + name "random.example" order random; + name "cyclic.example" order cyclic; + name "none.example" order none; + type NS order random; + order cyclic; + }; +}; + +zone "." { + type primary; + file "root.db"; + notify explicit; + also-notify { 10.53.0.2; }; +}; diff --git a/bin/tests/system/rrsetorder/ns1/root.db b/bin/tests/system/rrsetorder/ns1/root.db new file mode 100644 index 0000000..094eec7 --- /dev/null +++ b/bin/tests/system/rrsetorder/ns1/root.db @@ -0,0 +1,51 @@ +; 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. + +$TTL 3600 +. SOA hostmaster.isc.org. a.root-servers.nil. ( + 2000042100 + 600 + 600 + 1200 + 600 ) +. NS a.root-servers.nil. +. NS cyclic.example. +a.root-servers.nil. A 10.53.0.1 +; +fixed.example. A 1.2.3.4 +fixed.example. A 1.2.3.3 +fixed.example. A 1.2.3.1 +fixed.example. A 1.2.3.2 +; +random.example. A 1.2.3.1 +random.example. A 1.2.3.2 +random.example. A 1.2.3.3 +random.example. A 1.2.3.4 +; +cyclic.example. A 1.2.3.4 +cyclic.example. A 1.2.3.3 +cyclic.example. A 1.2.3.2 +cyclic.example. A 1.2.3.1 +; +cyclic2.example. A 1.2.3.4 +cyclic2.example. A 1.2.3.3 +cyclic2.example. A 1.2.3.2 +cyclic2.example. A 1.2.3.1 +; +nomatch.example. A 1.2.3.1 +nomatch.example. A 1.2.3.2 +nomatch.example. A 1.2.3.3 +nomatch.example. A 1.2.3.4 +; +none.example. A 1.2.3.1 +none.example. A 1.2.3.2 +none.example. A 1.2.3.3 +none.example. A 1.2.3.4 diff --git a/bin/tests/system/rrsetorder/ns2/named.conf.in b/bin/tests/system/rrsetorder/ns2/named.conf.in new file mode 100644 index 0000000..164400a --- /dev/null +++ b/bin/tests/system/rrsetorder/ns2/named.conf.in @@ -0,0 +1,39 @@ +/* + * 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. + */ + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + dnssec-validation no; + notify yes; + rrset-order { + name "fixed.example" order fixed; + name "random.example" order random; + name "cyclic.example" order cyclic; + name "none.example" order none; + type NS order random; + order cyclic; + }; +}; + +zone "." { + type secondary; + primaries { 10.53.0.1; }; + file "root.bk"; +}; diff --git a/bin/tests/system/rrsetorder/ns3/named.conf.in b/bin/tests/system/rrsetorder/ns3/named.conf.in new file mode 100644 index 0000000..a5850ca --- /dev/null +++ b/bin/tests/system/rrsetorder/ns3/named.conf.in @@ -0,0 +1,38 @@ +/* + * 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. + */ + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + dnssec-validation yes; + notify yes; + rrset-order { + name "fixed.example" order fixed; + name "random.example" order random; + name "cyclic.example" order cyclic; + name "none.example" order none; + type NS order random; + order cyclic; + }; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/rrsetorder/ns4/named.conf.in b/bin/tests/system/rrsetorder/ns4/named.conf.in new file mode 100644 index 0000000..d12f50f --- /dev/null +++ b/bin/tests/system/rrsetorder/ns4/named.conf.in @@ -0,0 +1,34 @@ +/* + * 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. + */ + +options { + query-source address 10.53.0.4; + notify-source 10.53.0.4; + transfer-source 10.53.0.4; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.4; }; + listen-on-v6 { none; }; + recursion yes; + dnssec-validation yes; + notify yes; + rrset-order { + class IN type A name "host.example.com" order random; + }; + +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/rrsetorder/ns5/named.conf.in b/bin/tests/system/rrsetorder/ns5/named.conf.in new file mode 100644 index 0000000..d1a4cfa --- /dev/null +++ b/bin/tests/system/rrsetorder/ns5/named.conf.in @@ -0,0 +1,30 @@ +/* + * 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. + */ + +options { + query-source address 10.53.0.5; + notify-source 10.53.0.5; + transfer-source 10.53.0.5; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.5; }; + listen-on-v6 { none; }; + recursion yes; + dnssec-validation yes; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/rrsetorder/reference.dig.out.fixed.good b/bin/tests/system/rrsetorder/reference.dig.out.fixed.good new file mode 100644 index 0000000..eaf9c63 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.fixed.good @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.3 +1.2.3.1 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good1 b/bin/tests/system/rrsetorder/reference.dig.out.random.good1 new file mode 100644 index 0000000..c272c75 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good1 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.2 +1.2.3.3 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good10 b/bin/tests/system/rrsetorder/reference.dig.out.random.good10 new file mode 100644 index 0000000..6a39e3f --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good10 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.3 +1.2.3.4 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good11 b/bin/tests/system/rrsetorder/reference.dig.out.random.good11 new file mode 100644 index 0000000..efbc792 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good11 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.4 +1.2.3.1 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good12 b/bin/tests/system/rrsetorder/reference.dig.out.random.good12 new file mode 100644 index 0000000..c859a2e --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good12 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.4 +1.2.3.3 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good13 b/bin/tests/system/rrsetorder/reference.dig.out.random.good13 new file mode 100644 index 0000000..49bf54b --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good13 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.1 +1.2.3.2 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good14 b/bin/tests/system/rrsetorder/reference.dig.out.random.good14 new file mode 100644 index 0000000..974aa89 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good14 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.1 +1.2.3.4 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good15 b/bin/tests/system/rrsetorder/reference.dig.out.random.good15 new file mode 100644 index 0000000..e8deb67 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good15 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.2 +1.2.3.1 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good16 b/bin/tests/system/rrsetorder/reference.dig.out.random.good16 new file mode 100644 index 0000000..f467087 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good16 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.2 +1.2.3.4 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good17 b/bin/tests/system/rrsetorder/reference.dig.out.random.good17 new file mode 100644 index 0000000..6082a25 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good17 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.4 +1.2.3.1 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good18 b/bin/tests/system/rrsetorder/reference.dig.out.random.good18 new file mode 100644 index 0000000..07eefa0 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good18 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.4 +1.2.3.2 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good19 b/bin/tests/system/rrsetorder/reference.dig.out.random.good19 new file mode 100644 index 0000000..a5530c6 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good19 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.1 +1.2.3.2 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good2 b/bin/tests/system/rrsetorder/reference.dig.out.random.good2 new file mode 100644 index 0000000..00da93a --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good2 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.2 +1.2.3.4 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good20 b/bin/tests/system/rrsetorder/reference.dig.out.random.good20 new file mode 100644 index 0000000..6dcf6da --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good20 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.1 +1.2.3.3 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good21 b/bin/tests/system/rrsetorder/reference.dig.out.random.good21 new file mode 100644 index 0000000..9dcc63f --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good21 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.2 +1.2.3.1 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good22 b/bin/tests/system/rrsetorder/reference.dig.out.random.good22 new file mode 100644 index 0000000..4c51aa6 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good22 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.2 +1.2.3.3 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good23 b/bin/tests/system/rrsetorder/reference.dig.out.random.good23 new file mode 100644 index 0000000..eaf9c63 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good23 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.3 +1.2.3.1 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good24 b/bin/tests/system/rrsetorder/reference.dig.out.random.good24 new file mode 100644 index 0000000..c25c756 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good24 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.3 +1.2.3.2 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good3 b/bin/tests/system/rrsetorder/reference.dig.out.random.good3 new file mode 100644 index 0000000..4d50059 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good3 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.3 +1.2.3.2 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good4 b/bin/tests/system/rrsetorder/reference.dig.out.random.good4 new file mode 100644 index 0000000..0b34afa --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good4 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.3 +1.2.3.4 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good5 b/bin/tests/system/rrsetorder/reference.dig.out.random.good5 new file mode 100644 index 0000000..efe0e25 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good5 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.4 +1.2.3.2 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good6 b/bin/tests/system/rrsetorder/reference.dig.out.random.good6 new file mode 100644 index 0000000..d2ca6fc --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good6 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.4 +1.2.3.3 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good7 b/bin/tests/system/rrsetorder/reference.dig.out.random.good7 new file mode 100644 index 0000000..0d8312a --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good7 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.1 +1.2.3.3 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good8 b/bin/tests/system/rrsetorder/reference.dig.out.random.good8 new file mode 100644 index 0000000..3b27693 --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good8 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.1 +1.2.3.4 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/reference.dig.out.random.good9 b/bin/tests/system/rrsetorder/reference.dig.out.random.good9 new file mode 100644 index 0000000..61192af --- /dev/null +++ b/bin/tests/system/rrsetorder/reference.dig.out.random.good9 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.3 +1.2.3.1 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/setup.sh b/bin/tests/system/rrsetorder/setup.sh new file mode 100644 index 0000000..fbb1a38 --- /dev/null +++ b/bin/tests/system/rrsetorder/setup.sh @@ -0,0 +1,21 @@ +#!/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 + +$SHELL clean.sh +copy_setports ns1/named.conf.in ns1/named.conf +copy_setports ns2/named.conf.in ns2/named.conf +copy_setports ns3/named.conf.in ns3/named.conf +copy_setports ns4/named.conf.in ns4/named.conf +copy_setports ns5/named.conf.in ns5/named.conf diff --git a/bin/tests/system/rrsetorder/tests.sh b/bin/tests/system/rrsetorder/tests.sh new file mode 100644 index 0000000..cf8bbd1 --- /dev/null +++ b/bin/tests/system/rrsetorder/tests.sh @@ -0,0 +1,558 @@ +#!/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="+nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short +nocookie" + +dig_cmd() { + # shellcheck disable=SC2086 + "$DIG" $DIGOPTS -p "${PORT}" "$@" | grep -v '^;' +} + +status=0 + +GOOD_RANDOM="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24" +GOOD_RANDOM_NO=24 + +if grep "^#define DNS_RDATASET_FIXED" "$TOP_BUILDDIR/config.h" > /dev/null 2>&1 ; then + test_fixed=true +else + echo_i "Order 'fixed' disabled at compile time" + test_fixed=false +fi + +# +# +# +if $test_fixed; then + echo_i "Checking order fixed (primary)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + dig_cmd @10.53.0.1 fixed.example > dig.out.fixed || ret=1 + diff dig.out.fixed reference.dig.out.fixed.good >/dev/null || ret=1 + done + if [ $ret != 0 ]; then echo_i "failed"; fi + status=$((status + ret)) +else + echo_i "Checking order fixed behaves as cyclic when disabled (primary)" + ret=0 + matches=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + do + j=$((i % 4)) + dig_cmd @10.53.0.1 fixed.example > dig.out.fixed || ret=1 + if [ $i -le 4 ]; then + cp dig.out.fixed dig.out.$j + else + diff dig.out.fixed dig.out.$j >/dev/null && matches=$((matches + 1)) + fi + done + diff dig.out.0 dig.out.1 >/dev/null && ret=1 + diff dig.out.0 dig.out.2 >/dev/null && ret=1 + diff dig.out.0 dig.out.3 >/dev/null && ret=1 + diff dig.out.1 dig.out.2 >/dev/null && ret=1 + diff dig.out.1 dig.out.3 >/dev/null && ret=1 + diff dig.out.2 dig.out.3 >/dev/null && ret=1 + if [ $matches -ne 16 ]; then ret=1; fi + if [ $ret != 0 ]; then echo_i "failed"; fi + status=$((status + ret)) +fi + +# +# +# +echo_i "Checking order cyclic (primary + additional)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + diff dig.out.cyclic dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +# +# +# +echo_i "Checking order cyclic (primary)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.1 cyclic2.example > dig.out.cyclic2 || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic2 dig.out.$j + else + diff dig.out.cyclic2 dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +echo_i "Checking order random (primary)" +ret=0 +for i in $GOOD_RANDOM +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do + dig_cmd @10.53.0.1 random.example > dig.out.random || ret=1 + match=0 + for j in $GOOD_RANDOM + do + eval "diff dig.out.random reference.dig.out.random.good$j >/dev/null && match$j=1 match=1 || true" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in $GOOD_RANDOM +do + eval "match=\$((match + match$i))" +done +echo_i "Random selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" +if [ $match -lt $((GOOD_RANDOM_NO / 3)) ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order none (primary)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +dig_cmd @10.53.0.1 none.example > dig.out.none || ret=1 +for i in 1 2 3 4; do + grep -F -q 1.2.3.$i dig.out.none || ret=1 +done +# Ensure 20 further queries result in the same response as the "reference" one. +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do + dig_cmd @10.53.0.1 none.example > dig.out.test$i || ret=1 + diff dig.out.none dig.out.test$i >/dev/null || ret=1 +done +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +# +# +# +if $test_fixed; then + echo_i "Checking order fixed (secondary)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + dig_cmd @10.53.0.2 fixed.example > dig.out.fixed || ret=1 + diff dig.out.fixed reference.dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo_i "failed"; fi + status=$((status + ret)) +fi + +# +# +# +echo_i "Checking order cyclic (secondary + additional)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + diff dig.out.cyclic dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +# +# +# +echo_i "Checking order cyclic (secondary)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.2 cyclic2.example > dig.out.cyclic2 || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic2 dig.out.$j + else + diff dig.out.cyclic2 dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order random (secondary)" +ret=0 +for i in $GOOD_RANDOM +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do + dig_cmd @10.53.0.2 random.example > dig.out.random || ret=1 + match=0 + for j in $GOOD_RANDOM + do + eval "diff dig.out.random reference.dig.out.random.good$j >/dev/null && match$j=1 match=1 || true" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in $GOOD_RANDOM +do + eval "match=\$((match + match$i))" +done +echo_i "Random selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" +if [ $match -lt $((GOOD_RANDOM_NO / 3)) ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order none (secondary)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +dig_cmd @10.53.0.2 none.example > dig.out.none || ret=1 +for i in 1 2 3 4; do + grep -F -q 1.2.3.$i dig.out.none || ret=1 +done +# Ensure 20 further queries result in the same response as the "reference" one. +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do + dig_cmd @10.53.0.2 none.example > dig.out.test$i || ret=1 + diff dig.out.none dig.out.test$i >/dev/null || ret=1 +done +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Shutting down secondary" + +stop_server ns2 + +echo_i "Checking for secondary's on disk copy of zone" + +if [ ! -f ns2/root.bk ] +then + echo_i "failed"; + status=$((status + 1)) +fi + +echo_i "Re-starting secondary" + +start_server --noclean --restart --port ${PORT} ns2 + +# +# +# +if $test_fixed; then + echo_i "Checking order fixed (secondary loaded from disk)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + dig_cmd @10.53.0.2 fixed.example > dig.out.fixed || ret=1 + diff dig.out.fixed reference.dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo_i "failed"; fi + status=$((status + ret)) +fi + +# +# +# +echo_i "Checking order cyclic (secondary + additional, loaded from disk)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + diff dig.out.cyclic dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +# +# +# +echo_i "Checking order cyclic (secondary loaded from disk)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.2 cyclic2.example > dig.out.cyclic2 || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic2 dig.out.$j + else + diff dig.out.cyclic2 dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order random (secondary loaded from disk)" +ret=0 +for i in $GOOD_RANDOM +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do + dig_cmd @10.53.0.2 random.example > dig.out.random || ret=1 + match=0 + for j in $GOOD_RANDOM + do + eval "diff dig.out.random reference.dig.out.random.good$j >/dev/null && match$j=1 match=1 || true" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in $GOOD_RANDOM +do + eval "match=\$((match + match$i))" +done +echo_i "Random selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" +if [ $match -lt $((GOOD_RANDOM_NO / 3)) ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order none (secondary loaded from disk)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +dig_cmd @10.53.0.2 none.example > dig.out.none || ret=1 +for i in 1 2 3 4; do + grep -F -q 1.2.3.$i dig.out.none || ret=1 +done +# Ensure 20 further queries result in the same response as the "reference" one. +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do + dig_cmd @10.53.0.2 none.example > dig.out.test$i || ret=1 + diff dig.out.none dig.out.test$i >/dev/null || ret=1 +done +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +# +# +# +if $test_fixed; then + echo_i "Checking order fixed (cache)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + dig_cmd @10.53.0.3 fixed.example > dig.out.fixed || ret=1 + diff dig.out.fixed reference.dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo_i "failed"; fi + status=$((status + ret)) +fi + +# +# +# +echo_i "Checking order cyclic (cache + additional)" +ret=0 +# prime acache +dig_cmd @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + diff dig.out.cyclic dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +# +# +# +echo_i "Checking order cyclic (cache)" +ret=0 +# prime acache +dig_cmd @10.53.0.3 cyclic2.example > dig.out.cyclic2 || ret=1 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=$((i % 4)) + dig_cmd @10.53.0.3 cyclic2.example > dig.out.cyclic2 || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic2 dig.out.$j + else + diff dig.out.cyclic2 dig.out.$j >/dev/null && matches=$((matches + 1)) + fi +done +diff dig.out.0 dig.out.1 >/dev/null && ret=1 +diff dig.out.0 dig.out.2 >/dev/null && ret=1 +diff dig.out.0 dig.out.3 >/dev/null && ret=1 +diff dig.out.1 dig.out.2 >/dev/null && ret=1 +diff dig.out.1 dig.out.3 >/dev/null && ret=1 +diff dig.out.2 dig.out.3 >/dev/null && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order random (cache)" +ret=0 +for i in $GOOD_RANDOM +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do + dig_cmd @10.53.0.3 random.example > dig.out.random || ret=1 + match=0 + for j in $GOOD_RANDOM + do + eval "diff dig.out.random reference.dig.out.random.good$j >/dev/null && match$j=1 match=1 || true" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in $GOOD_RANDOM +do + eval "match=\$((match + match$i))" +done +echo_i "Random selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" +if [ $match -lt $((GOOD_RANDOM_NO / 3)) ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking order none (cache)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +dig_cmd @10.53.0.3 none.example > dig.out.none || ret=1 +for i in 1 2 3 4; do + grep -F -q 1.2.3.$i dig.out.none || ret=1 +done +# Ensure 20 further queries result in the same response as the "reference" one. +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do + dig_cmd @10.53.0.3 none.example > dig.out.test$i || ret=1 + diff dig.out.none dig.out.test$i >/dev/null || ret=1 +done +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking default order (cache)" +ret=0 +for i in $GOOD_RANDOM +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do + dig_cmd @10.53.0.5 random.example > dig.out.random || ret=1 + match=0 + for j in $GOOD_RANDOM + do + eval "diff dig.out.random reference.dig.out.random.good$j >/dev/null && match$j=1 match=1 || true" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in $GOOD_RANDOM +do + eval "match=\$((match + match$i))" +done +echo_i "Default selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" +if [ $match -lt $((GOOD_RANDOM_NO / 3)) ]; then ret=1; fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "Checking default order no match in rrset-order (cache)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +dig_cmd @10.53.0.4 nomatch.example > dig.out.nomatch || ret=1 +for i in 1 2 3 4; do + grep -F -q 1.2.3.$i dig.out.nomatch || ret=1 +done +# Ensure 20 further queries result in the same response as the "reference" one. +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do + dig_cmd @10.53.0.4 nomatch.example > dig.out.test$i || ret=1 + diff dig.out.nomatch dig.out.test$i >/dev/null || ret=1 +done +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +echo_i "exit status: $status" +[ $status -eq 0 ] || exit 1 diff --git a/bin/tests/system/rrsetorder/tests_sh_rrsetorder.py b/bin/tests/system/rrsetorder/tests_sh_rrsetorder.py new file mode 100644 index 0000000..e413f97 --- /dev/null +++ b/bin/tests/system/rrsetorder/tests_sh_rrsetorder.py @@ -0,0 +1,14 @@ +# 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_rrsetorder(run_tests_sh): + run_tests_sh() |