From a708c2f93d672a331d7abf3588a05582163362fe Mon Sep 17 00:00:00 2001 From: Michal Nowak Date: Wed, 18 Jan 2023 17:41:21 +0100 Subject: [PATCH] Start named as auth and recursive server in pairwise 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 | 55 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/util/pairwise-testing.sh b/util/pairwise-testing.sh index 0aa80cfeb7..a6f90db13e 100755 --- a/util/pairwise-testing.sh +++ b/util/pairwise-testing.sh @@ -14,6 +14,38 @@ 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