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}"
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