From abdd4c89fc7f4bf8f2eb502fa00e9d19f92bbdc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Fri, 2 Oct 2020 08:41:43 +0200 Subject: [PATCH] Add tests for "order none" RRset ordering rules Make sure "order none" RRset ordering rules are tested in the "rrsetorder" system test just like all other rule types are. As the check for the case of no "rrset-order" rule matching a given RRset also tests "order none" (rather than "order random", as the test code may suggest at first glance), replace the test code for that case so that it matches other "order none" tests. --- .../checkconf/good-rrset-order-none.conf | 5 + bin/tests/system/rrsetorder/clean.sh | 2 +- bin/tests/system/rrsetorder/ns1/named.conf.in | 1 + bin/tests/system/rrsetorder/ns1/root.db | 5 + bin/tests/system/rrsetorder/ns2/named.conf.in | 1 + bin/tests/system/rrsetorder/ns3/named.conf.in | 1 + bin/tests/system/rrsetorder/tests.sh | 103 +++++++++++++----- 7 files changed, 90 insertions(+), 28 deletions(-) create mode 100644 bin/tests/system/checkconf/good-rrset-order-none.conf diff --git a/bin/tests/system/checkconf/good-rrset-order-none.conf b/bin/tests/system/checkconf/good-rrset-order-none.conf new file mode 100644 index 0000000000..afd0ab660b --- /dev/null +++ b/bin/tests/system/checkconf/good-rrset-order-none.conf @@ -0,0 +1,5 @@ +options { + rrset-order { + order none; + }; +}; diff --git a/bin/tests/system/rrsetorder/clean.sh b/bin/tests/system/rrsetorder/clean.sh index ea90d8f67f..97c025ae32 100644 --- a/bin/tests/system/rrsetorder/clean.sh +++ b/bin/tests/system/rrsetorder/clean.sh @@ -10,7 +10,7 @@ # information regarding copyright ownership. rm -f dig.out.test* -rm -f dig.out.cyclic dig.out.fixed dig.out.random dig.out.nomatch +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 diff --git a/bin/tests/system/rrsetorder/ns1/named.conf.in b/bin/tests/system/rrsetorder/ns1/named.conf.in index bccd32a4f8..d4ee9ed195 100644 --- a/bin/tests/system/rrsetorder/ns1/named.conf.in +++ b/bin/tests/system/rrsetorder/ns1/named.conf.in @@ -24,6 +24,7 @@ options { 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; }; diff --git a/bin/tests/system/rrsetorder/ns1/root.db b/bin/tests/system/rrsetorder/ns1/root.db index b5a8f8f982..2367f1025f 100644 --- a/bin/tests/system/rrsetorder/ns1/root.db +++ b/bin/tests/system/rrsetorder/ns1/root.db @@ -42,3 +42,8 @@ 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 index 7d0ecfbf0a..a3742cf79b 100644 --- a/bin/tests/system/rrsetorder/ns2/named.conf.in +++ b/bin/tests/system/rrsetorder/ns2/named.conf.in @@ -24,6 +24,7 @@ options { 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; }; diff --git a/bin/tests/system/rrsetorder/ns3/named.conf.in b/bin/tests/system/rrsetorder/ns3/named.conf.in index 7343a7e618..1f3b54ac25 100644 --- a/bin/tests/system/rrsetorder/ns3/named.conf.in +++ b/bin/tests/system/rrsetorder/ns3/named.conf.in @@ -24,6 +24,7 @@ options { 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; }; diff --git a/bin/tests/system/rrsetorder/tests.sh b/bin/tests/system/rrsetorder/tests.sh index 5adcca20a0..1c63711051 100644 --- a/bin/tests/system/rrsetorder/tests.sh +++ b/bin/tests/system/rrsetorder/tests.sh @@ -142,6 +142,21 @@ if [ $match -lt `expr ${GOOD_RANDOM_NO} / 3` ]; then ret=1; fi if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` +echo_i "Checking order none (primary)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +$DIGCMD @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 + $DIGCMD @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=`expr $status + $ret` + # # # @@ -236,6 +251,21 @@ if [ $match -lt `expr ${GOOD_RANDOM_NO} / 3` ]; then ret=1; fi if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` +echo_i "Checking order none (secondary)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +$DIGCMD @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 + $DIGCMD @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=`expr $status + $ret` + echo_i "Shutting down secondary" (cd ..; $SHELL stop.sh rrsetorder ns2 ) @@ -346,6 +376,21 @@ if [ $match -lt `expr ${GOOD_RANDOM_NO} / 3` ]; then ret=1; fi if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` +echo_i "Checking order none (secondary loaded from disk)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +$DIGCMD @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 + $DIGCMD @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=`expr $status + $ret` + # # # @@ -443,6 +488,21 @@ echo_i "Random selection return $match of ${GOOD_RANDOM_NO} possible orders in 3 if [ $match -lt `expr ${GOOD_RANDOM_NO} / 3` ]; then ret=1; fi if [ $ret != 0 ]; then echo_i "failed"; fi +echo_i "Checking order none (cache)" +ret=0 +# Fetch the "reference" response and ensure it contains the expected records. +$DIGCMD @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 + $DIGCMD @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=`expr $status + $ret` + echo_i "Checking default order (cache)" ret=0 for i in $GOOD_RANDOM @@ -468,33 +528,22 @@ done echo_i "Default selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" if [ $match -lt `expr ${GOOD_RANDOM_NO} / 3` ]; then ret=1; fi if [ $ret != 0 ]; then echo_i "failed"; fi - -echo_i "Checking default order no match in rrset-order (no shuffling)" -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 -$DIGCMD @10.53.0.4 nomatch.example > dig.out.nomatch|| ret=1 - match=0 - for j in $GOOD_RANDOM - do - eval "$DIFF dig.out.nomatch dig.out.random.good$j >/dev/null && match$j=1 match=1" - 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=\`expr \$match + \$match$i\`" -done -echo_i "Consistent selection return $match of ${GOOD_RANDOM_NO} possible orders in 36 samples" -if [ $match -ne 1 ]; then ret=1; fi -if [ $ret != 0 ]; then echo_i "failed"; fi - status=`expr $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. +$DIGCMD @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 + $DIGCMD @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=`expr $status + $ret` + echo_i "exit status: $status" [ $status -eq 0 ] || exit 1