diff --git a/configure.ac b/configure.ac index 56a57441f1..39a426da43 100644 --- a/configure.ac +++ b/configure.ac @@ -751,6 +751,7 @@ AC_OUTPUT([doc/version.ent tests/system/conf.sh tests/system/glue/setup.sh tests/system/glue/nsx1/b10-config.db + tests/system/bindctl/nsx1/b10-config.db.template ], [ chmod +x src/bin/cmdctl/run_b10-cmdctl.sh chmod +x src/bin/xfrin/run_b10-xfrin.sh diff --git a/tests/system/Makefile.am b/tests/system/Makefile.am index efd5d7fdb4..663258b437 100644 --- a/tests/system/Makefile.am +++ b/tests/system/Makefile.am @@ -7,7 +7,10 @@ distclean-local: # Most of the files under this directory (including test subdirectories) # must be listed in EXTRA_DIST. EXTRA_DIST = README cleanall.sh ifconfig.sh start.pl stop.pl run.sh runall.sh +EXTRA_DIST += common/default_user.csv EXTRA_DIST += glue/auth.good glue/example.good glue/noglue.good glue/test.good EXTRA_DIST += glue/tests.sh glue/clean.sh EXTRA_DIST += glue/nsx1/com.db glue/nsx1/net.db glue/nsx1/root-servers.nil.db EXTRA_DIST += glue/nsx1/root.db +EXTRA_DIST += bindctl/tests.sh bindctl/clean.sh bindctl/setup.sh +EXTRA_DIST += bindctl/nsx1/root.db bindctl/nsx1/example-normalized.db diff --git a/tests/system/README b/tests/system/README index 080652d508..a43d49edb4 100644 --- a/tests/system/README +++ b/tests/system/README @@ -18,6 +18,7 @@ set to point to the top directory of the source tree. There are multiple test suites, each in a separate subdirectory and involving a different DNS setup. They are: + bindctl/ Some basic management operations using the bindctl tool glue/ Glue handling tests (the following tests are planned to be added soon) dnssec/ DNSSEC tests diff --git a/tests/system/bindctl/clean.sh b/tests/system/bindctl/clean.sh new file mode 100755 index 0000000000..30d68881c5 --- /dev/null +++ b/tests/system/bindctl/clean.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000, 2001 Internet Software Consortium. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +# +# Clean up after glue tests. +# + +rm -f */b10-config.db +rm -f dig.out.* bindctl.out.* +rm -f */msgq_socket */zone.sqlite3 diff --git a/tests/system/bindctl/nsx1/b10-config.db.template.in b/tests/system/bindctl/nsx1/b10-config.db.template.in new file mode 100644 index 0000000000..162329a085 --- /dev/null +++ b/tests/system/bindctl/nsx1/b10-config.db.template.in @@ -0,0 +1,10 @@ +{"version": 2, + "Auth": { + "listen_on": [{"address": "10.53.0.1", "port": 53210}], + "database_file": "@abs_builddir@/zone.sqlite3", + "statistics-interval": 1 + }, + "Xfrout": { + "log_file": "@abs_builddir@/Xfrout.log" + } +} diff --git a/tests/system/bindctl/nsx1/example-normalized.db b/tests/system/bindctl/nsx1/example-normalized.db new file mode 100644 index 0000000000..712952209b --- /dev/null +++ b/tests/system/bindctl/nsx1/example-normalized.db @@ -0,0 +1,3 @@ +com. 300 IN SOA postmaster.example. ns.example.com. 2000042100 600 600 1200 600 +com. 300 IN NS ns.example.com. +ns.example.com. 300 IN A 192.0.2.2 diff --git a/tests/system/bindctl/nsx1/root.db b/tests/system/bindctl/nsx1/root.db new file mode 100644 index 0000000000..31293deaf3 --- /dev/null +++ b/tests/system/bindctl/nsx1/root.db @@ -0,0 +1,25 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000, 2001 Internet Software Consortium. +; +; Permission to use, copy, modify, and/or distribute this software for any +; purpose with or without fee is hereby granted, provided that the above +; copyright notice and this permission notice appear in all copies. +; +; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +; PERFORMANCE OF THIS SOFTWARE. + +$TTL 300 +. IN SOA postmaster.example. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS ns.example.com. +ns.example.com. A 192.0.2.1 diff --git a/tests/system/bindctl/setup.sh b/tests/system/bindctl/setup.sh new file mode 100755 index 0000000000..55afcc10c9 --- /dev/null +++ b/tests/system/bindctl/setup.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +SUBTEST_TOP=${TEST_TOP}/bindctl + +cp ${SUBTEST_TOP}/nsx1/b10-config.db.template ${SUBTEST_TOP}/nsx1/b10-config.db + +rm -f ${SUBTEST_TOP}/*/zone.sqlite3 +${B10_LOADZONE} -o . -d ${SUBTEST_TOP}/nsx1/zone.sqlite3 \ + ${SUBTEST_TOP}//nsx1/root.db diff --git a/tests/system/bindctl/tests.sh b/tests/system/bindctl/tests.sh new file mode 100755 index 0000000000..689c5b87ff --- /dev/null +++ b/tests/system/bindctl/tests.sh @@ -0,0 +1,94 @@ +#!/bin/sh +# +# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +# +# Do bindctl tests. +# + +status=0 +n=0 + +echo "I:Checking b10-auth is working by default ($n)" +$DIG +norec @10.53.0.1 -p 53210 ns.example.com. A >dig.out.$n || status=1 +# perform a simple check on the output (digcomp would be too much for this) +grep 192.0.2.1 dig.out.$n > /dev/null || status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:Checking BIND 10 statistics after a pose ($n)" +# wait for 2sec to make sure b10-stats gets the latest statistics. +# note that we set statistics-interval to 1. +sleep 2 +echo 'Stats show\n' | $RUN_BINDCTL \ + --csv-file-dir=$BINDCTL_CSV_DIR > bindctl.out.$n || status=1 +# the server should have received 1 UDP and 1 TCP queries (TCP query was +# sent from the server startup script) +grep "\"auth.queries.tcp\": 1," bindctl.out.$n > /dev/null || status=1 +grep "\"auth.queries.udp\": 1," bindctl.out.$n > /dev/null || status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:Stopping b10-auth and checking that ($n)" +echo 'config set Boss/start_auth false\nconfig commit\nquit\n' | $RUN_BINDCTL \ + --csv-file-dir=$BINDCTL_CSV_DIR 2>&1 > /dev/null || status=1 +# dig should exit with a failure code. +$DIG +tcp +norec @10.53.0.1 -p 53210 ns.example.com. A && status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:Restarting b10-auth and checking that ($n)" +echo 'config set Boss/start_auth true\nconfig commit\nquit\n' | $RUN_BINDCTL \ + --csv-file-dir=$BINDCTL_CSV_DIR 2>&1 > /dev/null || status=1 +$DIG +norec @10.53.0.1 -p 53210 ns.example.com. A >dig.out.$n || status=1 +grep 192.0.2.1 dig.out.$n > /dev/null || status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:Rechecking BIND 10 statistics after a pose ($n)" +sleep 2 +echo 'Stats show\n' | $RUN_BINDCTL \ + --csv-file-dir=$BINDCTL_CSV_DIR > bindctl.out.$n || status=1 +# The statistics counters should have been reset while stop/start. +grep "\"auth.queries.tcp\": 0," bindctl.out.$n > /dev/null || status=1 +grep "\"auth.queries.udp\": 1," bindctl.out.$n > /dev/null || status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:Changing the data source from sqlite3 to in-memory ($n)" +DATASRC_SPEC='[{"type": "memory", "zones": [{"origin": "com","file":' +DATASRC_SPEC="${DATASRC_SPEC} \"${TEST_TOP}/bindctl/nsx1/example-normalized.db\"}]}]" +echo "config set Auth/datasources ${DATASRC_SPEC}\nconfig commit\nquit\n" | $RUN_BINDCTL \ + --csv-file-dir=$BINDCTL_CSV_DIR > bindctl.out.$n || status=1 +$DIG +norec @10.53.0.1 -p 53210 ns.example.com. A >dig.out.$n || status=1 +grep 192.0.2.2 dig.out.$n > /dev/null || status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:Rechecking BIND 10 statistics after changing the datasource ($n)" +sleep 2 +echo 'Stats show\n' | $RUN_BINDCTL \ + --csv-file-dir=$BINDCTL_CSV_DIR > bindctl.out.$n || status=1 +# The statistics counters shouldn't be reset due to hot-swapping datasource. +grep "\"auth.queries.tcp\": 0," bindctl.out.$n > /dev/null || status=1 +grep "\"auth.queries.udp\": 2," bindctl.out.$n > /dev/null || status=1 +if [ $status != 0 ]; then echo "I:failed"; fi +n=`expr $n + 1` + +echo "I:exit status: $status" +exit $status diff --git a/tests/system/common/default_user.csv b/tests/system/common/default_user.csv new file mode 100644 index 0000000000..e13e194eed --- /dev/null +++ b/tests/system/common/default_user.csv @@ -0,0 +1 @@ +root,bind10 diff --git a/tests/system/conf.sh.in b/tests/system/conf.sh.in index 29d959aee3..66aa3f5a29 100755 --- a/tests/system/conf.sh.in +++ b/tests/system/conf.sh.in @@ -34,10 +34,13 @@ if [ -z $BIND9_TOP ]; then exit 1 fi -# Find the top of the source tree. +# Find the top of the source and test trees. TOP=@abs_top_srcdir@ +TEST_TOP=@abs_builddir@ RUN_BIND10=$TOP/src/bin/bind10/run_bind10.sh +RUN_BINDCTL=$TOP/src/bin/bindctl/run_bindctl.sh +BINDCTL_CSV_DIR=@abs_srcdir@/common/ B10_LOADZONE=$TOP/src/bin/loadzone/run_loadzone.sh BIND9_NAMED=$BIND9_TOP/bin/named/named DIG=$BIND9_TOP/bin/dig/dig @@ -45,8 +48,8 @@ DIG=$BIND9_TOP/bin/dig/dig TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl -SUBDIRS="glue" -#SUBDIRS="dnssec glue masterfile xfer" +SUBDIRS="bindctl glue" +#SUBDIRS="dnssec masterfile xfer" # PERL will be an empty string if no perl interpreter was found. PERL=@PERL@