diff --git a/bin/tests/system/Makefile.in b/bin/tests/system/Makefile.in index b9b4e9a5c1..d87c89de4e 100644 --- a/bin/tests/system/Makefile.in +++ b/bin/tests/system/Makefile.in @@ -47,26 +47,53 @@ TARGETS = feature-test@EXEEXT@ feature-test@EXEEXT@: feature-test.@O@ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ feature-test.@O@ ${ISCLIBS} ${LIBS} -# Running the scripts below is bypassed when a separate -# build directory is used. + +# Running the scripts below is bypassed when a separate # build directory is +# used. + +# Define the tests that can be run in parallel. This should be identical to +# the definition of PARALLELDIRS in conf.sh. These tests do not use query +# port 5300 or control port 9953. + +PARALLEL = allow_query serve-stale rpzrecurse + +# Produce intermediate makefile that assigns unique port numbers to each +# parallel test. + +parallel.mk: + @echo ".PHONY: $(PARALLEL)" > $@ ; \ + echo "" >> $@ ; \ + echo "check: $(PARALLEL)" >> $@ ; \ + port=5299 ; \ + for directory in $(PARALLEL) ; do \ + port=$$(($$port + 2)) ; \ + controlport=$$(($$port + 1)) ; \ + echo "" >> $@ ; \ + echo "$$directory:" >> $@ ; \ + echo " @$(SHELL) ./run.sh -p $$port -c $$controlport $$directory" >> $@ ; \ + done + +# Targets to run the tests that can be done in parallel (which have unique +# ports assigned to them) and the tests which must be run sequentially (because +# they all use query port 5300 and control port 9953). + +parallel: parallel.mk + $(MAKE) -f parallel.mk + +sequential: + if test -f ./runall.sh; then $(SHELL) ./runall.sh; fi + +# Standard targets. check: test -TESTS = allow_query serve-stale rpzrecurse alltests - -test: subdirs $(TESTS) - -alltests: - if test -f ./runall.sh; then $(SHELL) ./runall.sh; fi - -$(TESTS): - PORT=$$((32767+$$RANDOM)); \ - $(SHELL) ./run.sh -p $$(($$PORT)) -c $$(($$PORT+1)) $@ +test: parallel sequential testclean clean distclean:: if test -f ./cleanall.sh; then sh ./cleanall.sh; fi rm -f systests.output rm -f random.data + rm -f parallel.mk rm -f ${TARGETS} rm -f ${OBJS} @@ -78,5 +105,3 @@ installdirs: install:: uninstall:: - -.PHONY: $(TESTS) diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in index 3c357ddd8f..594ece5a23 100644 --- a/bin/tests/system/conf.sh.in +++ b/bin/tests/system/conf.sh.in @@ -67,7 +67,10 @@ KRB5_CONFIG=/dev/null # The "stress" test is not run by default since it creates enough # load on the machine to make it unusable to other users. # v6synth -SUBDIRS="acl additional allow_query addzone autosign builtin +# +# List of tests that use ports 5300 and 9953. For this reason, these must +# be run sequentially. +SEQUENTIALDIRS="acl additional addzone autosign builtin cacheclean case chain checkconf @CHECKDS@ checknames checkzone @COVERAGE@ database digdelv dlv dlz dlzexternal dns64 dnssec ecdsa eddsa emptyzones fetchlimit filter-aaaa @@ -78,6 +81,15 @@ SUBDIRS="acl additional allow_query addzone autosign builtin sortlist spf staticstub stub tkey tsig tsiggss unknown upforwd verify views wildcard xfer xferquota zero zonechecks" +# List of tests that use unique ports (other than 5300 and 9953). These +# tests can be run in parallel. +# +# This symbol must be kept in step with the PARALLEL macro in Makefile.in +PARALLELDIRS="allow_query" + +SUBDIRS="$SEQUENTIALDIRS $PARALLELDIRS" + + # Things that are different on Windows KILL=kill DIFF=diff @@ -170,6 +182,10 @@ fi TESTNAME="`basename $PWD`" echo_i() { + # Without formatting + echo "I:$TESTNAME:$@" >> test.output + + # With formatting echoinfo "I:$TESTNAME:$@" } diff --git a/bin/tests/system/runall.sh b/bin/tests/system/runall.sh index c746f0ce47..c6eeb05be3 100644 --- a/bin/tests/system/runall.sh +++ b/bin/tests/system/runall.sh @@ -18,6 +18,10 @@ # # Run all the system tests. # +# Note: Use "make check" to run all the system tests. This script will just +# run those tests that require that each of their nameservers is the only one +# running on an IP address. +# SYSTEMTESTTOP=. . $SYSTEMTESTTOP/conf.sh @@ -25,7 +29,7 @@ SYSTEMTESTTOP=. status=0 { - for d in $SUBDIRS + for d in $SEQUENTIALDIRS do $SHELL run.sh "${@}" $d || status=1 done