Commit bbae24c1 authored by Evan Hunt's avatar Evan Hunt

enable parallel system tests on windows

this moves the creation of "parallel.mk" into a separate shell script
instead of bin/tests/system/Makefile. that shell script can now be
executed by runall.sh, allowing us to make use of the cygwin "make"
command, which supports parallel execution.
parent 7416045f
......@@ -47,32 +47,6 @@ feature-test@EXEEXT@: feature-test.@O@
# 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. Note: longer-running tests
# such as serve-stale and rpzrecurse stale are scheduled first to get more
# benefit from parallelism.
PARALLEL = rpzrecurse serve-stale dnssec \
acl additional addzone allow-query auth autosign \
builtin cacheclean case catz cds chain \
checkconf checknames checkzone \
@CHECKDS@ @COVERAGE@ @KEYMGR@ \
cookie database digdelv dlv dlz dlzexternal \
dns64 @DNSTAP@ dscp dsdigest dyndb \
ednscompliance emptyzones \
fetchlimit filter-aaaa formerr forward \
geoip glue idna inline integrity ixfr keepalive \
legacy limits logfileconfig \
masterfile masterformat metadata mirror mkeys \
names notify nslookup nsupdate nzd2nzf \
padding pending pipelined qmin \
reclimit redirect resolver rndc rootkeysentinel rpz \
rrchecker rrl rrsetorder rsabigexponent runtime \
sfcache smartsign sortlist \
spf staticstub statistics statschannel stub synthfromdnssec \
tcp tools tsig tsiggss ttl \
unknown upforwd verify views wildcard \
xfer xferquota zero zonechecks
# Produce intermediate makefile that assigns unique port numbers to each
# parallel test. The start port number of 5,000 is arbitrary - it must just
# be greater than the highest privileged port, 1024.
......@@ -84,26 +58,7 @@ PARALLEL = rpzrecurse serve-stale dnssec \
.PHONY: parallel.mk
parallel.mk:
@PARALLEL_SANITIZED=`echo $(PARALLEL) | sed "s|\([^ ][^ ]*\)|test-\1|g;" | tr _ -` ; \
echo ".PHONY: $$PARALLEL_SANITIZED" > $@ ; \
echo "" >> $@ ; \
echo "check_interfaces:" >> $@ ; \
echo " @${PERL} testsock.pl > /dev/null 2>&1 || { \\" >> $@ ; \
echo " echo \"I:NOTE: System tests were skipped because they require that the\"; \\" >> $@ ; \
echo " echo \"I: IP addresses 10.53.0.1 through 10.53.0.8 be configured\"; \\" >> $@ ; \
echo " echo \"I: as alias addresses on the loopback interface. Please run\"; \\" >> $@ ; \
echo " echo \"I: \"bin/tests/system/ifconfig.sh up\" as root to configure them.\"; \\" >> $@ ; \
echo " exit 1; \\" >> $@ ; \
echo " }" >> $@ ; \
echo "" >> $@ ; \
echo "test check: $$PARALLEL_SANITIZED" >> $@ ; \
port=$${STARTPORT:-5000} ; \
for directory in $(PARALLEL) ; do \
echo "" >> $@ ; \
echo "test-`echo $$directory | tr _ -`: check_interfaces" >> $@ ; \
echo " @$(SHELL) ./run.sh -r -p $$port $$directory 2>&1 | tee $$directory/test.output" >> $@ ; \
port=`expr $$port + 100` ; \
done
$(SHELL) parallel.sh > parallel.mk
# Targets to run the tests.
......
......@@ -79,13 +79,16 @@ SEQUENTIALDIRS="ecdsa eddsa @PKCS11_TEST@ tkey"
# and 9953). Because separate blocks of ports can be used for teach
# test, these tests can be run in parallel.
#
# This symbol must be kept in step with the PARALLEL macro in Makefile.in
PARALLELDIRS="acl additional addzone allow-query auth autosign \
# Note: some of the longer-running tests such as serve-stale and
# rpzrecurse are scheduled first, in order to get more benefit from
# parallelism.
PARALLELDIRS="dnssec rpzrecurse serve-stale \
acl additional addzone allow-query auth autosign \
builtin cacheclean case catz cds chain \
checkconf checknames checkzone \
@CHECKDS@ @COVERAGE@ @KEYMGR@ \
cookie database digdelv dlv dlz dlzexternal \
dns64 dnssec @DNSTAP@ dscp dsdigest dyndb \
dns64 @DNSTAP@ dscp dsdigest dyndb \
ednscompliance emptyzones \
fetchlimit filter-aaaa formerr forward \
geoip glue idna inline integrity ixfr keepalive \
......@@ -93,9 +96,9 @@ PARALLELDIRS="acl additional addzone allow-query auth autosign \
masterfile masterformat metadata mirror mkeys \
names notify nslookup nsupdate nzd2nzf \
padding pending pipelined qmin \
reclimit redirect resolver rndc rootkeysentinel rpz rpzrecurse \
reclimit redirect resolver rndc rootkeysentinel rpz \
rrchecker rrl rrsetorder rsabigexponent runtime \
serve-stale sfcache smartsign sortlist \
sfcache smartsign sortlist \
spf staticstub statistics statschannel stub synthfromdnssec \
tcp tools tsig tsiggss ttl \
unknown upforwd verify views wildcard \
......
......@@ -100,27 +100,27 @@ SEQUENTIALDIRS="ecdsa eddsa @PKCS11_TEST@ tkey"
# List of tests that use unique ports (other than 5300 and 9953). These
# tests can be run in parallel.
#
# XXX: Note that tests are not currently run in parallel on Windows, so it
# isn't strictly necessary to maintain these as separate lists in this file,
# but using the same variable names as in conf.sh.in may simplify keeping the
# lists in sync.
# Note: some of the longer-running tests such as serve-stale and
# rpzrecurse are scheduled first, in order to get more benefit from
# parallelism.
#
# XXX: removed logfileconfig as it doesn't currently work on windows.
PARALLELDIRS="acl additional addzone allow-query auth autosign \
PARALLELDIRS="dnssec rpzrecurse serve-stale \
acl additional addzone allow-query auth autosign \
builtin cacheclean case catz cds chain \
checkconf checknames checkzone \
@CHECKDS@ @COVERAGE@ @KEYMGR@ \
cookie database digdelv dlv dlz dlzexternal \
dns64 dnssec @DNSTAP@ dscp dsdigest dyndb \
dns64 @DNSTAP@ dscp dsdigest dyndb \
ednscompliance emptyzones \
fetchlimit filter-aaaa formerr forward \
geoip glue idna inline integrity ixfr keepalive \
legacy limits masterfile masterformat metadata mirror mkeys \
names notify nslookup nsupdate nzd2nzf \
padding pending pipelined qmin \
reclimit redirect resolver rndc rootkeysentinel rpz rpzrecurse \
reclimit redirect resolver rndc rootkeysentinel rpz \
rrchecker rrl rrsetorder rsabigexponent runtime \
serve-stale sfcache smartsign sortlist \
sfcache smartsign sortlist \
spf staticstub statistics statschannel stub synthfromdnssec \
tcp tools tsig tsiggss ttl \
unknown upforwd verify views wildcard \
......
#!/bin/sh
#
# Copyright (C) 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/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
. ./conf.sh
PARALLELS=`echo $PARALLELDIRS | sed "s|\([^ ][^ ]*\)|test-\1|g;" | tr _ -`
echo ".PHONY: $PARALLELS"
echo
echo "check_interfaces:"
echo " @${PERL} testsock.pl > /dev/null 2>&1 || { \\"
echo " echo \"I:NOTE: System tests were skipped because they require the\"; \\"
echo " echo \"I: test IP addresses 10.53.0.* to be configured as alias\"; \\"
echo " echo \"I: addresses on the loopback interface. Please run\"; \\"
echo " echo \"I: \"bin/tests/system/ifconfig.sh up\" as root to configure them.\"; \\"
echo " exit 1; \\"
echo " }"
echo
echo "test check: $PARALLELS"
port=${STARTPORT:-5000}
for directory in $PARALLELDIRS ; do
echo
echo "test-`echo $directory | tr _ -`: check_interfaces"
echo " @${SHELL} ./run.sh -r -p $port $directory 2>&1 | tee $directory/test.output"
port=`expr $port + 100`
done
......@@ -68,21 +68,29 @@ export SYSTEMTEST_FORCE_COLOR
export SYSTEMTEST_NO_CLEAN
status=0
if [ "$CYGWIN" = "" ]; then
# Running on Unix, use "make" to run tests in parallel.
make -j $numproc check
status=$?
if [ "$NOPARALLEL" = "" ]; then
if [ "$CYGWIN" = "" ]; then
# Running on Unix, use "make" to run tests in parallel.
make -j $numproc check
status=$?
else
# Running on Windows: Cygwin "make" is available, but isn't being
# used for the build. So we create a special makefile for the purpose
# of parallel execution of system tests, and use that.
$SHELL parallel.sh > parallel.mk
make -f parallel.mk -j $numproc check || status=$?
$SHELL ./runsequential.sh -r || status=$?
$SHELL ./testsummary.sh
fi
else
# Running on Windows: no "make" available, so ensure test interfaces are up
# and then run the tests sequentially. (This is simpler than working out
# where "nmake" is likely to be found. Besides, "nmake" does not support
# parallel execution so if "nmake" is used, the tests would be run
# sequentially anyway.)
# the NOPARALLEL environment variable indicates that tests must be
# run sequentially.
$PERL testsock.pl || {
cat <<-EOF
I:NOTE: System tests were skipped because they require that the
I: IP addresses 10.53.0.1 through 10.53.0.8 be configured
I: as alias addresses on the loopback interface. Please run
I:NOTE: System tests were skipped because they require the
I: test IP addresses 10.53.0.* to be configured as alias
I: addresses on the loopback interface. Please run
I: "bin/tests/system/ifconfig.sh up" as root to configure them.
EOF
exit 1
......@@ -93,4 +101,5 @@ else
done
} 2>&1 | tee "systests.output"
fi
exit $status
......@@ -877,6 +877,7 @@
./bin/tests/system/padding/clean.sh SH 2017,2018,2019
./bin/tests/system/padding/setup.sh SH 2017,2018,2019
./bin/tests/system/padding/tests.sh SH 2017,2018,2019
./bin/tests/system/parallel.sh SH 2019
./bin/tests/system/pending/clean.sh SH 2009,2012,2014,2016,2018,2019
./bin/tests/system/pending/ns1/sign.sh SH 2009,2010,2012,2014,2016,2018,2019
./bin/tests/system/pending/ns2/sign.sh SH 2009,2010,2012,2014,2016,2017,2018,2019
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment