1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt#!/bin/sh
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt#
dce54b9b5cfa450570fe9c11644450aeb3ee89f3Tinderbox User# Copyright (C) 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# file, You can obtain one at http://mozilla.org/MPL/2.0/.
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan HuntSYSTEMTESTTOP=..
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt. $SYSTEMTESTTOP/conf.sh
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan HuntDIGCMD="$DIG @10.53.0.3 -p 5300 +tries=1 +time=1"
1479200aa05414b2acf33607dbd1682c16f58c51Evan HuntRNDCCMD="$RNDC -p 9953 -s 10.53.0.3 -c ../common/rndc.conf"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntburst() {
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt num=${3:-20}
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt rm -f burst.input.$$
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt while [ $num -gt 0 ]; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt num=`expr $num - 1`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt echo "${num}${1}${2}.lamesub.example A" >> burst.input.$$
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt done
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt $PERL ../ditch.pl -p 5300 -s 10.53.0.3 burst.input.$$
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt rm -f burst.input.$$
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt}
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstat() {
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt clients=`$RNDCCMD status | grep "recursive clients" |
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sed 's;.*: \([^/][^/]*\)/.*;\1;'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt echo "I: clients: $clients"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ "$clients" = "" ] && return 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ "$clients" -le $1 ]
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt}
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: checking recursing clients are dropped at the per-server limit"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntret=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt# make the server lame and restart
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD flush
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunttouch ans4/norespond
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt burst a $try
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt # fetches-per-server is at 400, but at 20qps against a lame server,
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt # we'll reach 200 at the tenth second, and the quota should have been
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt # tuned to less than that by then
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt stat 200 || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ $ret -eq 1 ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: dumping ADB data"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD dumpdb -adb
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntinfo=`grep '10.53.0.4' ns3/named_dump.db | sed 's/.*\(atr [.0-9]*\).*\(quota [0-9]*\).*/I: \1 \2/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho $info
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntset -- $info
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntquota=$5
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ ${5:-200} -lt 200 ] || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: checking servfail statistics"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntrm -f ns3/named.stats
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD stats
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ -f ns3/named.stats ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntsspill=`grep 'spilled due to server' ns3/named.stats | sed 's/\([0-9][0-9]*\) spilled.*/\1/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ -z "$sspill" ] && sspill=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfails=`grep 'queries resulted in SERVFAIL' ns3/named.stats | sed 's/\([0-9][0-9]*\) queries.*/\1/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ -z "$fails" ] && fails=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ "$fails" -ge "$sspill" ] || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: checking lame server recovery"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntret=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntrm -f ans4/norespond
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt burst b $try
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt stat 200 || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ $ret -eq 1 ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: dumping ADB data"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD dumpdb -adb
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntinfo=`grep '10.53.0.4' ns3/named_dump.db | sed 's/.*\(atr [.0-9]*\).*\(quota [0-9]*\).*/I: \1 \2/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho $info
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntset -- $info
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ ${5:-${quota}} -lt $quota ] || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntquota=$5
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5 6 7 8 9 10; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt burst c $try
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt stat 20 || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ $ret -eq 1 ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: dumping ADB data"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD dumpdb -adb
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntinfo=`grep '10.53.0.4' ns3/named_dump.db | sed 's/.*\(atr [.0-9]*\).*\(quota [0-9]*\).*/I: \1 \2/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho $info
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntset -- $info
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ ${5:-${quota}} -gt $quota ] || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntquota=$5
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntcp -f ns3/named2.conf ns3/named.conf
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD reconfig 2>&1 | sed 's/^/I:ns3 /'
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: checking lame server clients are dropped at the per-domain limit"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntret=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfail=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntsuccess=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunttouch ans4/norespond
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt burst b $try 300
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt $DIGCMD a ${try}.example > dig.out.ns3.$try
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt grep "status: NOERROR" dig.out.ns3.$try > /dev/null 2>&1 && \
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt success=`expr $success + 1`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt grep "status: SERVFAIL" dig.out.ns3.$try > /dev/null 2>&1 && \
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt fail=`expr $fail + 1`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt stat 50 || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ $ret -eq 1 ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt $RNDCCMD recursing 2>&1 | sed 's/^/I:ns3 /'
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: $success successful valid queries, $fail SERVFAIL"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: checking drop statistics"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntrm -f ns3/named.stats
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD stats
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ -f ns3/named.stats ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntzspill=`grep 'spilled due to zone' ns3/named.stats | sed 's/\([0-9][0-9]*\) spilled.*/\1/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ -z "$zspill" ] && zspill=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdrops=`grep 'queries dropped' ns3/named.stats | sed 's/\([0-9][0-9]*\) queries.*/\1/'`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ -z "$drops" ] && drops=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ "$drops" -ge "$zspill" ] || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntcp -f ns3/named3.conf ns3/named.conf
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt$RNDCCMD reconfig 2>&1 | sed 's/^/I:ns3 /'
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: checking lame server clients are dropped at the soft limit"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntret=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfail=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntsuccess=0
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunttouch ans4/norespond
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntfor try in 1 2 3 4 5; do
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt burst b $try 400
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt $DIG @10.53.0.3 -p 5300 a ${try}.example > dig.out.ns3.$try
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt stat 360 || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt grep "status: NOERROR" dig.out.ns3.$try > /dev/null 2>&1 && \
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt success=`expr $success + 1`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt grep "status: SERVFAIL" dig.out.ns3.$try > /dev/null 2>&1 && \
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt fail=`expr $fail + 1`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt [ $ret -eq 1 ] && break
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt sleep 1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntdone
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I: $success successful valid queries, $fail SERVFAIL"
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt[ "$success" -eq 5 ] || ret=1
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntif [ $ret != 0 ]; then echo "I: failed"; fi
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntstatus=`expr $status + $ret`
1479200aa05414b2acf33607dbd1682c16f58c51Evan Hunt
1479200aa05414b2acf33607dbd1682c16f58c51Evan Huntecho "I:exit status: $status"
3635d8f9104e70e141a8f191a0e6c1502ceed2f3Mark Andrews[ $status -eq 0 ] || exit 1