From: Ondřej Surý Date: Wed, 27 May 2020 10:23:54 +0000 (+0200) Subject: Cleanup the shell scripts used to run tests on Windows X-Git-Tag: v9.17.2~55^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d179d12686b87a942459d269df383532a2db8143;p=thirdparty%2Fbind9.git Cleanup the shell scripts used to run tests on Windows --- diff --git a/bin/tests/system/conf.sh.common b/bin/tests/system/conf.sh.common index 5970f8e8daa..a571b2d275d 100644 --- a/bin/tests/system/conf.sh.common +++ b/bin/tests/system/conf.sh.common @@ -51,27 +51,99 @@ SEQUENTIAL_COMMON="" # rpzrecurse are scheduled first, in order to get more benefit from # parallelism. # -PARALLEL_COMMON="dnssec rpzrecurse serve-stale \ - acl additional addzone allow-query auth autosign \ - builtin cacheclean case catz cds chain \ - checkconf checknames checkzone \ - cookie database digdelv dlz dlzexternal \ - dns64 dscp dsdigest dyndb \ - ecdsa eddsa ednscompliance emptyzones \ - fetchlimit filter-aaaa formerr forward \ - geoip2 glue idna include-multiplecfg \ - inline integrity ixfr \ - kasp keepalive legacy limits \ - masterfile masterformat metadata mirror mkeys \ - names notify nslookup nsupdate nzd2nzf \ - padding pending pipelined qmin \ - reclimit redirect resolver rndc rootkeysentinel rpz \ - rrchecker rrl rrsetorder rsabigexponent runtime \ - sfcache smartsign sortlist \ - spf staticstub statistics statschannel stub synthfromdnssec \ - tcp tkey tools tsig tsiggss ttl \ - unknown upforwd verify views wildcard \ - xfer xferquota zero zonechecks" +PARALLEL_COMMON="dnssec rpzrecurse serve-stale +acl +additional +addzone +allow-query +auth +autosign +builtin +cacheclean +case +catz +cds +chain +checkconf +checknames +checkzone +cookie +database +digdelv +dlz +dlzexternal +dns64 +dscp +dsdigest +dyndb +ecdsa +eddsa +ednscompliance +emptyzones +fetchlimit +filter-aaaa +formerr +forward +geoip2 +glue +idna +include-multiplecfg +inline +integrity +ixfr +kasp +keepalive +legacy +limits +masterfile +masterformat +metadata +mirror +mkeys +names +notify +nslookup +nsupdate +nzd2nzf +padding +pending +pipelined +qmin +reclimit +redirect +resolver +rndc +rootkeysentinel +rpz +rrchecker +rrl +rrsetorder +rsabigexponent +runtime +sfcache +smartsign +sortlist +spf +staticstub +statistics +statschannel +stub +synthfromdnssec +tcp +tkey +tools +tsig +tsiggss +ttl +unknown +upforwd +verify +views +wildcard +xfer +xferquota +zero +zonechecks" # # Set up color-coded test output diff --git a/bin/tests/system/conf.sh.win32 b/bin/tests/system/conf.sh.win32 index 0b66f72b15f..6565e1620b3 100644 --- a/bin/tests/system/conf.sh.win32 +++ b/bin/tests/system/conf.sh.win32 @@ -15,66 +15,64 @@ # # Find the top of the BIND9 tree. -TOP=${SYSTEMTESTTOP:=.}/../../.. - -# Make it absolute so that it continues to work after we cd. -TOP=`cd $TOP && pwd` +TOP_BUILDDIR=@abs_top_builddir@ +TOP_SRCDIR=@abs_top_srcdir@ # This is the windows build. This disables certain tests cases # and changes some specific behaviors where necessary. CYGWIN=1 # Load common values shared between windows and unix/linux. -. $TOP/bin/tests/system/conf.sh.common +. $TOP_BUILDDIR/bin/tests/system/conf.sh.common # Visual Studio build configurations are Release and Debug VSCONF=${VSCONF:-Debug} -ARPANAME=$TOP/Build/$VSCONF/arpaname@EXEEXT@ -CDS=$TOP/Build/$VSCONF/dnssec-cds@EXEEXT@ -CHECKCONF=$TOP/Build/$VSCONF/named-checkconf@EXEEXT@ -CHECKZONE=$TOP/Build/$VSCONF/named-checkzone@EXEEXT@ -DDNSCONFGEN=$TOP/Build/$VSCONF/ddns-confgen@EXEEXT@ -DELV=$TOP/Build/$VSCONF/delv@EXEEXT@ -DIG=$TOP/Build/$VSCONF/dig@EXEEXT@ -DNSTAPREAD=$TOP/Build/$VSCONF/dnstap-read@EXEEXT@ -DSFROMKEY=$TOP/Build/$VSCONF/dnssec-dsfromkey@EXEEXT@ -FEATURETEST=$TOP/Build/$VSCONF/feature-test@EXEEXT@ +ARPANAME=$TOP_BUILDDIR/Build/$VSCONF/arpaname@EXEEXT@ +CDS=$TOP_BUILDDIR/Build/$VSCONF/dnssec-cds@EXEEXT@ +CHECKCONF=$TOP_BUILDDIR/Build/$VSCONF/named-checkconf@EXEEXT@ +CHECKZONE=$TOP_BUILDDIR/Build/$VSCONF/named-checkzone@EXEEXT@ +DDNSCONFGEN=$TOP_BUILDDIR/Build/$VSCONF/ddns-confgen@EXEEXT@ +DELV=$TOP_BUILDDIR/Build/$VSCONF/delv@EXEEXT@ +DIG=$TOP_BUILDDIR/Build/$VSCONF/dig@EXEEXT@ +DNSTAPREAD=$TOP_BUILDDIR/Build/$VSCONF/dnstap-read@EXEEXT@ +DSFROMKEY=$TOP_BUILDDIR/Build/$VSCONF/dnssec-dsfromkey@EXEEXT@ +FEATURETEST=$TOP_BUILDDIR/Build/$VSCONF/feature-test@EXEEXT@ FSTRM_CAPTURE=@FSTRM_CAPTURE@ -IMPORTKEY=$TOP/Build/$VSCONF/dnssec-importkey@EXEEXT@ -JOURNALPRINT=$TOP/Build/$VSCONF/named-journalprint@EXEEXT@ -KEYFRLAB=$TOP/Build/$VSCONF/dnssec-keyfromlabel@EXEEXT@ -KEYGEN=$TOP/Build/$VSCONF/dnssec-keygen@EXEEXT@ -MDIG=$TOP/Build/$VSCONF/mdig@EXEEXT@ -NAMED=$TOP/Build/$VSCONF/named@EXEEXT@ -NSEC3HASH=$TOP/Build/$VSCONF/nsec3hash@EXEEXT@ -NSLOOKUP=$TOP/Build/$VSCONF/nslookup@EXEEXT@ -NSUPDATE=$TOP/Build/$VSCONF/nsupdate@EXEEXT@ -NZD2NZF=$TOP/Build/$VSCONF/named-nzd2nzf@EXEEXT@ -PK11DEL="$TOP/Build/$VSCONF/pkcs11-destroy@EXEEXT@ -s ${SLOT:-0} -p ${HSMPIN:-1234} -w 0" -PK11GEN="$TOP/Build/$VSCONF/pkcs11-keygen@EXEEXT@ -q -s ${SLOT:-0} -p ${HSMPIN:-1234}" -PK11LIST="$TOP/Build/$VSCONF/pkcs11-list@EXEEXT@ -s ${SLOT:-0} -p ${HSMPIN:-1234}" -RESOLVE=$TOP/lib/samples/resolve -REVOKE=$TOP/Build/$VSCONF/dnssec-revoke@EXEEXT@ -RNDC=$TOP/Build/$VSCONF/rndc@EXEEXT@ -RNDCCONFGEN=$TOP/Build/$VSCONF/rndc-confgen@EXEEXT@ -RRCHECKER=$TOP/Build/$VSCONF/named-rrchecker@EXEEXT@ -SAMPLEUPDATE=$TOP/Build/$VSCONF/update@EXEEXT@ -SETTIME=$TOP/Build/$VSCONF/dnssec-settime@EXEEXT@ -SIGNER=$TOP/Build/$VSCONF/dnssec-signzone@EXEEXT@ -TSIGKEYGEN=$TOP/Build/$VSCONF/tsig-keygen@EXEEXT@ -VERIFY=$TOP/Build/$VSCONF/dnssec-verify@EXEEXT@ - -# to port WIRETEST=$TOP/Build/$VSCONF/wire_test@EXEEXT@ +IMPORTKEY=$TOP_BUILDDIR/Build/$VSCONF/dnssec-importkey@EXEEXT@ +JOURNALPRINT=$TOP_BUILDDIR/Build/$VSCONF/named-journalprint@EXEEXT@ +KEYFRLAB=$TOP_BUILDDIR/Build/$VSCONF/dnssec-keyfromlabel@EXEEXT@ +KEYGEN=$TOP_BUILDDIR/Build/$VSCONF/dnssec-keygen@EXEEXT@ +MDIG=$TOP_BUILDDIR/Build/$VSCONF/mdig@EXEEXT@ +NAMED=$TOP_BUILDDIR/Build/$VSCONF/named@EXEEXT@ +NSEC3HASH=$TOP_BUILDDIR/Build/$VSCONF/nsec3hash@EXEEXT@ +NSLOOKUP=$TOP_BUILDDIR/Build/$VSCONF/nslookup@EXEEXT@ +NSUPDATE=$TOP_BUILDDIR/Build/$VSCONF/nsupdate@EXEEXT@ +NZD2NZF=$TOP_BUILDDIR/Build/$VSCONF/named-nzd2nzf@EXEEXT@ +PK11DEL="$TOP_BUILDDIR/Build/$VSCONF/pkcs11-destroy@EXEEXT@ -s ${SLOT:-0} -p ${HSMPIN:-1234} -w 0" +PK11GEN="$TOP_BUILDDIR/Build/$VSCONF/pkcs11-keygen@EXEEXT@ -q -s ${SLOT:-0} -p ${HSMPIN:-1234}" +PK11LIST="$TOP_BUILDDIR/Build/$VSCONF/pkcs11-list@EXEEXT@ -s ${SLOT:-0} -p ${HSMPIN:-1234}" +RESOLVE=$TOP_BUILDDIR/lib/samples/resolve +REVOKE=$TOP_BUILDDIR/Build/$VSCONF/dnssec-revoke@EXEEXT@ +RNDC=$TOP_BUILDDIR/Build/$VSCONF/rndc@EXEEXT@ +RNDCCONFGEN=$TOP_BUILDDIR/Build/$VSCONF/rndc-confgen@EXEEXT@ +RRCHECKER=$TOP_BUILDDIR/Build/$VSCONF/named-rrchecker@EXEEXT@ +SAMPLEUPDATE=$TOP_BUILDDIR/Build/$VSCONF/update@EXEEXT@ +SETTIME=$TOP_BUILDDIR/Build/$VSCONF/dnssec-settime@EXEEXT@ +SIGNER=$TOP_BUILDDIR/Build/$VSCONF/dnssec-signzone@EXEEXT@ +TSIGKEYGEN=$TOP_BUILDDIR/Build/$VSCONF/tsig-keygen@EXEEXT@ +VERIFY=$TOP_BUILDDIR/Build/$VSCONF/dnssec-verify@EXEEXT@ + +# to port WIRETEST=$TOP_BUILDDIR/Build/$VSCONF/wire_test@EXEEXT@ WIRETEST= -BIGKEY=$TOP/Build/$VSCONF/bigkey@EXEEXT@ -GENCHECK=$TOP/Build/$VSCONF/gencheck@EXEEXT@ -KEYCREATE=$TOP/Build/$VSCONF/keycreate@EXEEXT@ -KEYDELETE=$TOP/Build/$VSCONF/keydelete@EXEEXT@ -MAKEJOURNAL=$TOP/Build/$VSCONF/makejournal@EXEEXT@ -PIPEQUERIES=$TOP/Build/$VSCONF/pipequeries@EXEEXT@ -# to port SAMPLEUPDATE=$TOP/lib/samples/sample-update +BIGKEY=$TOP_BUILDDIR/Build/$VSCONF/bigkey@EXEEXT@ +GENCHECK=$TOP_BUILDDIR/Build/$VSCONF/gencheck@EXEEXT@ +KEYCREATE=$TOP_BUILDDIR/Build/$VSCONF/keycreate@EXEEXT@ +KEYDELETE=$TOP_BUILDDIR/Build/$VSCONF/keydelete@EXEEXT@ +MAKEJOURNAL=$TOP_BUILDDIR/Build/$VSCONF/makejournal@EXEEXT@ +PIPEQUERIES=$TOP_BUILDDIR/Build/$VSCONF/pipequeries@EXEEXT@ +# to port SAMPLEUPDATE=$TOP_BUILDDIR/lib/samples/sample-update # we don't want a KRB5_CONFIG setting breaking the tests KRB5_CONFIG=NUL @@ -120,6 +118,3 @@ HAVEJSONSTATS=@JSONSTATS@ HAVEZLIB=@ZLIB@ NZD=@NZD_TOOLS@ CRYPTO=@CRYPTO@ - -# The rest is shared between Windows and Unices -. $TOP/bin/tests/system/conf.sh.common diff --git a/bin/tests/system/parallel.sh b/bin/tests/system/parallel.sh index e59b4d585f0..3d9a042929f 100644 --- a/bin/tests/system/parallel.sh +++ b/bin/tests/system/parallel.sh @@ -11,7 +11,7 @@ . ./conf.sh -PARALLELS=`echo $PARALLELDIRS | sed "s|\([^ ][^ ]*\)|test-\1|g;" | tr _ -` +PARALLELS=$(echo "$PARALLELDIRS" | sed "s|\([^ ][^ ]*\)|test-\1|g;" | tr _ - | tr "\n" " ") echo ".PHONY: $PARALLELS" echo @@ -28,7 +28,7 @@ echo "test check: $PARALLELS" port=${STARTPORT:-5000} for directory in $PARALLELDIRS ; do echo - echo "test-`echo $directory | tr _ -`: check_interfaces" - echo " @${SHELL} ./run.sh -p $port $directory 2>&1 | tee test.output.$directory" - port=`expr $port + 100` + echo "test-$(echo "$directory" | tr _ -): check_interfaces" + echo " @${SHELL} ./run.sh -r -p $port $directory 2>&1 | tee test.output.$directory" + port=$((port+100)) done diff --git a/bin/tests/system/runall.sh b/bin/tests/system/runall.sh index 93df8dab498..5f20e166698 100755 --- a/bin/tests/system/runall.sh +++ b/bin/tests/system/runall.sh @@ -25,7 +25,7 @@ # run sequentially on that platform.) SYSTEMTESTTOP=. -. $SYSTEMTESTTOP/conf.sh +. "$SYSTEMTESTTOP/conf.sh" usage="Usage: ./runall.sh [-c] [-n] [numprocesses]" @@ -36,22 +36,23 @@ SYSTEMTEST_NO_CLEAN=${SYSTEMTEST_NO_CLEAN:-0} # Handle command line switches if present. -while getopts "cn" flag; do +while getopts "cn-" flag; do case "$flag" in c) SYSTEMTEST_FORCE_COLOR=1 ;; n) SYSTEMTEST_NO_CLEAN=1 ;; + -) break;; + *) exit 1;; esac done export NOCLEAN -shift `expr $OPTIND - 1` +shift $((OPTIND-1)) # Obtain number of processes to use. if [ $# -eq 0 ]; then numproc=1 elif [ $# -eq 1 ]; then - test "$1" -eq "$1" > /dev/null 2>&1 - if [ $? -ne 0 ]; then + if [ "$1" -ne "$1" ] 2>&1; then # Value passed is not numeric echo "$usage" >&2 exit 1 @@ -72,14 +73,14 @@ status=0 if [ "$NOPARALLEL" = "" ]; then if [ "$CYGWIN" = "" ]; then # Running on Unix, use "make" to run tests in parallel. - make -j $numproc check + make -j "$numproc" check status=$? else # Running on Windows: Cygwin "make" is available, but isn't being # used for the build. So we create a special makefile for the purpose # of parallel execution of system tests, and use that. $SHELL parallel.sh > parallel.mk - make -f parallel.mk -j $numproc check + make -f parallel.mk -j "$numproc" check $SHELL ./runsequential.sh $SHELL ./testsummary.sh || status=1 fi @@ -95,11 +96,15 @@ else EOF exit 1 } - { + ( + status=0 for testdir in $SUBDIRS; do - $SHELL run.sh $testdir || status=1 + $SHELL run.sh -r "$testdir" || status=1 done - } 2>&1 | tee "systests.output" + echo "$status" > systests.status + ) 2>&1 | tee "systests.output" + read -r status < systests.status + rm systests.status fi -exit $status +exit "$status" diff --git a/bin/tests/system/runsequential.sh b/bin/tests/system/runsequential.sh index 6380f4c2f22..f3f168e4792 100755 --- a/bin/tests/system/runsequential.sh +++ b/bin/tests/system/runsequential.sh @@ -17,9 +17,9 @@ # SYSTEMTESTTOP=. -. $SYSTEMTESTTOP/conf.sh +. "$SYSTEMTESTTOP/conf.sh" for d in $SEQUENTIALDIRS do - $SHELL run.sh "${@}" $d 2>&1 | tee test.output.$d + $SHELL run.sh "${@}" "$d" 2>&1 | tee "test.output.$d" done diff --git a/bin/tests/system/testsummary.sh b/bin/tests/system/testsummary.sh index 6089b167708..64a99fd4c75 100644 --- a/bin/tests/system/testsummary.sh +++ b/bin/tests/system/testsummary.sh @@ -25,17 +25,18 @@ # 1 - one or more tests failed SYSTEMTESTTOP=. -. $SYSTEMTESTTOP/conf.sh +. "$SYSTEMTESTTOP/conf.sh" keepfile=0 while getopts "n" flag; do case $flag in n) keepfile=1 ;; + *) exit 1 ;; esac done -if [ `ls test.output.* 2> /dev/null | wc -l` -eq 0 ]; then +if [ "$(find . -name 'test.output.*' 2>/dev/null | wc -l)" -eq 0 ]; then echowarn "I:No 'test.output.*' files were found." echowarn "I:Printing summary from pre-existing 'systests.output'." else @@ -45,37 +46,42 @@ else fi fi +if [ ! -f systests.output ]; then + echowarn "I:No 'systests.output' file found." + exit 1 +fi + status=0 echoinfo "I:System test result summary:" -echoinfo "`grep 'R:[a-z0-9_-][a-z0-9_-]*:[A-Z][A-Z]*' systests.output | cut -d':' -f3 | sort | uniq -c | sed -e 's/^/I:/'`" +echoinfo "$(grep 'R:[a-z0-9_-][a-z0-9_-]*:[A-Z][A-Z]*' systests.output | cut -d':' -f3 | sort | uniq -c | sed -e 's/^/I:/')" -FAILED_TESTS=`grep 'R:[a-z0-9_-][a-z0-9_-]*:FAIL' systests.output | cut -d':' -f2 | sort | sed -e 's/^/I: /'` +FAILED_TESTS=$(grep 'R:[a-z0-9_-][a-z0-9_-]*:FAIL' systests.output | cut -d':' -f2 | sort | sed -e 's/^/I: /') if [ -n "${FAILED_TESTS}" ]; then echoinfo "I:The following system tests failed:" echoinfo "${FAILED_TESTS}" status=1 fi -CRASHED_TESTS=`find . -name 'core*' -or -name '*.core' | cut -d'/' -f2 | sort -u | sed -e 's/^/I: /'` +CRASHED_TESTS=$(find . -name 'core*' -or -name '*.core' | cut -d'/' -f2 | sort -u | sed -e 's/^/I: /') if [ -n "${CRASHED_TESTS}" ]; then echoinfo "I:Core dumps were found for the following system tests:" echoinfo "${CRASHED_TESTS}" fi -ASSERTION_FAILED_TESTS=`find . -name named.run | xargs grep "assertion failure" | cut -d'/' -f2 | sort -u | sed -e 's/^/I: /'` +ASSERTION_FAILED_TESTS=$(find . -name named.run -print0 | xargs -0 grep "assertion failure" | cut -d'/' -f2 | sort -u | sed -e 's/^/I: /') if [ -n "${ASSERTION_FAILED_TESTS}" ]; then echoinfo "I:Assertion failures were detected for the following system tests:" echoinfo "${ASSERTION_FAILED_TESTS}" fi -TSAN_REPORT_TESTS=`find . -name 'tsan.*' | cut -d'/' -f2 | sort -u | sed -e 's/^/I: /'` +TSAN_REPORT_TESTS=$(find . -name 'tsan.*' | cut -d'/' -f2 | sort -u | sed -e 's/^/I: /') if [ -n "${TSAN_REPORT_TESTS}" ]; then echoinfo "I:ThreadSanitizer reported issues for the following system tests:" echoinfo "${TSAN_REPORT_TESTS}" fi -RESULTS_FOUND=`grep -c 'R:[a-z0-9_-][a-z0-9_-]*:[A-Z][A-Z]*' systests.output` -TESTS_RUN=`echo "${SUBDIRS}" | wc -w` +RESULTS_FOUND=$(grep -c 'R:[a-z0-9_-][a-z0-9_-]*:[A-Z][A-Z]*' systests.output) +TESTS_RUN=$(echo "${SUBDIRS}" | wc -w) if [ "${RESULTS_FOUND}" -ne "${TESTS_RUN}" ]; then echofail "I:Found ${RESULTS_FOUND} test results, but ${TESTS_RUN} tests were run" status=1