]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Start named as auth and recursive server in pairwise
authorMichal Nowak <mnowak@isc.org>
Wed, 18 Jan 2023 16:41:21 +0000 (17:41 +0100)
committerMichal Nowak <mnowak@isc.org>
Mon, 13 Feb 2023 11:45:20 +0000 (12:45 +0100)
The script will start the named process configured as both an
authoritative and recursive server for each pairwise ./configure
configuration. The test is considered successful if the named process
runs until the 5-second timeout is triggered, and there is no named.lock
file present, indicating that named did not crash on shutdown.

util/pairwise-testing.sh

index 0aa80cfeb7f1da9e1ad309a4fb95d32337e03926..a6f90db13e634b25fa6682975bfd4cfa986ce1c5 100755 (executable)
 set -e
 set -o pipefail
 
+NAMED_CONF="
+options {
+       port 5300;
+       listen-on { 127.0.0.1; };
+       listen-on-v6 { ::1; };
+       lock-file \"named.lock\";
+};
+
+zone \".\" {
+       type primary;
+       file \"zone.db\";
+};
+"
+
+ZONE_CONTENTS="
+\$TTL 300
+@              SOA     localhost. localhost.localhost. 1 30 10 3600000 300
+@              NS      localhost.
+localhost      A       127.0.0.1
+               AAAA    ::1
+"
+
+if ! command -v pict >/dev/null 2>&1; then
+       echo "This script requires the 'pict' utility to be present in PATH." >&2
+       exit 1
+fi
+
+if ! command -v timeout >/dev/null 2>&1; then
+       echo "This script requires the 'timeout' utility to be present in PATH." >&2
+       exit 1
+fi
+
 grep -v -F "pairwise: skip" configure.ac | sed -n -E "s|.*# \[pairwise: (.*)\]|\1|p" | \
        while read -r SWITCH; do
        echo "${RANDOM}: ${SWITCH}"
@@ -25,9 +57,30 @@ while read -r -a configure_switches; do
        runid=${RANDOM}
        mkdir "pairwise-${runid}"
        cd "pairwise-${runid}"
-       echo "${configure_switches[@]}" | tee "../pairwise-output.${runid}.txt"
+       echo "Configuration:" "${configure_switches[@]}" | tee "../pairwise-output.${runid}.txt"
        ../configure --enable-option-checking=fatal "${configure_switches[@]}" >> "../pairwise-output.${runid}.txt" 2>&1
+       echo "Building..."
        make "-j${BUILD_PARALLEL_JOBS:-1}" all >> "../pairwise-output.${runid}.txt" 2>&1
+       echo "Running..."
+       echo "${NAMED_CONF}" > named.conf
+       echo "${ZONE_CONTENTS}" > zone.db
+       ret=0
+       timeout --kill-after=5s 5s bin/named/named -c named.conf -g >> "../pairwise-output.${runid}.txt" 2>&1 || ret=$?
+       # "124" is the exit code "timeout" returns when it terminates
+       # the command; in other words, the command-under-test times
+       # out, i.e., was still running and didn't crash.
+       if [ "${ret}" -ne 124 ]; then
+               echo "Unexpected exit code from the 'timeout' utility (${ret})"
+               exit 1
+       fi
+       # "timeout" is unable to report a crash on shutdown via its exit
+       # code.  A named instance that exits cleanly is expected to
+       # clean up its configured lock file, so if it is still around at
+       # this point, something went wrong.
+       if [ -f "named.lock" ]; then
+               echo "named did not clean up its lock file, possible crash on shutdown"
+               exit 1
+       fi
        cd ..
        rm -rf "pairwise-${runid}" "pairwise-output.${runid}.txt"
 done < pairwise-commands.txt