diff --git a/bin/tests/system/Makefile.in b/bin/tests/system/Makefile.in index e7fedd3a53..2ff0b8e5d7 100644 --- a/bin/tests/system/Makefile.in +++ b/bin/tests/system/Makefile.in @@ -46,7 +46,10 @@ feature-test@EXEEXT@: feature-test.@O@ check: test test: subdirs - if test -f ./runall.sh; then sh ./runall.sh; fi + if test -f ./runall.sh; then $(SHELL) ./runall.sh; fi + +server-stale: + $(SHELL) ./run.sh -p 5310 -c 9954 server-stale testclean clean distclean:: if test -f ./cleanall.sh; then sh ./cleanall.sh; fi @@ -63,3 +66,5 @@ installdirs: install:: uninstall:: + +.PHONY: server-stale diff --git a/bin/tests/system/common/controls.conf.in b/bin/tests/system/common/controls.conf.in new file mode 100644 index 0000000000..f27441b2f1 --- /dev/null +++ b/bin/tests/system/common/controls.conf.in @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2000, 2001, 2004, 2007, 2013, 2016 Internet Systems Consortium, Inc. ("ISC") + * + * This Source Code Form is subject to the terms of the Mozilla Public + * 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/. + */ + +/* $Id: controls.conf,v 1.6 2007/06/19 23:47:01 tbox Exp $ */ + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-sha256; +}; + +controls { + inet 10.53.0.2 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; +}; + diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in index bae8441a15..cd3ffffc90 100644 --- a/bin/tests/system/conf.sh.in +++ b/bin/tests/system/conf.sh.in @@ -83,7 +83,7 @@ SUBDIRS="acl additional addzone allow_query auth autosign builtin names notify nslookup nsupdate nzd2nzf padding pending pipelined @PKCS11_TEST@ reclimit redirect resolver rndc rpz rpzrecurse rrchecker rrl rrsetorder rsabigexponent - runtime serve-stale sfcache smartsign sortlist spf staticstub + runtime sfcache smartsign sortlist spf staticstub statistics statschannel stub synthfromdnssec tcp tkey tools tsig tsiggss unknown upforwd verify views wildcard xfer xferquota zero zonechecks" diff --git a/bin/tests/system/getopts.sh b/bin/tests/system/getopts.sh new file mode 100644 index 0000000000..08fd8b7351 --- /dev/null +++ b/bin/tests/system/getopts.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Copyright (C) 2017 Internet Systems Consortium, Inc. ("ISC") +# +# This Source Code Form is subject to the terms of the Mozilla Public +# 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 + +port=5300 +controlport=9953 + +while getopts "p:c:" flag; do + case "$flag" in + p) port=$OPTARG ;; + c) controlport=$OPTARG ;; + *) exit 1 ;; + esac +done +shift $(($OPTIND - 1)) diff --git a/bin/tests/system/run.sh b/bin/tests/system/run.sh index 5ec78e322c..756fcdf341 100644 --- a/bin/tests/system/run.sh +++ b/bin/tests/system/run.sh @@ -15,20 +15,42 @@ SYSTEMTESTTOP=. stopservers=true clean=true +port=5300 +controlport=9953 +dateargs="-R" -case $1 in - --keep|-k) stopservers=false; shift ;; - --noclean|-n) clean=false; shift ;; -esac +while getopts "knp:d:c:" flag; do + case "$flag" in + k) stopservers=false ;; + n) clean=false ;; + p) port=$OPTARG ;; + c) controlport=$OPTARG ;; + d) dateargs=$OPTARG ;; + *) exit 1 ;; + esac +done -test $# -gt 0 || { echo "usage: $0 [--keep|--noclean] test-directory" >&2; exit 1; } +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 + +echo "PORT: ${port}" +echo "CONTROLPORT: ${controlport}" + +shift $(($OPTIND - 1)) + +test $# -gt 0 || { echo "usage: $0 [-k|-n|-p ] test-directory" >&2; exit 1; } test=$1 shift test -d $test || { echo "$0: $test: no such test" >&2; exit 1; } -echoinfo "S:$test:`date`" >&2 +echoinfo "S:$test:`date $dateargs`" >&2 echoinfo "T:$test:1:A" >&2 echoinfo "A:System test $test" >&2 @@ -36,20 +58,12 @@ if [ x${PERL:+set} = x ] then echowarn "I:Perl not available. Skipping test." >&2 echowarn "R:UNTESTED" >&2 - echoinfo "E:$test:`date`" >&2 + echoinfo "E:$test:`date $dateargs`" >&2 exit 0; fi -$PERL testsock.pl || { - echowarn "I:Network interface aliases not set up. Skipping test." >&2; - echowarn "R:UNTESTED" >&2; - echoinfo "E:$test:`date`" >&2; - exit 0; -} - - # Check for test-specific prerequisites. -test ! -f $test/prereq.sh || ( cd $test && $SHELL prereq.sh "$@" ) +test ! -f $test/prereq.sh || ( cd $test && $SHELL prereq.sh -c "$controlport" -p "$port" "$@" ) result=$? if [ $result -eq 0 ]; then @@ -57,10 +71,18 @@ if [ $result -eq 0 ]; then else echowarn "I:Prerequisites for $test missing, skipping test." >&2 [ $result -eq 255 ] && echowarn "R:SKIPPED" || echowarn "R:UNTESTED" - echoinfo "E:$test:`date`" >&2 + echoinfo "E:$test:`date $dateargs`" >&2 exit 0 fi +# Test sockets after the prerequisites has been setup +$PERL testsock.pl -p "${port}" || { + echowarn "I:Network interface aliases not set up. Skipping test." >&2; + echowarn "R:UNTESTED" >&2; + echoinfo "E:$test:`date $dateargs`" >&2; + exit 0; +} + # Check for PKCS#11 support if test ! -f $test/usepkcs11 || $SHELL cleanpkcs11.sh @@ -69,21 +91,21 @@ then else echowarn "I:Need PKCS#11 for $test, skipping test." >&2 echowarn "R:PKCS11ONLY" >&2 - echoinfo "E:$test:`date`" >&2 + echoinfo "E:$test:`date $dateargs`" >&2 exit 0 fi # Set up any dynamically generated test data if test -f $test/setup.sh then - ( cd $test && $SHELL setup.sh "$@" ) + ( cd $test && $SHELL setup.sh -c "$controlport" -p "$port" "$@" ) fi # Start name servers running -$PERL start.pl $test || { echofail "R:FAIL"; echoinfo "E:$test:`date`"; exit 1; } +$PERL start.pl -p $port $test || { echofail "R:FAIL"; echoinfo "E:$test:`date $dateargs`"; exit 1; } # Run the tests -( cd $test ; $SHELL tests.sh ) +( cd $test ; $SHELL tests.sh -c "$controlport" -p "$port" "$@" ) status=$? @@ -108,21 +130,21 @@ else if $clean then - rm -f $SYSTEMTESTTOP/random.data - if test -f $test/clean.sh - then - ( cd $test && $SHELL clean.sh "$@" ) - fi - if test -d ../../../.git - then - git status -su --ignored $test | - sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \ - -e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \ - -e 's|^!! \(.*/named.memstats\)$|I:file \1 not removed|p' - fi + rm -f $SYSTEMTESTTOP/random.data + if test -f $test/clean.sh + then + ( cd $test && $SHELL clean.sh "-p" "$port" "$@" ) + fi + if test -d ../../../.git + then + git status -su --ignored $test | + sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \ + -e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \ + -e 's|^!! \(.*/named.memstats\)$|I:file \1 not removed|p' + fi fi fi -echoinfo "E:$test:`date`" +echoinfo "E:$test:`date $dateargs`" exit $status diff --git a/bin/tests/system/start.pl b/bin/tests/system/start.pl index e882d08d69..f29f1301df 100644 --- a/bin/tests/system/start.pl +++ b/bin/tests/system/start.pl @@ -35,7 +35,8 @@ use Getopt::Long; my $usage = "usage: $0 [--noclean] [--restart] test-directory [server-directory [server-options]]"; my $noclean = ''; my $restart = ''; -GetOptions('noclean' => \$noclean, 'restart' => \$restart); +my $defaultport = 5300; +GetOptions('noclean' => \$noclean, 'restart' => \$restart, 'p=i' => \$defaultport); my $test = $ARGV[0]; my $server = $ARGV[1]; my $options = $ARGV[2]; @@ -92,7 +93,7 @@ if ($server) { sub check_ports { my $server = shift; my $options = ""; - my $port = 5300; + my $port = $defaultport; my $file = ""; $file = $testdir . "/" . $server . "/named.port" if ($server);