xref: /minix3/external/bsd/bind/dist/bin/tests/system/cacheclean/tests.sh (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#!/bin/sh
2*00b67f09SDavid van Moolenbroek#
3*00b67f09SDavid van Moolenbroek# Copyright (C) 2004, 2007, 2011-2014  Internet Systems Consortium, Inc. ("ISC")
4*00b67f09SDavid van Moolenbroek# Copyright (C) 2001  Internet Software Consortium.
5*00b67f09SDavid van Moolenbroek#
6*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any
7*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above
8*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies.
9*00b67f09SDavid van Moolenbroek#
10*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12*00b67f09SDavid van Moolenbroek# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE.
17*00b67f09SDavid van Moolenbroek
18*00b67f09SDavid van Moolenbroek# Id: tests.sh,v 1.10 2011/09/01 05:28:14 marka Exp
19*00b67f09SDavid van Moolenbroek
20*00b67f09SDavid van MoolenbroekSYSTEMTESTTOP=..
21*00b67f09SDavid van Moolenbroek. $SYSTEMTESTTOP/conf.sh
22*00b67f09SDavid van Moolenbroek
23*00b67f09SDavid van Moolenbroekstatus=0
24*00b67f09SDavid van Moolenbroek
25*00b67f09SDavid van MoolenbroekRNDCOPTS="-c ../common/rndc.conf -s 10.53.0.2 -p 9953"
26*00b67f09SDavid van MoolenbroekDIGOPTS="+nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm \
27*00b67f09SDavid van Moolenbroek         +nostat @10.53.0.2 -p 5300"
28*00b67f09SDavid van Moolenbroek
29*00b67f09SDavid van Moolenbroek# fill the cache with nodes from flushtest.example zone
30*00b67f09SDavid van Moolenbroekload_cache () {
31*00b67f09SDavid van Moolenbroek        # empty all existing cache data
32*00b67f09SDavid van Moolenbroek        $RNDC $RNDCOPTS flush
33*00b67f09SDavid van Moolenbroek
34*00b67f09SDavid van Moolenbroek	# load the positive cache entries
35*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS -f - << EOF > /dev/null 2>&1
36*00b67f09SDavid van Moolenbroektxt top1.flushtest.example
37*00b67f09SDavid van Moolenbroektxt second1.top1.flushtest.example
38*00b67f09SDavid van Moolenbroektxt third1.second1.top1.flushtest.example
39*00b67f09SDavid van Moolenbroektxt third2.second1.top1.flushtest.example
40*00b67f09SDavid van Moolenbroektxt second2.top1.flushtest.example
41*00b67f09SDavid van Moolenbroektxt second3.top1.flushtest.example
42*00b67f09SDavid van Moolenbroektxt second1.top2.flushtest.example
43*00b67f09SDavid van Moolenbroektxt second2.top2.flushtest.example
44*00b67f09SDavid van Moolenbroektxt second3.top2.flushtest.example
45*00b67f09SDavid van Moolenbroektxt top3.flushtest.example
46*00b67f09SDavid van Moolenbroektxt second1.top3.flushtest.example
47*00b67f09SDavid van Moolenbroektxt third1.second1.top3.flushtest.example
48*00b67f09SDavid van Moolenbroektxt third2.second1.top3.flushtest.example
49*00b67f09SDavid van Moolenbroektxt third1.second2.top3.flushtest.example
50*00b67f09SDavid van Moolenbroektxt third2.second2.top3.flushtest.example
51*00b67f09SDavid van Moolenbroektxt second3.top3.flushtest.example
52*00b67f09SDavid van MoolenbroekEOF
53*00b67f09SDavid van Moolenbroek
54*00b67f09SDavid van Moolenbroek	# load the negative cache entries
55*00b67f09SDavid van Moolenbroek        # nxrrset:
56*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS a third1.second1.top1.flushtest.example > /dev/null
57*00b67f09SDavid van Moolenbroek        # nxdomain:
58*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS txt top4.flushtest.example > /dev/null
59*00b67f09SDavid van Moolenbroek        # empty nonterminal:
60*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS txt second2.top3.flushtest.example > /dev/null
61*00b67f09SDavid van Moolenbroek
62*00b67f09SDavid van Moolenbroek	# sleep 2 seconds ensure the TTLs will be lower on cached data
63*00b67f09SDavid van Moolenbroek	sleep 2
64*00b67f09SDavid van Moolenbroek}
65*00b67f09SDavid van Moolenbroek
66*00b67f09SDavid van Moolenbroekdump_cache () {
67*00b67f09SDavid van Moolenbroek        rm -f ns2/named_dump.db
68*00b67f09SDavid van Moolenbroek        $RNDC $RNDCOPTS dumpdb -cache _default
69*00b67f09SDavid van Moolenbroek        sleep 1
70*00b67f09SDavid van Moolenbroek}
71*00b67f09SDavid van Moolenbroek
72*00b67f09SDavid van Moolenbroekclear_cache () {
73*00b67f09SDavid van Moolenbroek        $RNDC $RNDCOPTS flush
74*00b67f09SDavid van Moolenbroek}
75*00b67f09SDavid van Moolenbroek
76*00b67f09SDavid van Moolenbroekin_cache () {
77*00b67f09SDavid van Moolenbroek        ttl=`$DIG $DIGOPTS "$@" | awk '{print $2}'`
78*00b67f09SDavid van Moolenbroek        [ -z "$ttl" ] && {
79*00b67f09SDavid van Moolenbroek                ttl=`$DIG $DIGOPTS +noanswer +auth "$@" | awk '{print $2}'`
80*00b67f09SDavid van Moolenbroek                [ "$ttl" -ge 3599 ] && return 1
81*00b67f09SDavid van Moolenbroek                return 0
82*00b67f09SDavid van Moolenbroek        }
83*00b67f09SDavid van Moolenbroek        [ "$ttl" -ge 3599 ] && return 1
84*00b67f09SDavid van Moolenbroek        return 0
85*00b67f09SDavid van Moolenbroek}
86*00b67f09SDavid van Moolenbroek
87*00b67f09SDavid van Moolenbroekecho "I:check correctness of routine cache cleaning"
88*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +tcp +keepopen -b 10.53.0.7 -f dig.batch > dig.out.ns2 || status=1
89*00b67f09SDavid van Moolenbroekgrep ";" dig.out.ns2
90*00b67f09SDavid van Moolenbroek
91*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl --lc dig.out.ns2 knowngood.dig.out || status=1
92*00b67f09SDavid van Moolenbroek
93*00b67f09SDavid van Moolenbroekecho "I:only one tcp socket was used"
94*00b67f09SDavid van Moolenbroektcpclients=`grep "client 10.53.0.7#[0-9]*:" ns2/named.run | awk '{print $4}' | sort | uniq -c | wc -l`
95*00b67f09SDavid van Moolenbroek
96*00b67f09SDavid van Moolenbroektest $tcpclients -eq 1 || { status=1; echo "I:failed"; }
97*00b67f09SDavid van Moolenbroek
98*00b67f09SDavid van Moolenbroekecho "I:reset and check that records are correctly cached initially"
99*00b67f09SDavid van Moolenbroekret=0
100*00b67f09SDavid van Moolenbroekload_cache
101*00b67f09SDavid van Moolenbroekdump_cache
102*00b67f09SDavid van Moolenbroeknrecords=`grep flushtest.example ns2/named_dump.db | grep -v '^;' | egrep '(TXT|ANY)'|  wc -l`
103*00b67f09SDavid van Moolenbroek[ $nrecords -eq 17 ] || { ret=1; echo "I: found $nrecords records expected 17"; }
104*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
105*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
106*00b67f09SDavid van Moolenbroek
107*00b67f09SDavid van Moolenbroekecho "I:check flushing of the full cache"
108*00b67f09SDavid van Moolenbroekret=0
109*00b67f09SDavid van Moolenbroekclear_cache
110*00b67f09SDavid van Moolenbroekdump_cache
111*00b67f09SDavid van Moolenbroeknrecords=`grep flushtest.example ns2/named_dump.db | grep -v '^;' | wc -l`
112*00b67f09SDavid van Moolenbroek[ $nrecords -eq 0 ] || ret=1
113*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
114*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
115*00b67f09SDavid van Moolenbroek
116*00b67f09SDavid van Moolenbroekecho "I:check flushing of individual nodes (interior node)"
117*00b67f09SDavid van Moolenbroekret=0
118*00b67f09SDavid van Moolenbroekclear_cache
119*00b67f09SDavid van Moolenbroekload_cache
120*00b67f09SDavid van Moolenbroek# interior node
121*00b67f09SDavid van Moolenbroekin_cache txt top1.flushtest.example || ret=1
122*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushname top1.flushtest.example
123*00b67f09SDavid van Moolenbroekin_cache txt top1.flushtest.example && ret=1
124*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
125*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
126*00b67f09SDavid van Moolenbroek
127*00b67f09SDavid van Moolenbroekecho "I:check flushing of individual nodes (leaf node, under the interior node)"
128*00b67f09SDavid van Moolenbroekret=0
129*00b67f09SDavid van Moolenbroek# leaf node, under the interior node (should still exist)
130*00b67f09SDavid van Moolenbroekin_cache txt third2.second1.top1.flushtest.example || ret=1
131*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushname third2.second1.top1.flushtest.example
132*00b67f09SDavid van Moolenbroekin_cache txt third2.second1.top1.flushtest.example && ret=1
133*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
134*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
135*00b67f09SDavid van Moolenbroek
136*00b67f09SDavid van Moolenbroekecho "I:check flushing of individual nodes (another leaf node, with both positive and negative cache entries)"
137*00b67f09SDavid van Moolenbroekret=0
138*00b67f09SDavid van Moolenbroek# another leaf node, with both positive and negative cache entries
139*00b67f09SDavid van Moolenbroekin_cache a third1.second1.top1.flushtest.example || ret=1
140*00b67f09SDavid van Moolenbroekin_cache txt third1.second1.top1.flushtest.example || ret=1
141*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushname third1.second1.top1.flushtest.example
142*00b67f09SDavid van Moolenbroekin_cache a third1.second1.top1.flushtest.example && ret=1
143*00b67f09SDavid van Moolenbroekin_cache txt third1.second1.top1.flushtest.example && ret=1
144*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
145*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
146*00b67f09SDavid van Moolenbroek
147*00b67f09SDavid van Moolenbroekecho "I:check flushing a nonexistent name"
148*00b67f09SDavid van Moolenbroekret=0
149*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushname fake.flushtest.example || ret=1
150*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
151*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
152*00b67f09SDavid van Moolenbroek
153*00b67f09SDavid van Moolenbroekecho "I:check flushing of namespaces"
154*00b67f09SDavid van Moolenbroekret=0
155*00b67f09SDavid van Moolenbroekclear_cache
156*00b67f09SDavid van Moolenbroekload_cache
157*00b67f09SDavid van Moolenbroek# flushing leaf node should leave the interior node:
158*00b67f09SDavid van Moolenbroekin_cache txt third1.second1.top1.flushtest.example || ret=1
159*00b67f09SDavid van Moolenbroekin_cache txt top1.flushtest.example || ret=1
160*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushtree third1.second1.top1.flushtest.example
161*00b67f09SDavid van Moolenbroekin_cache txt third1.second1.top1.flushtest.example && ret=1
162*00b67f09SDavid van Moolenbroekin_cache txt top1.flushtest.example || ret=1
163*00b67f09SDavid van Moolenbroekin_cache txt second1.top1.flushtest.example || ret=1
164*00b67f09SDavid van Moolenbroekin_cache txt third2.second1.top1.flushtest.example || ret=1
165*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushtree second1.top1.flushtest.example
166*00b67f09SDavid van Moolenbroekin_cache txt top1.flushtest.example || ret=1
167*00b67f09SDavid van Moolenbroekin_cache txt second1.top1.flushtest.example && ret=1
168*00b67f09SDavid van Moolenbroekin_cache txt third2.second1.top1.flushtest.example && ret=1
169*00b67f09SDavid van Moolenbroek
170*00b67f09SDavid van Moolenbroek# flushing from an empty node should still remove all its children
171*00b67f09SDavid van Moolenbroekin_cache txt second1.top2.flushtest.example || ret=1
172*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushtree top2.flushtest.example
173*00b67f09SDavid van Moolenbroekin_cache txt second1.top2.flushtest.example && ret=1
174*00b67f09SDavid van Moolenbroekin_cache txt second2.top2.flushtest.example && ret=1
175*00b67f09SDavid van Moolenbroekin_cache txt second3.top2.flushtest.example && ret=1
176*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
177*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
178*00b67f09SDavid van Moolenbroek
179*00b67f09SDavid van Moolenbroekecho "I:check flushing a nonexistent namespace"
180*00b67f09SDavid van Moolenbroekret=0
181*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushtree fake.flushtest.example || ret=1
182*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
183*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
184*00b67f09SDavid van Moolenbroek
185*00b67f09SDavid van Moolenbroekecho "I:check the number of cached records remaining"
186*00b67f09SDavid van Moolenbroekret=0
187*00b67f09SDavid van Moolenbroekdump_cache
188*00b67f09SDavid van Moolenbroeknrecords=`grep flushtest.example ns2/named_dump.db | grep -v '^;' | egrep '(TXT|ANY)' |  wc -l`
189*00b67f09SDavid van Moolenbroek[ $nrecords -eq 17 ] || { ret=1; echo "I: found $nrecords records expected 17"; }
190*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
191*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
192*00b67f09SDavid van Moolenbroek
193*00b67f09SDavid van Moolenbroekecho "I:check flushtree clears adb correctly"
194*00b67f09SDavid van Moolenbroekret=0
195*00b67f09SDavid van Moolenbroekload_cache
196*00b67f09SDavid van Moolenbroekdump_cache
197*00b67f09SDavid van Moolenbroekawk '/plain success\/timeout/ {getline; getline; if ($2 == "ns.flushtest.example") exit(0); exit(1); }' ns2/named_dump.db || ret=1
198*00b67f09SDavid van Moolenbroek$RNDC $RNDCOPTS flushtree flushtest.example || ret=1
199*00b67f09SDavid van Moolenbroekdump_cache
200*00b67f09SDavid van Moolenbroekawk '/plain success\/timeout/ {getline; getline; if ($2 == "ns.flushtest.example") exit(1); exit(0); }' ns2/named_dump.db || ret=1
201*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
202*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
203*00b67f09SDavid van Moolenbroek
204*00b67f09SDavid van Moolenbroekecho "I:check expire option returned from slave zone"
205*00b67f09SDavid van Moolenbroekret=0
206*00b67f09SDavid van Moolenbroek$DIG @10.53.0.2 -p 5300 +expire soa expire-test > dig.out.expire
207*00b67f09SDavid van Moolenbroekgrep EXPIRE: dig.out.expire > /dev/null || ret=1
208*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
209*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
210*00b67f09SDavid van Moolenbroek
211*00b67f09SDavid van Moolenbroekecho "I:exit status: $status"
212*00b67f09SDavid van Moolenbroekexit $status
213