]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[rt46602] Ensure that tests running in parallel use unique ports
authorStephen Morris <stephen@isc.org>
Fri, 17 Nov 2017 13:21:05 +0000 (13:21 +0000)
committerStephen Morris <stephen@isc.org>
Fri, 16 Feb 2018 14:57:51 +0000 (14:57 +0000)
Via an intermediate make file, tests that have been modified to be able
to run in parallel are assigned unique query and control port numbers
(other than 5300 and 9953 respectively).  Tests that have not yet been
modified all use ports 5300 and 9953, so must be run sequentially.

bin/tests/system/Makefile.in
bin/tests/system/conf.sh.in
bin/tests/system/conf.sh.win32
bin/tests/system/runall.sh

index 8af2b5d8a9839a36c8d34dce745778003220e353..ebae70b96ffbe244e05e8b7f802d0678f089dda7 100644 (file)
@@ -40,26 +40,52 @@ 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.
-
-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}
 
@@ -71,5 +97,3 @@ installdirs:
 install::
 
 uninstall::
-
-.PHONY: $(TESTS)
index bc553905c8d6e6889995b156c9a59e4390b3070d..9bbfe2ceb17bf477f7df6e146b182e646e21cef6 100644 (file)
@@ -72,7 +72,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 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
@@ -88,6 +91,15 @@ SUBDIRS="acl additional addzone auth autosign builtin
         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
@@ -191,6 +203,10 @@ fi
 TESTNAME="`basename $PWD`"
 
 echo_i() {
+    # Without formatting
+    echo "I:$TESTNAME:$@" >> test.output
+
+    # With formatting
     echoinfo "I:$TESTNAME:$@"
 }
 
index 492fbb81d21008bcecbd204c7fb42d02ffe0bc50..2fd9fafa1d753acccd6199472b0859f5248a8755 100644 (file)
@@ -79,7 +79,10 @@ KRB5_CONFIG=NUL
 # 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
@@ -95,6 +98,14 @@ SUBDIRS="acl additional addzone autosign builtin
         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 
 
index a03166978ec91d861a67a6a81ce1d54a7a857859..315caf67c0fbdaa125247246132f2dc8b7734afe 100644 (file)
@@ -9,6 +9,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
@@ -16,7 +20,7 @@ SYSTEMTESTTOP=.
 status=0
 
 {
-    for d in $SUBDIRS
+    for d in $SEQUENTIALDIRS
     do
             $SHELL run.sh "${@}" $d || status=1
     done