From dda5b7b0b86ca3250bcc3e6a4e3f931fdd253561 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Mon, 31 Aug 2020 13:54:12 +1000 Subject: [PATCH] Wait for test instance of named to exit before completing subtest. --- bin/tests/system/runtime/clean.sh | 16 +++-- bin/tests/system/runtime/tests.sh | 109 +++++++++++++++++++----------- 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/bin/tests/system/runtime/clean.sh b/bin/tests/system/runtime/clean.sh index 4a756b3d38..1eddbee831 100644 --- a/bin/tests/system/runtime/clean.sh +++ b/bin/tests/system/runtime/clean.sh @@ -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 -rm -f */named*.run -rm -f ns*/named.lock ns*/named*.pid ns*/other.lock -rm -f *.pid -rm -f rndc.out* [ -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 ns2/named.conf ns2/named-alt*.conf +rm -f rndc.out* rm -rf ns2/nope rm -rf ns2/tmp.* -rm -f ns*/managed-keys.bind* diff --git a/bin/tests/system/runtime/tests.sh b/bin/tests/system/runtime/tests.sh index 9e63d77a91..5a1ab6fa13 100644 --- a/bin/tests/system/runtime/tests.sh +++ b/bin/tests/system/runtime/tests.sh @@ -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))