]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Wait for test instance of named to exit before completing subtest.
authorMark Andrews <marka@isc.org>
Mon, 31 Aug 2020 03:54:12 +0000 (13:54 +1000)
committerMark Andrews <marka@isc.org>
Thu, 10 Sep 2020 08:47:51 +0000 (18:47 +1000)
bin/tests/system/runtime/clean.sh
bin/tests/system/runtime/tests.sh

index 4a756b3d381a5c53d82aee99b4be90413807878c..1eddbee831a2b6172908ca4c6932647d69835b49 100644 (file)
@@ -9,13 +9,15 @@
 # See the COPYRIGHT file distributed with this work for additional
 # information regarding copyright ownership.
 
-rm -f ns2/named.conf ns2/named-alt*.conf
-rm -f */named.memstats
+[ -d ns2/nope ] && chmod 755 ns2/nope
+
+rm -f *.pid
 rm -f */named*.run
+rm -f */named.memstats
+rm -f kill*.out
+rm -f ns*/managed-keys.bind*
 rm -f ns*/named.lock ns*/named*.pid ns*/other.lock
-rm -f *.pid
+rm -f ns2/named.conf ns2/named-alt*.conf
 rm -f rndc.out*
-[ -d ns2/nope ] && chmod 755 ns2/nope
 rm -rf ns2/nope
 rm -rf ns2/tmp.*
-rm -f ns*/managed-keys.bind*
index 9e63d77a91a9f893a94c388b9bc7d8a38c904c96..5a1ab6fa13ba6fd050b894d75db24202738ead8a 100644 (file)
@@ -15,6 +15,7 @@
 set -e
 
 RNDCCMD="$RNDC -c ../common/rndc.conf -p ${CONTROLPORT} -s"
+NAMED_DEFAULT_ARGS="-m record,size,mctx -d 99 -g -U 4"
 
 kill_named() {
        pidfile="${1}"
@@ -43,21 +44,26 @@ kill_named() {
        return 0
 }
 
-wait_for_named() {
-       retries=10
-       while [ "$retries" -gt 0 ]; do
-               if grep "$@" >/dev/null 2>&1; then
-                       break
-               fi
-               sleep 1
-               retries=$((retries-1))
-       done
-       if [ "$retries" -eq 0 ]; then
-               return 1
-       fi
-       return 0
+check_named_log() {
+       grep "$@" >/dev/null 2>&1
 }
 
+run_named() (
+       dir="$1"
+       shift
+       run="$1"
+       shift
+       if cd "$dir" > /dev/null 2>&1
+       then
+               "${NAMED}" "$@" ${NAMED_DEFAULT_ARGS} >> "$run" 2>&1 &
+               echo $!
+       fi
+)
+
+check_pid() (
+       return $(! $KILL -0 "${1}" >/dev/null 2>&1)
+)
+
 status=0
 n=0
 
@@ -73,18 +79,24 @@ status=$((status+ret))
 n=$((n+1))
 echo_i "verifying that named checks for conflicting named processes ($n)"
 ret=0
-(cd ns2 && $NAMED -c named-alt2.conf -D runtime-ns2-extra-2 -X named.lock -m record,size,mctx -d 99 -g -U 4 >> named$n.run 2>&1 & )
-wait_for_named "another named process" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt2.conf -D runtime-ns2-extra-2 -X named.lock)
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "another named process" ns2/named$n.run || ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
+test -n "$testpid" && $KILL -15 $testpid > kill$n.out 2>&1 && ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
 n=$((n+1))
 echo_i "verifying that 'lock-file none' disables process check ($n)"
 ret=0
-(cd ns2 && $NAMED -c named-alt3.conf -D runtime-ns2-extra-3 -m record,size,mctx -d 99 -g -U 4 >> named$n.run 2>&1 & )
-wait_for_named "running$" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt3.conf -D runtime-ns2-extra-3)
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "running$" ns2/named$n.run || ret=1
 grep "another named process" ns2/named$n.run > /dev/null && ret=1
 kill_named ns2/named-alt3.pid || ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
@@ -134,30 +146,36 @@ status=$((status+ret))
 n=$((n+1))
 echo_i "checking that named refuses to start if working directory is not writable ($n)"
 ret=0
-(cd ns2 && $NAMED -c named-alt4.conf -D runtime-ns2-extra-4 -d 99 -g > named$n.run 2>&1 &)
-wait_for_named "exiting (due to fatal error)" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt4.conf -D runtime-ns2-extra-4)
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "exiting (due to fatal error)" ns2/named$n.run || ret=1
 grep "[^-]directory './nope' is not writable" ns2/named$n.run > /dev/null 2>&1 || ret=1
 kill_named ns2/named.pid && ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
 n=$((n+1))
 echo_i "checking that named refuses to start if managed-keys-directory is not writable ($n)"
 ret=0
-(cd ns2 && $NAMED -c named-alt5.conf -D runtime-ns2-extra-5 -d 99 -g > named$n.run 2>&1 &)
-wait_for_named "exiting (due to fatal error)" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt5.conf -D runtime-ns2-extra-5)
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "exiting (due to fatal error)" ns2/named$n.run || ret=1
 grep "managed-keys-directory './nope' is not writable" ns2/named$n.run > /dev/null 2>&1 || ret=1
 kill_named named.pid && ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
 n=$((n+1))
 echo_i "checking that named refuses to start if new-zones-directory is not writable ($n)"
 ret=0
