diff options
Diffstat (limited to '')
-rw-r--r-- | bin/tests/system/logfileconfig/tests.sh | 364 |
1 files changed, 364 insertions, 0 deletions
diff --git a/bin/tests/system/logfileconfig/tests.sh b/bin/tests/system/logfileconfig/tests.sh new file mode 100644 index 0000000..ad63bdd --- /dev/null +++ b/bin/tests/system/logfileconfig/tests.sh @@ -0,0 +1,364 @@ +#!/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. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh +THISDIR=`pwd` +CONFDIR="ns1" + +PLAINCONF="${THISDIR}/${CONFDIR}/named.plainconf" +PLAINFILE="named_log" +DIRCONF="${THISDIR}/${CONFDIR}/named.dirconf" +DIRFILE="named_dir" +PIPECONF="${THISDIR}/${CONFDIR}/named.pipeconf" +PIPEFILE="named_pipe" +SYMCONF="${THISDIR}/${CONFDIR}/named.symconf" +SYMFILE="named_sym" +VERSCONF="${THISDIR}/${CONFDIR}/named.versconf" +VERSFILE="named_vers" +UNLIMITEDCONF="${THISDIR}/${CONFDIR}/named.unlimited" +UNLIMITEDFILE="named_unlimited" +DLFILE="named_deflog" + +PIDFILE="${THISDIR}/${CONFDIR}/named.pid" +myRNDC="$RNDC -c ${THISDIR}/${CONFDIR}/rndc.conf" +myNAMED="$NAMED -c ${THISDIR}/${CONFDIR}/named.conf -m record,size,mctx -T clienttest -T nosyslog -d 99 -X named.lock -U 4" + +# Test given condition. If true, test again after a second. Used for testing +# filesystem-dependent conditions in order to prevent false negatives caused by +# directory contents not being synchronized immediately after rename() returns. +test_with_retry() { + if test "$@"; then + sleep 1 + if test "$@"; then + return 0 + fi + fi + return 1 +} + +waitforpidfile() { + for _w in 1 2 3 4 5 6 7 8 9 10 + do + test -f $PIDFILE && break + sleep 1 + done +} + +status=0 +n=0 + +cd $CONFDIR + +echo_i "testing log file validity (named -g + only plain files allowed)" + +n=`expr $n + 1` +echo_i "testing plain file (named -g) ($n)" +# First run with a known good config. +echo > $PLAINFILE +copy_setports $PLAINCONF named.conf +$myRNDC reconfig > rndc.out.test$n 2>&1 +grep "reloading configuration failed" named.run > /dev/null 2>&1 +if [ $? -ne 0 ] +then + echo_i "testing plain file succeeded" +else + echo_i "testing plain file failed (unexpected)" + echo_i "exit status: 1" + exit 1 +fi + +# Now try directory, expect failure +n=`expr $n + 1` +echo_i "testing directory as log file (named -g) ($n)" +echo > named.run +rm -rf $DIRFILE +mkdir -p $DIRFILE >/dev/null 2>&1 +if [ $? -eq 0 ] +then + copy_setports $DIRCONF named.conf + echo > named.run + $myRNDC reconfig > rndc.out.test$n 2>&1 + grep "checking logging configuration failed: invalid file" named.run > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo_i "testing directory as file succeeded (UNEXPECTED)" + echo_i "exit status: 1" + exit 1 + else + echo_i "testing directory as log file failed (expected)" + fi +else + echo_i "skipping directory test (unable to create directory)" +fi + +# Now try pipe file, expect failure +n=`expr $n + 1` +echo_i "testing pipe file as log file (named -g) ($n)" +echo > named.run +rm -f $PIPEFILE +mkfifo $PIPEFILE >/dev/null 2>&1 +if [ $? -eq 0 ] +then + copy_setports $PIPECONF named.conf + echo > named.run + $myRNDC reconfig > rndc.out.test$n 2>&1 + grep "checking logging configuration failed: invalid file" named.run > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo_i "testing pipe file as log file succeeded (UNEXPECTED)" + echo_i "exit status: 1" + exit 1 + else + echo_i "testing pipe file as log file failed (expected)" + fi +else + echo_i "skipping pipe test (unable to create pipe)" +fi + +# Now try symlink file to plain file, expect success +n=`expr $n + 1` +echo_i "testing symlink to plain file as log file (named -g) ($n)" +# Assume success +echo > named.run +echo > $PLAINFILE +rm -f $SYMFILE $SYMFILE +ln -s $PLAINFILE $SYMFILE >/dev/null 2>&1 +if [ $? -eq 0 ] +then + copy_setports $SYMCONF named.conf + $myRNDC reconfig > rndc.out.test$n 2>&1 + echo > named.run + grep "reloading configuration failed" named.run > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo_i "testing symlink to plain file succeeded" + else + echo_i "testing symlink to plain file failed (unexpected)" + echo_i "exit status: 1" + exit 1 + fi +else + echo_i "skipping symlink test (unable to create symlink)" +fi +# Stop the server and run through a series of tests with various config +# files while controlling the stop/start of the server. +# Have to stop the stock server because it uses "-g" +# +$PERL ../../stop.pl .. ns1 + +$myNAMED > /dev/null 2>&1 + +if [ $? -ne 0 ] +then + echo_i "failed to start $myNAMED" + echo_i "exit status: $status" + exit $status +fi + +status=0 + +echo_i "testing log file validity (only plain files allowed)" + +n=`expr $n + 1` +echo_i "testing plain file (named -g) ($n)" +# First run with a known good config. +echo > $PLAINFILE +copy_setports $PLAINCONF named.conf +$myRNDC reconfig > rndc.out.test$n 2>&1 +grep "reloading configuration failed" named.run > /dev/null 2>&1 +if [ $? -ne 0 ] +then + echo_i "testing plain file succeeded" +else + echo_i "testing plain file failed (unexpected)" + echo_i "exit status: 1" + exit 1 +fi + +# Now try directory, expect failure +n=`expr $n + 1` +echo_i "testing directory as log file ($n)" +echo > named.run +rm -rf $DIRFILE +mkdir -p $DIRFILE >/dev/null 2>&1 +if [ $? -eq 0 ] +then + copy_setports $DIRCONF named.conf + echo > named.run + $myRNDC reconfig > rndc.out.test$n 2>&1 + grep "configuring logging: invalid file" named.run > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo_i "testing directory as file succeeded (UNEXPECTED)" + echo_i "exit status: 1" + exit 1 + else + echo_i "testing directory as log file failed (expected)" + fi +else + echo_i "skipping directory test (unable to create directory)" +fi + +# Now try pipe file, expect failure +n=`expr $n + 1` +echo_i "testing pipe file as log file ($n)" +echo > named.run +rm -f $PIPEFILE +mkfifo $PIPEFILE >/dev/null 2>&1 +if [ $? -eq 0 ] +then + copy_setports $PIPECONF named.conf + echo > named.run + $myRNDC reconfig > rndc.out.test$n 2>&1 + grep "configuring logging: invalid file" named.run > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo_i "testing pipe file as log file succeeded (UNEXPECTED)" + echo_i "exit status: 1" + exit 1 + else + echo_i "testing pipe file as log file failed (expected)" + fi +else + echo_i "skipping pipe test (unable to create pipe)" +fi + +# Now try symlink file to plain file, expect success +n=`expr $n + 1` +echo_i "testing symlink to plain file as log file ($n)" +# Assume success +status=0 +echo > named.run +echo > $PLAINFILE +rm -f $SYMFILE +ln -s $PLAINFILE $SYMFILE >/dev/null 2>&1 +if [ $? -eq 0 ] +then + copy_setports $SYMCONF named.conf + $myRNDC reconfig > rndc.out.test$n 2>&1 + echo > named.run + grep "reloading configuration failed" named.run > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo_i "testing symlink to plain file succeeded" + else + echo_i "testing symlink to plain file failed (unexpected)" + echo_i "exit status: 1" + exit 1 + fi +else + echo_i "skipping symlink test (unable to create symlink)" +fi + +status=0 + +n=`expr $n + 1` +echo_i "testing default logfile using named -L file ($n)" +# Now stop the server again and test the -L option +rm -f $DLFILE +$PERL ../../stop.pl .. ns1 +if ! test -f $PIDFILE; then + copy_setports $PLAINCONF named.conf + $myNAMED -L $DLFILE > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo_i "failed to start $myNAMED" + echo_i "exit status: $status" + exit $status + fi + + waitforpidfile + + sleep 1 + if [ -f "$DLFILE" ]; then + echo_i "testing default logfile using named -L succeeded" + else + echo_i "testing default logfile using named -L failed" + echo_i "exit status: 1" + exit 1 + fi +else + echo_i "failed to cleanly stop $myNAMED" + echo_i "exit status: 1" + exit 1 +fi + +echo_i "testing logging functionality" + +n=`expr $n + 1` +echo_i "testing explicit versions ($n)" +copy_setports $VERSCONF named.conf +# a seconds since epoch version number +touch $VERSFILE.1480039317 +t1=`$PERL -e 'print time()."\n";'` +$myRNDC reconfig > rndc.out.test$n 2>&1 +$DIG version.bind txt ch @10.53.0.1 -p ${PORT} > dig.out.test$n +t2=`$PERL -e 'print time()."\n";'` +t=`expr ${t2:-0} - ${t1:-0}` +if test ${t:-1000} -gt 5 +then + echo_i "testing explicit versions failed: cleanup of old entries took too long ($t secs)" + status=`expr $status + 1` +fi +if ! grep "status: NOERROR" dig.out.test$n > /dev/null +then + echo_i "testing explicit versions failed: DiG lookup failed" + status=`expr $status + 1` +fi +if test_with_retry -f $VERSFILE.1480039317 +then + echo_i "testing explicit versions failed: $VERSFILE.1480039317 not removed" + status=`expr $status + 1` +fi +if test_with_retry -f $VERSFILE.5 +then + echo_i "testing explicit versions failed: $VERSFILE.5 exists" + status=`expr $status + 1` +fi +if test_with_retry ! -f $VERSFILE.4 +then + echo_i "testing explicit versions failed: $VERSFILE.4 does not exist" + status=`expr $status + 1` +fi + +n=`expr $n + 1` +echo_i "testing unlimited versions ($n)" +copy_setports $UNLIMITEDCONF named.conf +# a seconds since epoch version number +touch $UNLIMITEDFILE.1480039317 +t1=`$PERL -e 'print time()."\n";'` +$myRNDC reconfig > rndc.out.test$n 2>&1 +$DIG version.bind txt ch @10.53.0.1 -p ${PORT} > dig.out.test$n +t2=`$PERL -e 'print time()."\n";'` +t=`expr ${t2:-0} - ${t1:-0}` +if test ${t:-1000} -gt 5 +then + echo_i "testing unlimited versions failed: took too long ($t secs)" + status=`expr $status + 1` +fi +if ! grep "status: NOERROR" dig.out.test$n > /dev/null +then + echo_i "testing unlimited versions failed: DiG lookup failed" + status=`expr $status + 1` +fi +if test_with_retry ! -f $UNLIMITEDFILE.1480039317 +then + echo_i "testing unlimited versions failed: $UNLIMITEDFILE.1480039317 removed" + status=`expr $status + 1` +fi +if test_with_retry ! -f $UNLIMITEDFILE.4 +then + echo_i "testing unlimited versions failed: $UNLIMITEDFILE.4 does not exist" + status=`expr $status + 1` +fi + +echo_i "exit status: $status" +[ $status -eq 0 ] || exit 1 |