diff options
Diffstat (limited to '')
-rw-r--r-- | bin/tests/system/notify/tests.sh | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/bin/tests/system/notify/tests.sh b/bin/tests/system/notify/tests.sh new file mode 100644 index 0000000..c02654e --- /dev/null +++ b/bin/tests/system/notify/tests.sh @@ -0,0 +1,242 @@ +#!/bin/sh + +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# 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 https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="+tcp +noadd +nosea +nostat +noquest +nocomm +nocmd -p ${PORT}" +RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" + +status=0 +n=0 + +# +# Wait up to 10 seconds for the servers to finish starting before testing. +# +for i in 1 2 3 4 5 6 7 8 9 10 +do + ret=0 + $DIG +tcp -p ${PORT} example @10.53.0.2 soa > dig.out.ns2.test$n || ret=1 + grep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1 + grep "flags:.* aa[ ;]" dig.out.ns2.test$n > /dev/null || ret=1 + $DIG +tcp -p ${PORT} example @10.53.0.3 soa > dig.out.ns3.test$n || ret=1 + grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1 + grep "flags:.* aa[ ;]" dig.out.ns3.test$n > /dev/null || ret=1 + nr=`grep 'x[0-9].*sending notify to' ns2/named.run | wc -l` + [ $nr -eq 20 ] || ret=1 + [ $ret = 0 ] && break + sleep 1 +done + +n=`expr $n + 1` +echo_i "checking initial status ($n)" +ret=0 +$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +grep "10.0.0.1" dig.out.ns2.test$n > /dev/null || ret=1 + +$DIG $DIGOPTS a.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +grep "10.0.0.1" dig.out.ns3.test$n > /dev/null || ret=1 + +digcomp dig.out.ns2.test$n dig.out.ns3.test$n || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking startup notify rate limit ($n)" +ret=0 +awk '/x[0-9].*sending notify to/ { + split($2, a, ":"); + this = a[1] * 3600 + a[2] * 60 + a[3]; + if (lasta1 && lasta1 > a[1]) { + fix = 3600 * 24; + } + this += fix; + if (last) { + delta = this - last; + print delta; + + total += delta; + if (!maxdelta || delta > maxdelta) { + maxdelta = delta; + } + if (!mindelta || delta < mindelta) { + mindelta = delta; + } + } + lasta1 = a[1]; + last = this; + count++; +} +END { + average = total / count; + print "mindelta:", mindelta; + print "maxdelta:" maxdelta; + print "count:", count; + print "average:", average; + if (average < 0.180) exit(1); + if (count < 20) exit(1); +}' ns2/named.run > awk.out.ns2.test$n || ret=1 +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +nextpart ns3/named.run > /dev/null + +sleep 1 # make sure filesystem time stamp is newer for reload. +rm -f ns2/example.db +cp -f ns2/example2.db ns2/example.db +if [ ! "$CYGWIN" ]; then + echo_i "reloading with example2 using HUP and waiting up to 45 seconds" + $KILL -HUP `cat ns2/named.pid` +else + echo_i "reloading with example2 using rndc and waiting up to 45 seconds" + rndc_reload ns2 10.53.0.2 +fi + +try=0 +while test $try -lt 45 +do + nextpart ns3/named.run > tmp + grep "transfer of 'example/IN' from 10.53.0.2#.*success" tmp > /dev/null && break + sleep 1 + try=`expr $try + 1` +done + +n=`expr $n + 1` +echo_i "checking notify message was logged ($n)" +ret=0 +grep 'notify from 10.53.0.2#[0-9][0-9]*: serial 2$' ns3/named.run > /dev/null || ret=1 +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking example2 loaded ($n)" +ret=0 +$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +grep "10.0.0.2" dig.out.ns2.test$n > /dev/null || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking example2 contents have been transferred after HUP reload ($n)" +ret=0 +$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +grep "10.0.0.2" dig.out.ns2.test$n > /dev/null || ret=1 + +$DIG $DIGOPTS a.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +grep "10.0.0.2" dig.out.ns3.test$n > /dev/null || ret=1 + +digcomp dig.out.ns2.test$n dig.out.ns3.test$n || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +echo_i "stopping master and restarting with example4 then waiting up to 45 seconds" +stop_server ns2 + +rm -f ns2/example.db +cp -f ns2/example4.db ns2/example.db + +start_server --noclean --restart --port "${PORT}" ns2 + +try=0 +while test $try -lt 45 +do + nextpart ns3/named.run > tmp + grep "transfer of 'example/IN' from 10.53.0.2#.*success" tmp > /dev/null && break + sleep 1 + try=`expr $try + 1` +done + +n=`expr $n + 1` +echo_i "checking notify message was logged ($n)" +ret=0 +grep 'notify from 10.53.0.2#[0-9][0-9]*: serial 4$' ns3/named.run > /dev/null || ret=1 +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking example4 loaded ($n)" +ret=0 +$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +grep "10.0.0.4" dig.out.ns2.test$n > /dev/null || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking example4 contents have been transferred after restart ($n)" +ret=0 +$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +grep "10.0.0.4" dig.out.ns2.test$n > /dev/null || ret=1 + +$DIG $DIGOPTS a.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +grep "10.0.0.4" dig.out.ns3.test$n > /dev/null || ret=1 + +digcomp dig.out.ns2.test$n dig.out.ns3.test$n || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking notify to alternate port with master inheritance ($n)" +$NSUPDATE << EOF +server 10.53.0.2 ${PORT} +zone x21 +update add added.x21 0 in txt "test string" +send +EOF +for i in 1 2 3 4 5 6 7 8 9 +do + $DIG $DIGOPTS added.x21. @10.53.0.4 txt -p $EXTRAPORT1 > dig.out.ns4.test$n || ret=1 + grep "test string" dig.out.ns4.test$n > /dev/null && break + sleep 1 +done +grep "test string" dig.out.ns4.test$n > /dev/null || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +n=`expr $n + 1` +echo_i "checking notify to multiple views using tsig ($n)" +ret=0 +$NSUPDATE << EOF +server 10.53.0.5 ${PORT} +zone x21 +key a aaaaaaaaaaaaaaaaaaaa +update add added.x21 0 in txt "test string" +send +EOF + +for i in 1 2 3 4 5 6 7 8 9 +do + $DIG $DIGOPTS added.x21. -y b:bbbbbbbbbbbbbbbbbbbb @10.53.0.5 \ + txt > dig.out.b.ns5.test$n || ret=1 + $DIG $DIGOPTS added.x21. -y c:cccccccccccccccccccc @10.53.0.5 \ + txt > dig.out.c.ns5.test$n || ret=1 + grep "test string" dig.out.b.ns5.test$n > /dev/null && + grep "test string" dig.out.c.ns5.test$n > /dev/null && + break + sleep 1 +done +grep "test string" dig.out.b.ns5.test$n > /dev/null || ret=1 +grep "test string" dig.out.c.ns5.test$n > /dev/null || ret=1 +grep "sending notify to 10.53.0.5#[0-9]* : TSIG (b)" ns5/named.run > /dev/null || ret=1 +grep "sending notify to 10.53.0.5#[0-9]* : TSIG (c)" ns5/named.run > /dev/null || ret=1 + +[ $ret = 0 ] || echo_i "failed" +status=`expr $ret + $status` + +echo_i "exit status: $status" +[ $status -eq 0 ] || exit 1 |