summaryrefslogtreecommitdiffstats
path: root/bin/tests/system/run.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbin/tests/system/run.sh351
1 files changed, 174 insertions, 177 deletions
diff --git a/bin/tests/system/run.sh b/bin/tests/system/run.sh
index 2330d7c..fc29397 100755
--- a/bin/tests/system/run.sh
+++ b/bin/tests/system/run.sh
@@ -19,52 +19,53 @@ SYSTEMTESTTOP="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
. $SYSTEMTESTTOP/conf.sh
if [ "$CI_SERVER" != "yes" ] && [ "$(id -u)" -eq "0" ] && ! ${NAMED} -V | grep -q -F -- "enable-developer"; then
- echofail "Refusing to run test as root. Build with --enable-developer to override." >&2
- exit 1
+ echofail "Refusing to run test as root. Build with --enable-developer to override." >&2
+ exit 1
fi
export SYSTEMTESTTOP
date_with_args() (
- date "+%Y-%m-%dT%T%z"
+ date "+%Y-%m-%dT%T%z"
)
stopservers=true
baseport=5300
if [ ${SYSTEMTEST_NO_CLEAN:-0} -eq 1 ]; then
- clean=false
+ clean=false
else
- clean=true
+ clean=true
fi
restart=false
while getopts "knp:r-:t" flag; do
- case "$flag" in
- -) case "${OPTARG}" in
- keep) stopservers=false ;;
- noclean) clean=false ;;
- esac
- ;;
+ case "$flag" in
+ -)
+ case "${OPTARG}" in
+ keep) stopservers=false ;;
+ noclean) clean=false ;;
+ esac
+ ;;
k) stopservers=false ;;
n) clean=false ;;
p) baseport=$OPTARG ;;
t) restart=true ;;
- esac
+ esac
done
-shift `expr $OPTIND - 1`
+shift $(expr $OPTIND - 1)
if [ $# -eq 0 ]; then
- echofail "Usage: $0 [-k] [-n] [-p <PORT>] test-directory [test-options]" >&2;
- exit 1
+ echofail "Usage: $0 [-k] [-n] [-p <PORT>] test-directory [test-options]" >&2
+ exit 1
fi
systest=${1%%/}
shift
if [ ! -d $systest ]; then
- echofail "$0: $systest: no such test" >&2
- exit 1
+ echofail "$0: $systest: no such test" >&2
+ exit 1
fi
# Define the number of ports allocated for each test, and the lowest and
@@ -77,16 +78,16 @@ fi
# command line is the lowest port number in a block of "numports" consecutive
# ports and that the highest valid port number is 65,535.
numport=100
-minvalid=`expr 1024 + 1`
-maxvalid=`expr 65535 - $numport + 1`
+minvalid=$(expr 1024 + 1)
+maxvalid=$(expr 65535 - $numport + 1)
-test "$baseport" -eq "$baseport" > /dev/null 2>&1
+test "$baseport" -eq "$baseport" >/dev/null 2>&1
if [ $? -ne 0 ]; then
- echofail "$0: $systest: must specify a numeric value for the port" >&2
- exit 1
-elif [ $baseport -lt $minvalid -o $baseport -gt $maxvalid ]; then
- echofail "$0: $systest: the specified port must be in the range $minvalid to $maxvalid" >&2
- exit 1
+ echofail "$0: $systest: must specify a numeric value for the port" >&2
+ exit 1
+elif [ $baseport -lt $minvalid -o $baseport -gt $maxvalid ]; then
+ echofail "$0: $systest: the specified port must be in the range $minvalid to $maxvalid" >&2
+ exit 1
fi
# Name the first 10 ports in the set (it is assumed that each test has access
@@ -95,18 +96,18 @@ fi
# will usually be a multiple of 10, the names are chosen so that if this is
# true, the last digit of EXTRAPORTn is "n".
PORT=$baseport
-EXTRAPORT1=`expr $baseport + 1`
-EXTRAPORT2=`expr $baseport + 2`
-EXTRAPORT3=`expr $baseport + 3`
-EXTRAPORT4=`expr $baseport + 4`
-EXTRAPORT5=`expr $baseport + 5`
-EXTRAPORT6=`expr $baseport + 6`
-EXTRAPORT7=`expr $baseport + 7`
-EXTRAPORT8=`expr $baseport + 8`
-CONTROLPORT=`expr $baseport + 9`
+EXTRAPORT1=$(expr $baseport + 1)
+EXTRAPORT2=$(expr $baseport + 2)
+EXTRAPORT3=$(expr $baseport + 3)
+EXTRAPORT4=$(expr $baseport + 4)
+EXTRAPORT5=$(expr $baseport + 5)
+EXTRAPORT6=$(expr $baseport + 6)
+EXTRAPORT7=$(expr $baseport + 7)
+EXTRAPORT8=$(expr $baseport + 8)
+CONTROLPORT=$(expr $baseport + 9)
LOWPORT=$baseport
-HIGHPORT=`expr $baseport + $numport - 1`
+HIGHPORT=$(expr $baseport + $numport - 1)
export PORT
export EXTRAPORT1
@@ -127,218 +128,214 @@ export HIGHPORT
# retained for each run by calling start.pl with the --restart command-line
# option for all invocations except the first one.
start_servers() {
- echoinfo "I:$systest:starting servers"
- if $restart || [ "$run" -gt 0 ]; then
- restart_opt="--restart"
- fi
- if ! $PERL start.pl ${restart_opt} --port "$PORT" "$systest"; then
- echoinfo "I:$systest:starting servers failed"
- return 1
- fi
+ echoinfo "I:$systest:starting servers"
+ if $restart || [ "$run" -gt 0 ]; then
+ restart_opt="--restart"
+ fi
+ if ! $PERL start.pl ${restart_opt} --port "$PORT" "$systest"; then
+ echoinfo "I:$systest:starting servers failed"
+ return 1
+ fi
}
stop_servers() {
- if $stopservers; then
- echoinfo "I:$systest:stopping servers"
- if ! $PERL stop.pl "$systest"; then
- echoinfo "I:$systest:stopping servers failed"
- return 1
- fi
+ if $stopservers; then
+ echoinfo "I:$systest:stopping servers"
+ if ! $PERL stop.pl "$systest"; then
+ echoinfo "I:$systest:stopping servers failed"
+ return 1
fi
+ fi
}
echostart "S:$systest:$(date_with_args)"
-echoinfo "T:$systest:1:A"
-echoinfo "A:$systest:System test $systest"
-echoinfo "I:$systest:PORTRANGE:${LOWPORT} - ${HIGHPORT}"
-
-if [ x${PERL:+set} = x ]
-then
- echowarn "I:$systest:Perl not available. Skipping test."
- echowarn "R:$systest:SKIPPED"
- echoend "E:$systest:$(date_with_args)"
- exit 0;
+echoinfo "T:$systest:1:A"
+echoinfo "A:$systest:System test $systest"
+echoinfo "I:$systest:PORTRANGE:${LOWPORT} - ${HIGHPORT}"
+
+if [ x${PERL:+set} = x ]; then
+ echowarn "I:$systest:Perl not available. Skipping test."
+ echowarn "R:$systest:SKIPPED"
+ echoend "E:$systest:$(date_with_args)"
+ exit 0
fi
-$PERL testsock.pl -p $PORT || {
- echowarn "I:$systest:Network interface aliases not set up. Skipping test."
- echowarn "R:$systest:SKIPPED"
- echoend "E:$systest:$(date_with_args)"
- exit 0;
+$PERL testsock.pl -p $PORT || {
+ echowarn "I:$systest:Network interface aliases not set up. Skipping test."
+ echowarn "R:$systest:SKIPPED"
+ echoend "E:$systest:$(date_with_args)"
+ exit 0
}
# Check for test-specific prerequisites.
-test ! -f $systest/prereq.sh || ( cd $systest && $SHELL prereq.sh "$@" )
+test ! -f $systest/prereq.sh || (cd $systest && $SHELL prereq.sh "$@")
result=$?
if [ $result -eq 0 ]; then
- : prereqs ok
+ : prereqs ok
else
- echowarn "I:$systest:Prerequisites missing, skipping test."
- echowarn "R:$systest:SKIPPED";
- echoend "E:$systest:$(date_with_args)"
- exit 0
+ echowarn "I:$systest:Prerequisites missing, skipping test."
+ echowarn "R:$systest:SKIPPED"
+ echoend "E:$systest:$(date_with_args)"
+ exit 0
fi
# Check for PKCS#11 support
if
- test ! -f $systest/usepkcs11 || $SHELL cleanpkcs11.sh
+ test ! -f $systest/usepkcs11 || $SHELL cleanpkcs11.sh
then
- : pkcs11 ok
+ : pkcs11 ok
else
- echowarn "I:$systest:Need PKCS#11, skipping test."
- echowarn "R:$systest:PKCS11ONLY"
- echoend "E:$systest:$(date_with_args)"
- exit 0
+ echowarn "I:$systest:Need PKCS#11, skipping test."
+ echowarn "R:$systest:PKCS11ONLY"
+ echoend "E:$systest:$(date_with_args)"
+ exit 0
fi
# Clean up files left from any potential previous runs except when
# started with the --restart option.
if ! $restart; then
- if test -f "$systest/clean.sh"; then
- if ! ( cd "${systest}" && $SHELL clean.sh "$@" ); then
- echowarn "I:$systest:clean.sh script failed"
- echofail "R:$systest:FAIL"
- echoend "E:$systest:$(date_with_args)"
- exit 1
- fi
+ if test -f "$systest/clean.sh"; then
+ if ! (cd "${systest}" && $SHELL clean.sh "$@"); then
+ echowarn "I:$systest:clean.sh script failed"
+ echofail "R:$systest:FAIL"
+ echoend "E:$systest:$(date_with_args)"
+ exit 1
fi
+ fi
fi
# Set up any dynamically generated test data
-if test -f $systest/setup.sh
-then
- if ! ( cd "${systest}" && $SHELL setup.sh "$@" ); then
- echowarn "I:$systest:setup.sh script failed"
- echofail "R:$systest:FAIL"
- echoend "E:$systest:$(date_with_args)"
- exit 1
- fi
+if test -f $systest/setup.sh; then
+ if ! (cd "${systest}" && $SHELL setup.sh "$@"); then
+ echowarn "I:$systest:setup.sh script failed"
+ echofail "R:$systest:FAIL"
+ echoend "E:$systest:$(date_with_args)"
+ exit 1
+ fi
fi
status=0
run=0
# Run the tests
if [ -r "$systest/tests.sh" ]; then
- if start_servers; then
- ( cd "$systest" && $SHELL tests.sh "$@" )
- status=$?
- run=$((run+1))
- stop_servers || status=1
- else
- status=1
- fi
+ if start_servers; then
+ (cd "$systest" && $SHELL tests.sh "$@")
+ status=$?
+ run=$((run + 1))
+ stop_servers || status=1
+ else
+ status=1
+ fi
fi
if [ $status -eq 0 ]; then
- if [ -n "$PYTEST" ]; then
- for test in $(cd "${systest}" && find . -name "tests*.py"); do
- rm -f "$systest/$test.status"
- if start_servers; then
- run=$((run+1))
- test_status=0
- (cd "$systest" && "$PYTEST" --confcutdir ../ -rsxX -v "$test" "$@" || echo "$?" > "$test.status") | SYSTESTDIR="$systest" cat_d
- if [ -f "$systest/$test.status" ]; then
- if [ "$(cat "$systest/$test.status")" != "5" ]; then
- test_status=$(cat "$systest/$test.status")
- fi
- fi
- status=$((status+test_status))
- stop_servers || status=1
- else
- status=1
- fi
- if [ $status -ne 0 ]; then
- break
- fi
- done
- rm -f "$systest/$test.status"
- else
- echoinfo "I:$systest:pytest not installed, skipping python tests"
- fi
+ if [ -n "$PYTEST" ]; then
+ for test in $(cd "${systest}" && find . -name "tests*.py"); do
+ rm -f "$systest/$test.status"
+ if start_servers; then
+ run=$((run + 1))
+ test_status=0
+ (cd "$systest" && "$PYTEST" --confcutdir ../ -rsxX -v "$test" "$@" || echo "$?" >"$test.status") | SYSTESTDIR="$systest" cat_d
+ if [ -f "$systest/$test.status" ]; then
+ if [ "$(cat "$systest/$test.status")" != "5" ]; then
+ test_status=$(cat "$systest/$test.status")
+ fi
+ fi
+ status=$((status + test_status))
+ stop_servers || status=1
+ else
+ status=1
+ fi
+ if [ $status -ne 0 ]; then
+ break
+ fi
+ done
+ rm -f "$systest/$test.status"
+ else
+ echoinfo "I:$systest:pytest not installed, skipping python tests"
+ fi
fi
if [ "$run" -eq "0" ]; then
- echoinfo "I:$systest:No tests were found and run"
- status=255
+ echoinfo "I:$systest:No tests were found and run"
+ status=255
fi
-
-if $stopservers
-then
- :
+if $stopservers; then
+ :
else
- exit $status
+ exit $status
fi
get_core_dumps() {
- find "$systest/" \( -name 'core' -or -name 'core.*' -or -name '*.core' \) ! -name '*.gz' ! -name '*.txt' | sort
+ find "$systest/" \( -name 'core' -or -name 'core.*' -or -name '*.core' \) ! -name '*.gz' ! -name '*.txt' | sort
}
core_dumps=$(get_core_dumps | tr '\n' ' ')
if [ -n "$core_dumps" ]; then
- echoinfo "I:$systest:Core dump(s) found: $core_dumps"
- get_core_dumps | while read -r coredump; do
- SYSTESTDIR="$systest"
- echoinfo "D:$systest:backtrace from $coredump:"
- echoinfo "D:$systest:--------------------------------------------------------------------------------"
- binary=$(gdb --batch --core="$coredump" 2>/dev/null | sed -ne "s|Core was generated by \`\([^' ]*\)[' ].*|\1|p")
- if [ ! -f "${binary}" ]; then
- binary=$(find "${TOP}" -path "*/.libs/${binary}" -type f)
- fi
- "${TOP}/libtool" --mode=execute gdb \
- -batch \
- -ex bt \
- -core="$coredump" \
- -- \
- "$binary" 2>/dev/null | sed -n '/^Core was generated by/,$p' | cat_d
- echoinfo "D:$systest:--------------------------------------------------------------------------------"
- coredump_backtrace="${coredump}-backtrace.txt"
- echoinfo "D:$systest:full backtrace from $coredump saved in $coredump_backtrace"
- "${TOP}/libtool" --mode=execute gdb \
- -batch \
- -command="${TOP_SRCDIR}/bin/tests/system/run.gdb" \
- -core="$coredump" \
- -- \
- "$binary" > "$coredump_backtrace" 2>&1
- echoinfo "D:$systest:core dump $coredump archived as $coredump.gz"
- gzip -1 "${coredump}"
- done
- status=$((status+1))
+ echoinfo "I:$systest:Core dump(s) found: $core_dumps"
+ get_core_dumps | while read -r coredump; do
+ SYSTESTDIR="$systest"
+ echoinfo "D:$systest:backtrace from $coredump:"
+ echoinfo "D:$systest:--------------------------------------------------------------------------------"
+ binary=$(gdb --batch --core="$coredump" 2>/dev/null | sed -ne "s|Core was generated by \`\([^' ]*\)[' ].*|\1|p")
+ if [ ! -f "${binary}" ]; then
+ binary=$(find "${TOP}" -path "*/.libs/${binary}" -type f)
+ fi
+ "${TOP}/libtool" --mode=execute gdb \
+ -batch \
+ -ex bt \
+ -core="$coredump" \
+ -- \
+ "$binary" 2>/dev/null | sed -n '/^Core was generated by/,$p' | cat_d
+ echoinfo "D:$systest:--------------------------------------------------------------------------------"
+ coredump_backtrace="${coredump}-backtrace.txt"
+ echoinfo "D:$systest:full backtrace from $coredump saved in $coredump_backtrace"
+ "${TOP}/libtool" --mode=execute gdb \
+ -batch \
+ -command="${TOP_SRCDIR}/bin/tests/system/run.gdb" \
+ -core="$coredump" \
+ -- \
+ "$binary" >"$coredump_backtrace" 2>&1
+ echoinfo "D:$systest:core dump $coredump archived as $coredump.gz"
+ gzip -1 "${coredump}"
+ done
+ status=$((status + 1))
fi
assertion_failures=$(find "$systest/" -name named.run -exec grep "assertion failure" {} + | wc -l)
if [ "$assertion_failures" -ne 0 ]; then
- SYSTESTDIR="$systest"
- echoinfo "I:$systest:$assertion_failures assertion failure(s) found"
- status=$((status+1))
+ SYSTESTDIR="$systest"
+ echoinfo "I:$systest:$assertion_failures assertion failure(s) found"
+ status=$((status + 1))
fi
tsan_failures=$(find "$systest/" -name 'tsan.*' | wc -l)
if [ "$tsan_failures" -ne 0 ]; then
- echoinfo "I:$systest:$tsan_failures sanitizer report(s) found"
- find "$systest/" -name 'tsan.*' -exec grep "SUMMARY: " {} + | sort -u | cat_d
- status=$((status+1))
+ echoinfo "I:$systest:$tsan_failures sanitizer report(s) found"
+ find "$systest/" -name 'tsan.*' -exec grep "SUMMARY: " {} + | sort -u | cat_d
+ status=$((status + 1))
fi
if [ "$status" -ne 0 ]; then
- echofail "R:$systest:FAIL"
+ echofail "R:$systest:FAIL"
else
- echopass "R:$systest:PASS"
- if $clean && ! $restart; then
- ( cd $systest && $SHELL clean.sh "$@" )
- if test -d ../../../.git; then
- git status -su --ignored "${systest}/" 2>/dev/null | \
- sed -n -e 's|^?? \(.*\)|I:'${systest}':file \1 not removed|p' \
- -e 's|^!! \(.*/named.run\)$|I:'${systest}':file \1 not removed|p' \
- -e 's|^!! \(.*/named.memstats\)$|I:'${systest}':file \1 not removed|p'
- fi
+ echopass "R:$systest:PASS"
+ if $clean && ! $restart; then
+ (cd $systest && $SHELL clean.sh "$@")
+ if test -d ../../../.git; then
+ git status -su --ignored "${systest}/" 2>/dev/null \
+ | sed -n -e 's|^?? \(.*\)|I:'${systest}':file \1 not removed|p' \
+ -e 's|^!! \(.*/named.run\)$|I:'${systest}':file \1 not removed|p' \
+ -e 's|^!! \(.*/named.memstats\)$|I:'${systest}':file \1 not removed|p'
fi
+ fi
fi
NAMED_RUN_LINES_THRESHOLD=200000
find "${systest}" -type f -name "named.run" -exec wc -l {} \; | awk "\$1 > ${NAMED_RUN_LINES_THRESHOLD} { print \$2 }" | sort | while read -r LOG_FILE; do
- echowarn "I:${systest}:${LOG_FILE} contains more than ${NAMED_RUN_LINES_THRESHOLD} lines, consider tweaking the test to limit disk I/O"
+ echowarn "I:${systest}:${LOG_FILE} contains more than ${NAMED_RUN_LINES_THRESHOLD} lines, consider tweaking the test to limit disk I/O"
done
echoend "E:$systest:$(date_with_args)"