diff --git a/bin/tests/system/Makefile.in b/bin/tests/system/Makefile.in index cd4546a157..e27a2a04f0 100644 --- a/bin/tests/system/Makefile.in +++ b/bin/tests/system/Makefile.in @@ -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. diff --git a/bin/tests/system/getopts.sh b/bin/tests/system/getopts.sh index fd615a4ef1..24d1b36731 100644 --- a/bin/tests/system/getopts.sh +++ b/bin/tests/system/getopts.sh @@ -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 } diff --git a/bin/tests/system/run.sh b/bin/tests/system/run.sh index e30e120227..99dcdbccb0 100644 --- a/bin/tests/system/run.sh +++ b/bin/tests/system/run.sh @@ -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 ] 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