-(cd ns2 && $NAMED -c named-alt6.conf -D runtime-ns2-extra-6 -d 99 -g > named$n.run 2>&1 &)
-wait_for_named "exiting (due to fatal error)" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt6.conf -D runtime-ns2-extra-6)
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "exiting (due to fatal error)" ns2/named$n.run || ret=1
 grep "new-zones-directory './nope' is not writable" ns2/named$n.run > /dev/null 2>&1 || ret=1
 kill_named ns2/named.pid && ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
@@ -165,10 +183,12 @@ n=$((n+1))
 echo_i "checking that named logs control characters in octal notation ($n)"
 ret=0
 INSTANCE_NAME="runtime-ns2-extra-7-$(cat ctrl-chars)"
-(cd ns2 && $NAMED -c named-alt7.conf -D "${INSTANCE_NAME}" -d 99 -g > named$n.run 2>&1 &)
-wait_for_named "running$" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt7.conf -D "${INSTANCE_NAME}")
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "running$" ns2/named$n.run || ret=1
 grep 'running as.*\\177\\033' ns2/named$n.run > /dev/null || ret=1
 kill_named ns2/named.pid || ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
@@ -176,10 +196,12 @@ n=$((n+1))
 echo_i "checking that named escapes special characters in the logs ($n)"
 ret=0
 INSTANCE_NAME="runtime-ns2-extra-8-$;"
-(cd ns2 && $NAMED -c named-alt7.conf -D "${INSTANCE_NAME}" -d 99 -g > named$n.run 2>&1 &)
-wait_for_named "running$" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run -c named-alt7.conf -D "${INSTANCE_NAME}")
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "running$" ns2/named$n.run || ret=1
 grep 'running as.*\\$\\;' ns2/named$n.run > /dev/null || ret=1
 kill_named ns2/named.pid || ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
@@ -188,10 +210,12 @@ echo_i "checking that named logs an ellipsis when the command line is larger tha
 ret=0
 LONG_CMD_LINE=$(cat long-cmd-line)
 # shellcheck disable=SC2086
-(cd ns2 && $NAMED $LONG_CMD_LINE -c "named-alt7.conf" -g > named$n.run 2>&1 &)
-wait_for_named "running$" ns2/named$n.run || ret=1
+testpid=$(run_named ns2 named$n.run $LONG_CMD_LINE -c "named-alt7.conf")
+test -n "$testpid" || ret=1
+retry_quiet 10 check_named_log "running$" ns2/named$n.run || ret=1
 grep "running as.*\.\.\.$" ns2/named$n.run > /dev/null || ret=1
 kill_named ns2/named.pid || ret=1
+test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
 if [ $ret -ne 0 ]; then echo_i "failed"; fi
 status=$((status+ret))
 
@@ -201,19 +225,22 @@ if [ "$(id -u)" -eq 0 ] && [ -z "$CYGWIN" ]; then
     ret=0
     TEMP_NAMED_DIR=$(mktemp -d "$(pwd)/ns2/tmp.XXXXXXXX")
     if [ "$?" -eq 0 ]; then
-        copy_setports ns2/named-alt9.conf.in "${TEMP_NAMED_DIR}/named-alt9.conf"
-        export SOFTHSM2_CONF="${TEMP_NAMED_DIR}/softhsm2.conf"
-        sh "$TOP_SRCDIR/bin/tests/prepare-softhsm2.sh"
-        chown -R nobody: "${TEMP_NAMED_DIR}"
-        chmod 0700 "${TEMP_NAMED_DIR}"
-        ( cd "${TEMP_NAMED_DIR}" && $NAMED -u nobody -c named-alt9.conf -d 99 -g -U 4 >> named$n.run 2>&1 & ) || ret=1
-        wait_for_named "running$" "${TEMP_NAMED_DIR}/named$n.run" || ret=1
-        [ -s "${TEMP_NAMED_DIR}/named9.pid" ] || ret=1
-        grep "loading configuration: permission denied" "${TEMP_NAMED_DIR}/named$n.run" > /dev/null && ret=1
-        kill_named "${TEMP_NAMED_DIR}/named9.pid" || ret=1
+       copy_setports ns2/named-alt9.conf.in "${TEMP_NAMED_DIR}/named-alt9.conf"
+       export SOFTHSM2_CONF="${TEMP_NAMED_DIR}/softhsm2.conf"
+       sh "$TOP_SRCDIR/bin/tests/prepare-softhsm2.sh"
+       chown -R nobody: "${TEMP_NAMED_DIR}"
+       chmod 0700 "${TEMP_NAMED_DIR}"
+       testpid=$(run_named "${TEMP_NAMED_DIR}" "${TEMP_NAMED_DIR}/named$n.run" -u nobody -c named-alt9.conf)
+       test -n "$testpid" || ret=1
+       retry_quiet 10 check_named_log "running$" "${TEMP_NAMED_DIR}/named$n.run" || ret=1
+       [ -s "${TEMP_NAMED_DIR}/named9.pid" ] || ret=1
+       grep "loading configuration: permission denied" "${TEMP_NAMED_DIR}/named$n.run" > /dev/null && ret=1
+       kill_named "${TEMP_NAMED_DIR}/named9.pid" || ret=1
+       test -n "$testpid" || ret=1
+       test -n "$testpid" && retry_quiet 10 check_pid $testpid || ret=1
     else
-        echo_i "mktemp failed"
-        ret=1
+       echo_i "mktemp failed"
+       ret=1
     fi
     if [ $ret -ne 0 ]; then echo_i "failed"; fi
     status=$((status+ret))