${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.
-
-check: test
-
-TESTS = allow_query serve-stale rpzrecurse alltests
+# 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
-test: subdirs $(TESTS)
+# Standard targets.
-alltests:
- if test -f ./runall.sh; then $(SHELL) ./runall.sh; fi
+check: test
-$(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}
install::
uninstall::
-
-.PHONY: $(TESTS)
# 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 addzone auth autosign builtin
+#
+# List of tests that use ports 5300 and 9953. For this reason, these must
+# be run sequentially.
+SEQUENTIALDIRS="acl additional addzone auth autosign builtin
cacheclean case catz cds chain
checkconf @CHECKDS@ checknames checkzone cookie @COVERAGE@
database digdelv dlv dlz dlzexternal
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 rps-recurse serve-stale"
+
+SUBDIRS="$SEQUENTIALDIRS $PARALLELDIRS"
+
+
# Things that are different on Windows
KILL=kill
DIFF=diff
TESTNAME="`basename $PWD`"
echo_i() {
+ # Without formatting
+ echo "I:$TESTNAME:$@" >> test.output
+
+ # With formatting
echoinfo "I:$TESTNAME:$@"
}
# 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 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 catz
checkconf @CHECKDS@ checknames checkzone cookie @COVERAGE@
database digdelv dlv dlvauto dlz dlzexternal dname
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 rpzrecurse serve-stale"
+
+SUBDIRS="$SEQUENTIALDIRS $PARALLELDIRS"
+
# missing: chain integrity
# extra: dname ednscompliance forward
#
# 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
status=0
{
- for d in $SUBDIRS
+ for d in $SEQUENTIALDIRS
do
$SHELL run.sh "${@}" $d || status=1
done