]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[rt46602] Assign block of ports for each test
authorStephen Morris <stephen@isc.org>
Thu, 23 Nov 2017 09:58:57 +0000 (09:58 +0000)
committerStephen Morris <stephen@isc.org>
Fri, 16 Feb 2018 14:57:51 +0000 (14:57 +0000)
Some tests use more ports than just the query and control ports.
Each test that can run in parallel with other tests is now assigned
a unique block of 10 ports.

bin/tests/system/Makefile.in
bin/tests/system/getopts.sh
bin/tests/system/run.sh

index cd4546a1578a7a83ef8796d60cf09a9dc259b6b4..e27a2a04f041a436425bd09d3692af862a0ba0a2 100644 (file)
@@ -50,19 +50,20 @@ feature-test@EXEEXT@: feature-test.@O@
 PARALLEL = allow_query catz serve-stale rpzrecurse
 
 # Produce intermediate makefile that assigns unique port numbers to each
-# parallel test.
+# parallel test.  The sequential tests all use ports 5300 (for queries) and
+# 9953 (for control).  For this reason, the parallel tests start at port
+# # 10,000
 
 parallel.mk:
        @echo ".PHONY: $(PARALLEL)" > $@ ; \
        echo "" >> $@ ; \
        echo "check: $(PARALLEL)" >> $@ ; \
-       port=5299 ; \
+       port=9990 ; \
        for directory in $(PARALLEL) ; do \
-               port=$$(($$port + 2)) ; \
-               controlport=$$(($$port + 1)) ; \
+               port=$$(($$port + 10)) ; \
                echo "" >> $@ ; \
                echo "$$directory:" >> $@ ; \
-               echo "  @$(SHELL) ./run.sh -p $$port -c $$controlport $$directory" >> $@ ; \
+               echo "  @$(SHELL) ./run.sh -p $$port $$directory" >> $@ ; \
        done
 
 # Targets to run the tests that can be done in parallel (which have unique
@@ -70,10 +71,10 @@ parallel.mk:
 # they all use query port 5300 and control port 9953).
 
 parallel: parallel.mk
-       $(MAKE) -f parallel.mk
+       @$(MAKE) -f parallel.mk
 
 sequential:
-       if test -f ./runall.sh; then $(SHELL) ./runall.sh; fi
+       @if test -f ./runall.sh; then $(SHELL) ./runall.sh; fi
 
 # Standard targets.
 
index fd615a4ef146e4c4fe9030ed6518d8b8f087bea0..24d1b367319a8bfb3c52c5b69195060b55a9bc4c 100644 (file)
@@ -5,25 +5,76 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-# Shell script snippet, must be sourced
+# Shell script snippet, must be sourced.
+#
+# Most system tests require use of at least two ports: the nameserver query
+# port and a port for RNDC access.  In addition, some tests require additional
+# ports (e.g. for tests of transfers between nameservers).
+#
+# To allow tests to run in parallel, each test must be allocated a unique set
+# ports to use.
+#
+# This script is used during testing to parse the "-p" option on the command
+# line invoking scripts used during the test.  The option sets the base of
+# a block of 10 ports used by the test.  A shell symbol is set for each port:
+#
+# port         Port used for queries (default to 5300)
+# aport1       First additional port (set to $port + 1)
+#   :
+# aport8       Eighth additional port (set to $port + 8)
+# controlport  Port used for RNDC (set to $port + 9)
+#
+# The fiule also defines a simple shell function to 
 
 port=5300
-controlport=9953
 
-while getopts ":p:c:" flag; do
+while getopts ":p:" flag; do
     case "$flag" in
        p) port=$OPTARG ;;
-       c) controlport=$OPTARG ;;
        -) break ;;
        *) exit 1 ;;
     esac
 done
-
 shift $(($OPTIND - 1))
 OPTIND=1
 
-# Convenience function to copy configuration file, replacing the port numbers
-# during the copy - more readable than embedding a "sed" command in the script.
+# Ensure port is numeric, above 1024 (limit of privileged port) and that
+# the upper of the 10 ports notionally assigned does not exceed 65535.
+
+if [ "$((${port}+0))" != "${port}" ] || [ "${port}" -le 1024 ] || [ "${port}" -gt 65520 ]; then
+    echo "Specified port '$port' must be numeric and in the range 1025 to 65520" >&2
+    exit 1
+fi
+
+aport1=$(($port + 1))
+aport2=$(($port + 2))
+aport3=$(($port + 3))
+aport4=$(($port + 4))
+aport5=$(($port + 5))
+aport6=$(($port + 6))
+aport7=$(($port + 7))
+aport8=$(($port + 8))
+controlport=$(($port + 9))
+
+
+# copy_setports - Copy Configuration File and Replace Ports
+#
+# Convenience function to copy a configuration file, replacing the symbols
+# PORT, CONTROLPORT and APORT[1-8] with the port numbers set by the "-p"
+# option passed to the script.
+#
+# Usage:
+#   copy_setports infile outfile
+
 copy_setports() {
-    sed -e "s/@PORT@/${port}/g" -e "s/@CONTROLPORT@/${controlport}/g" < $1 > $2
+    sed -e "s/@PORT@/${port}/g" \
+        -e "s/@APORT1@/${aport1}/g" \
+        -e "s/@APORT2@/${aport1}/g" \
+        -e "s/@APORT3@/${aport1}/g" \
+        -e "s/@APORT4@/${aport1}/g" \
+        -e "s/@APORT5@/${aport1}/g" \
+        -e "s/@APORT6@/${aport1}/g" \
+        -e "s/@APORT7@/${aport1}/g" \
+        -e "s/@APORT8@/${aport1}/g" \
+        -e "s/@CONTROLPORT@/${controlport}/g" < $1 > $2
 }
index e30e120227c601aeaf1a6c82764e4757f30fb6d3..99dcdbccb0f6f9b660f486c1ac335d06f86997c1 100644 (file)
@@ -15,30 +15,20 @@ SYSTEMTESTTOP=.
 
 stopservers=true
 clean=true
-port=5300
-controlport=9953
+baseport=5300
 dateargs="-R"
 
-while getopts "knp:d:c:" flag; do
+while getopts "knp:d:" flag; do
     case "$flag" in
        k) stopservers=false ;;
        n) clean=false ;;
-       p) port=$OPTARG ;;
-       c) controlport=$OPTARG ;;
+       p) baseport=$OPTARG ;;
        d) dateargs=$OPTARG ;;
        *) exit 1 ;;
     esac
 done
-
-if [ "$((${port}+0))" -ne "${port}" ] || [ "${port}" -le 1024 ] || [ "${port}" -gt 65535 ]; then
-    echo "Specified port '$port' must be numeric (1024,65535>" >&2; exit 1;
-fi
-
-if [ "$((${controlport}+0))" -ne "${controlport}" ] || [ "${controlport}" -le 1024 ] || [ "${controlport}" -gt 65535 ]; then
-    echo "Specified control port '$controlport' must be numeric (1024,65535>" >&2; exit 1;
-fi
-
 shift $(($OPTIND - 1))
+OPTIND=1
 
 test $# -gt 0 || { echo "usage: $0 [-k|-n|-p <PORT>] test-directory" >&2; exit 1; }
 
@@ -47,6 +37,9 @@ shift
 
 test -d $test || { echofail "$0: $test: no such test" >&2; exit 1; }
 
+# Validate the port number and obtain other port numbers.
+. $SYSTEMTESTTOP/getopts.sh -p "$baseport"
+
 echoinfo "S:$test:`date $dateargs`" >&2
 echoinfo "T:$test:1:A" >&2
 echoinfo "A:$test:System test $test" >&2
@@ -55,14 +48,14 @@ echoinfo "I:$test:CONTROLPORT:${controlport}" >&2
 
 if [ x${PERL:+set} = x ]
 then
-    echowarn "I:Perl not available.  Skipping test." >&2
+    echowarn "I:$test:Perl not available.  Skipping test." >&2
     echowarn "R:$test:UNTESTED" >&2
     echoinfo "E:$test:`date $dateargs`" >&2
     exit 0;
 fi
 
 # Check for test-specific prerequisites.
-test ! -f $test/prereq.sh || ( cd $test && $SHELL prereq.sh -c "$controlport" -p "$port" -- "$@" )
+test ! -f $test/prereq.sh || ( cd $test && $SHELL prereq.sh -p "$port" -- "$@" )
 result=$?
 
 if [ $result -eq 0 ]; then
@@ -97,15 +90,14 @@ fi
 # Set up any dynamically generated test data
 if test -f $test/setup.sh
 then
-   ( cd $test && $SHELL setup.sh -c "$controlport" -p "$port" -- "$@" )
+   ( cd $test && $SHELL setup.sh -p "$port" -- "$@" )
 fi
 
 # Start name servers running
 $PERL start.pl -p $port $test || { echofail "R:$test:FAIL"; echoinfo "E:$test:`date $dateargs`"; exit 1; }
 
 # Run the tests
-( cd $test ; $SHELL tests.sh -c "$controlport" -p "$port" -- "$@" )
-
+( cd $test ; $SHELL tests.sh -p "$port" -- "$@" )
 status=$?
 
 if $stopservers