Home | History | Annotate | Line # | Download | only in serve-stale
tests.sh revision 1.1.1.5
      1 #!/bin/sh
      2 #
      3 # Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      4 #
      5 # This Source Code Form is subject to the terms of the Mozilla Public
      6 # License, v. 2.0. If a copy of the MPL was not distributed with this
      7 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      8 #
      9 # See the COPYRIGHT file distributed with this work for additional
     10 # information regarding copyright ownership.
     11 
     12 SYSTEMTESTTOP=..
     13 . $SYSTEMTESTTOP/conf.sh
     14 
     15 RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s"
     16 
     17 status=0
     18 n=0
     19 
     20 #echo_i "check ans.pl server ($n)"
     21 #$DIG -p ${PORT} @10.53.0.2 example NS
     22 #$DIG -p ${PORT} @10.53.0.2 example SOA
     23 #$DIG -p ${PORT} @10.53.0.2 ns.example A
     24 #$DIG -p ${PORT} @10.53.0.2 ns.example AAAA
     25 #$DIG -p ${PORT} @10.53.0.2 txt enable
     26 #$DIG -p ${PORT} @10.53.0.2 txt disable
     27 #$DIG -p ${PORT} @10.53.0.2 ns.example AAAA
     28 #$DIG -p ${PORT} @10.53.0.2 txt enable
     29 #$DIG -p ${PORT} @10.53.0.2 ns.example AAAA
     30 #$DIG -p ${PORT} @10.53.0.2 data.example TXT
     31 #$DIG -p ${PORT} @10.53.0.2 nodata.example TXT
     32 #$DIG -p ${PORT} @10.53.0.2 nxdomain.example TXT
     33 
     34 #
     35 # First test server with serve-stale options set.
     36 #
     37 echo_i "test server with serve-stale options set"
     38 
     39 n=`expr $n + 1`
     40 echo_i "prime cache longttl.example ($n)"
     41 ret=0
     42 $DIG -p ${PORT} @10.53.0.1 longttl.example TXT > dig.out.test$n
     43 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
     44 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
     45 if [ $ret != 0 ]; then echo_i "failed"; fi
     46 status=`expr $status + $ret`
     47 
     48 n=`expr $n + 1`
     49 echo_i "prime cache data.example ($n)"
     50 ret=0
     51 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
     52 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
     53 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
     54 if [ $ret != 0 ]; then echo_i "failed"; fi
     55 status=`expr $status + $ret`
     56 
     57 n=`expr $n + 1`
     58 echo_i "prime cache nodata.example ($n)"
     59 ret=0
     60 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
     61 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
     62 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
     63 if [ $ret != 0 ]; then echo_i "failed"; fi
     64 status=`expr $status + $ret`
     65 
     66 n=`expr $n + 1`
     67 echo_i "prime cache nxdomain.example ($n)"
     68 ret=0
     69 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
     70 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
     71 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
     72 if [ $ret != 0 ]; then echo_i "failed"; fi
     73 status=`expr $status + $ret`
     74 
     75 n=`expr $n + 1`
     76 echo_i "verify prime cache statistics ($n)"
     77 ret=0
     78 rm -f ns1/named.stats
     79 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
     80 [ -f ns1/named.stats ] || ret=1
     81 cp ns1/named.stats ns1/named.stats.$n
     82 # Check first 10 lines of Cache DB statistics.  After prime queries, we expect
     83 # two active TXT one nxrrset TXT, and one NXDOMAIN.
     84 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
     85 grep "2 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
     86 grep "1 !TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
     87 grep "1 NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
     88 if [ $ret != 0 ]; then echo_i "failed"; fi
     89 status=`expr $status + $ret`
     90 
     91 n=`expr $n + 1`
     92 echo_i "disable responses from authoritative server ($n)"
     93 ret=0
     94 $DIG -p ${PORT} @10.53.0.2 txt disable  > dig.out.test$n
     95 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
     96 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
     97 if [ $ret != 0 ]; then echo_i "failed"; fi
     98 status=`expr $status + $ret`
     99 
    100 sleep 1
    101 
    102 n=`expr $n + 1`
    103 echo_i "check 'rndc serve-stale status' ($n)"
    104 ret=0
    105 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    106 grep '_default: on (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    107 if [ $ret != 0 ]; then echo_i "failed"; fi
    108 status=`expr $status + $ret`
    109 
    110 n=`expr $n + 1`
    111 echo_i "check stale data.example ($n)"
    112 ret=0
    113 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    114 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    115 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    116 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    117 # Run rndc dumpdb, test whether the stale data has correct comment printed.
    118 # The max-stale-ttl is 3600 seconds, so the comment should say the data is
    119 # stale for somewhere between 3500-3599 seconds.
    120 rndc_dumpdb ns1 || ret=1
    121 awk '/; stale/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n |
    122     grep "; stale (will be retained for 35.. more seconds) data\.example.*A text record with a 1 second ttl" > /dev/null 2>&1 || ret=1
    123 # Also make sure the not expired data does not have a stale comment.
    124 awk '/; answer/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n |
    125     grep "; answer longttl\.example.*A text record with a 600 second ttl" > /dev/null 2>&1 || ret=1
    126 if [ $ret != 0 ]; then echo_i "failed"; fi
    127 status=`expr $status + $ret`
    128 
    129 n=`expr $n + 1`
    130 echo_i "check stale nodata.example ($n)"
    131 ret=0
    132 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    133 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    134 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    135 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    136 if [ $ret != 0 ]; then echo_i "failed"; fi
    137 status=`expr $status + $ret`
    138 
    139 n=`expr $n + 1`
    140 echo_i "check stale nxdomain.example ($n)"
    141 ret=0
    142 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    143 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    144 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    145 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    146 if [ $ret != 0 ]; then echo_i "failed"; fi
    147 status=`expr $status + $ret`
    148 
    149 n=`expr $n + 1`
    150 echo_i "verify stale cache statistics ($n)"
    151 ret=0
    152 rm -f ns1/named.stats
    153 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
    154 [ -f ns1/named.stats ] || ret=1
    155 cp ns1/named.stats ns1/named.stats.$n
    156 # Check first 10 lines of Cache DB statistics.  After serve-stale queries, we
    157 # expect one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
    158 # stale NXDOMAIN.
    159 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
    160 grep "1 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    161 grep "1 #TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    162 grep "1 #!TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    163 grep "1 #NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    164 status=`expr $status + $ret`
    165 if [ $ret != 0 ]; then echo_i "failed"; fi
    166 
    167 n=`expr $n + 1`
    168 echo_i "running 'rndc serve-stale off' ($n)"
    169 ret=0
    170 $RNDCCMD 10.53.0.1 serve-stale off || ret=1
    171 if [ $ret != 0 ]; then echo_i "failed"; fi
    172 status=`expr $status + $ret`
    173 
    174 n=`expr $n + 1`
    175 echo_i "check 'rndc serve-stale status' ($n)"
    176 ret=0
    177 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    178 grep '_default: off (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    179 if [ $ret != 0 ]; then echo_i "failed"; fi
    180 status=`expr $status + $ret`
    181 
    182 n=`expr $n + 1`
    183 echo_i "check stale data.example (serve-stale off) ($n)"
    184 ret=0
    185 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    186 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    187 if [ $ret != 0 ]; then echo_i "failed"; fi
    188 status=`expr $status + $ret`
    189 if [ $ret != 0 ]; then echo_i "failed"; fi
    190 status=`expr $status + $ret`
    191 
    192 n=`expr $n + 1`
    193 echo_i "check stale nodata.example (serve-stale off) ($n)"
    194 ret=0
    195 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    196 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    197 if [ $ret != 0 ]; then echo_i "failed"; fi
    198 status=`expr $status + $ret`
    199 
    200 n=`expr $n + 1`
    201 echo_i "check stale nxdomain.example (serve-stale off) ($n)"
    202 ret=0
    203 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    204 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    205 if [ $ret != 0 ]; then echo_i "failed"; fi
    206 status=`expr $status + $ret`
    207 
    208 n=`expr $n + 1`
    209 echo_i "running 'rndc serve-stale on' ($n)"
    210 ret=0
    211 $RNDCCMD 10.53.0.1 serve-stale on || ret=1
    212 if [ $ret != 0 ]; then echo_i "failed"; fi
    213 status=`expr $status + $ret`
    214 
    215 n=`expr $n + 1`
    216 echo_i "check 'rndc serve-stale status' ($n)"
    217 ret=0
    218 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    219 grep '_default: on (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    220 if [ $ret != 0 ]; then echo_i "failed"; fi
    221 status=`expr $status + $ret`
    222 
    223 n=`expr $n + 1`
    224 echo_i "check stale data.example (serve-stale on) ($n)"
    225 ret=0
    226 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    227 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    228 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    229 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    230 if [ $ret != 0 ]; then echo_i "failed"; fi
    231 status=`expr $status + $ret`
    232 
    233 n=`expr $n + 1`
    234 echo_i "check stale nodata.example (serve-stale on) ($n)"
    235 ret=0
    236 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    237 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    238 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    239 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    240 if [ $ret != 0 ]; then echo_i "failed"; fi
    241 status=`expr $status + $ret`
    242 
    243 n=`expr $n + 1`
    244 echo_i "check stale nxdomain.example (serve-stale on) ($n)"
    245 ret=0
    246 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    247 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    248 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    249 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    250 if [ $ret != 0 ]; then echo_i "failed"; fi
    251 status=`expr $status + $ret`
    252 
    253 n=`expr $n + 1`
    254 echo_i "running 'rndc serve-stale no' ($n)"
    255 ret=0
    256 $RNDCCMD 10.53.0.1 serve-stale no || ret=1
    257 if [ $ret != 0 ]; then echo_i "failed"; fi
    258 status=`expr $status + $ret`
    259 
    260 n=`expr $n + 1`
    261 echo_i "check 'rndc serve-stale status' ($n)"
    262 ret=0
    263 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    264 grep '_default: off (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    265 if [ $ret != 0 ]; then echo_i "failed"; fi
    266 status=`expr $status + $ret`
    267 
    268 n=`expr $n + 1`
    269 echo_i "check stale data.example (serve-stale no) ($n)"
    270 ret=0
    271 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    272 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    273 if [ $ret != 0 ]; then echo_i "failed"; fi
    274 status=`expr $status + $ret`
    275 
    276 n=`expr $n + 1`
    277 echo_i "check stale nodata.example (serve-stale no) ($n)"
    278 ret=0
    279 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    280 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    281 if [ $ret != 0 ]; then echo_i "failed"; fi
    282 status=`expr $status + $ret`
    283 
    284 n=`expr $n + 1`
    285 echo_i "check stale nxdomain.example (serve-stale no) ($n)"
    286 ret=0
    287 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    288 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    289 if [ $ret != 0 ]; then echo_i "failed"; fi
    290 status=`expr $status + $ret`
    291 
    292 n=`expr $n + 1`
    293 echo_i "running 'rndc serve-stale yes' ($n)"
    294 ret=0
    295 $RNDCCMD 10.53.0.1 serve-stale yes || ret=1
    296 if [ $ret != 0 ]; then echo_i "failed"; fi
    297 status=`expr $status + $ret`
    298 
    299 n=`expr $n + 1`
    300 echo_i "check 'rndc serve-stale status' ($n)"
    301 ret=0
    302 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    303 grep '_default: on (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    304 if [ $ret != 0 ]; then echo_i "failed"; fi
    305 status=`expr $status + $ret`
    306 
    307 n=`expr $n + 1`
    308 echo_i "check stale data.example (serve-stale yes) ($n)"
    309 ret=0
    310 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    311 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    312 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    313 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    314 if [ $ret != 0 ]; then echo_i "failed"; fi
    315 status=`expr $status + $ret`
    316 
    317 n=`expr $n + 1`
    318 echo_i "check stale nodata.example (serve-stale yes) ($n)"
    319 ret=0
    320 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    321 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    322 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    323 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    324 if [ $ret != 0 ]; then echo_i "failed"; fi
    325 status=`expr $status + $ret`
    326 
    327 n=`expr $n + 1`
    328 echo_i "check stale nxdomain.example (serve-stale yes) ($n)"
    329 ret=0
    330 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    331 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    332 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    333 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    334 if [ $ret != 0 ]; then echo_i "failed"; fi
    335 status=`expr $status + $ret`
    336 
    337 n=`expr $n + 1`
    338 echo_i "running 'rndc serve-stale off' ($n)"
    339 ret=0
    340 $RNDCCMD 10.53.0.1 serve-stale off || ret=1
    341 if [ $ret != 0 ]; then echo_i "failed"; fi
    342 status=`expr $status + $ret`
    343 
    344 n=`expr $n + 1`
    345 echo_i "running 'rndc serve-stale reset' ($n)"
    346 ret=0
    347 $RNDCCMD 10.53.0.1 serve-stale reset || ret=1
    348 if [ $ret != 0 ]; then echo_i "failed"; fi
    349 status=`expr $status + $ret`
    350 
    351 n=`expr $n + 1`
    352 echo_i "check 'rndc serve-stale status' ($n)"
    353 ret=0
    354 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    355 grep '_default: on (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    356 if [ $ret != 0 ]; then echo_i "failed"; fi
    357 status=`expr $status + $ret`
    358 
    359 n=`expr $n + 1`
    360 echo_i "check stale data.example (serve-stale reset) ($n)"
    361 ret=0
    362 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    363 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    364 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    365 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    366 if [ $ret != 0 ]; then echo_i "failed"; fi
    367 status=`expr $status + $ret`
    368 
    369 n=`expr $n + 1`
    370 echo_i "check stale nodata.example (serve-stale reset) ($n)"
    371 ret=0
    372 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    373 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    374 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    375 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    376 if [ $ret != 0 ]; then echo_i "failed"; fi
    377 status=`expr $status + $ret`
    378 
    379 n=`expr $n + 1`
    380 echo_i "check stale nxdomain.example (serve-stale reset) ($n)"
    381 ret=0
    382 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    383 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    384 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    385 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    386 if [ $ret != 0 ]; then echo_i "failed"; fi
    387 status=`expr $status + $ret`
    388 
    389 n=`expr $n + 1`
    390 echo_i "running 'rndc serve-stale off' ($n)"
    391 ret=0
    392 $RNDCCMD 10.53.0.1 serve-stale off || ret=1
    393 if [ $ret != 0 ]; then echo_i "failed"; fi
    394 status=`expr $status + $ret`
    395 
    396 n=`expr $n + 1`
    397 echo_i "check 'rndc serve-stale status' ($n)"
    398 ret=0
    399 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    400 grep '_default: off (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
    401 if [ $ret != 0 ]; then echo_i "failed"; fi
    402 status=`expr $status + $ret`
    403 
    404 #
    405 # Update named.conf.
    406 # Test server with low max-stale-ttl.
    407 #
    408 echo_i "test server with serve-stale options set, low max-stale-ttl"
    409 
    410 n=`expr $n + 1`
    411 echo_i "updating ns1/named.conf ($n)"
    412 ret=0
    413 copy_setports ns1/named2.conf.in ns1/named.conf
    414 if [ $ret != 0 ]; then echo_i "failed"; fi
    415 status=`expr $status + $ret`
    416 
    417 n=`expr $n + 1`
    418 echo_i "running 'rndc reload' ($n)"
    419 ret=0
    420 rndc_reload ns1 10.53.0.1
    421 if [ $ret != 0 ]; then echo_i "failed"; fi
    422 status=`expr $status + $ret`
    423 
    424 n=`expr $n + 1`
    425 echo_i "check 'rndc serve-stale status' ($n)"
    426 ret=0
    427 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    428 grep '_default: off (rndc) (stale-answer-ttl=3 max-stale-ttl=35)' rndc.out.test$n > /dev/null || ret=1
    429 if [ $ret != 0 ]; then echo_i "failed"; fi
    430 status=`expr $status + $ret`
    431 
    432 n=`expr $n + 1`
    433 echo_i "flush cache, re-enable serve-stale and query again ($n)"
    434 ret=0
    435 $RNDCCMD 10.53.0.1 flushtree example > rndc.out.test$n.1 2>&1 || ret=1
    436 $RNDCCMD 10.53.0.1 serve-stale on > rndc.out.test$n.2 2>&1 || ret=1
    437 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    438 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    439 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    440 if [ $ret != 0 ]; then echo_i "failed"; fi
    441 status=`expr $status + $ret`
    442 
    443 n=`expr $n + 1`
    444 echo_i "check 'rndc serve-stale status' ($n)"
    445 ret=0
    446 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    447 grep '_default: on (rndc) (stale-answer-ttl=3 max-stale-ttl=35)' rndc.out.test$n > /dev/null || ret=1
    448 if [ $ret != 0 ]; then echo_i "failed"; fi
    449 status=`expr $status + $ret`
    450 
    451 n=`expr $n + 1`
    452 echo_i "enable responses from authoritative server ($n)"
    453 ret=0
    454 $DIG -p ${PORT} @10.53.0.2 txt enable  > dig.out.test$n
    455 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    456 grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
    457 if [ $ret != 0 ]; then echo_i "failed"; fi
    458 status=`expr $status + $ret`
    459 
    460 sleep 1
    461 
    462 n=`expr $n + 1`
    463 echo_i "prime cache longttl.example (low max-stale-ttl) ($n)"
    464 ret=0
    465 $DIG -p ${PORT} @10.53.0.1 longttl.example TXT > dig.out.test$n
    466 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    467 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    468 if [ $ret != 0 ]; then echo_i "failed"; fi
    469 status=`expr $status + $ret`
    470 
    471 n=`expr $n + 1`
    472 echo_i "prime cache data.example (low max-stale-ttl) ($n)"
    473 ret=0
    474 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    475 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    476 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    477 if [ $ret != 0 ]; then echo_i "failed"; fi
    478 status=`expr $status + $ret`
    479 
    480 n=`expr $n + 1`
    481 echo_i "prime cache nodata.example (low max-stale-ttl) ($n)"
    482 ret=0
    483 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    484 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    485 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    486 if [ $ret != 0 ]; then echo_i "failed"; fi
    487 status=`expr $status + $ret`
    488 
    489 n=`expr $n + 1`
    490 echo_i "prime cache nxdomain.example (low max-stale-ttl) ($n)"
    491 ret=0
    492 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    493 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    494 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    495 if [ $ret != 0 ]; then echo_i "failed"; fi
    496 status=`expr $status + $ret`
    497 
    498 n=`expr $n + 1`
    499 echo_i "verify prime cache statistics (low max-stale-ttl) ($n)"
    500 ret=0
    501 rm -f ns1/named.stats
    502 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
    503 [ -f ns1/named.stats ] || ret=1
    504 cp ns1/named.stats ns1/named.stats.$n
    505 # Check first 10 lines of Cache DB statistics.  After prime queries, we expect
    506 # two active TXT RRsets, one nxrrset TXT, and one NXDOMAIN.
    507 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
    508 grep "2 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    509 grep "1 !TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    510 grep "1 NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    511 status=`expr $status + $ret`
    512 if [ $ret != 0 ]; then echo_i "failed"; fi
    513 
    514 n=`expr $n + 1`
    515 echo_i "disable responses from authoritative server ($n)"
    516 ret=0
    517 $DIG -p ${PORT} @10.53.0.2 txt disable  > dig.out.test$n
    518 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    519 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
    520 if [ $ret != 0 ]; then echo_i "failed"; fi
    521 status=`expr $status + $ret`
    522 
    523 sleep 1
    524 
    525 n=`expr $n + 1`
    526 echo_i "check stale data.example (low max-stale-ttl) ($n)"
    527 ret=0
    528 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    529 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    530 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    531 grep "data\.example\..*3.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    532 if [ $ret != 0 ]; then echo_i "failed"; fi
    533 status=`expr $status + $ret`
    534 
    535 n=`expr $n + 1`
    536 echo_i "check stale nodata.example (low max-stale-ttl) ($n)"
    537 ret=0
    538 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    539 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    540 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    541 grep "example\..*3.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    542 if [ $ret != 0 ]; then echo_i "failed"; fi
    543 status=`expr $status + $ret`
    544 
    545 n=`expr $n + 1`
    546 echo_i "check stale nxdomain.example (low max-stale-ttl) ($n)"
    547 ret=0
    548 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    549 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    550 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    551 grep "example\..*3.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    552 if [ $ret != 0 ]; then echo_i "failed"; fi
    553 status=`expr $status + $ret`
    554 
    555 n=`expr $n + 1`
    556 echo_i "verify stale cache statistics (low max-stale-ttl) ($n)"
    557 ret=0
    558 rm -f ns1/named.stats
    559 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
    560 [ -f ns1/named.stats ] || ret=1
    561 cp ns1/named.stats ns1/named.stats.$n
    562 # Check first 10 lines of Cache DB statistics.  After serve-stale queries, we
    563 # expect one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
    564 # stale NXDOMAIN.
    565 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
    566 grep "1 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    567 grep "1 #TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    568 grep "1 #!TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    569 grep "1 #NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
    570 status=`expr $status + $ret`
    571 if [ $ret != 0 ]; then echo_i "failed"; fi
    572 
    573 sleep 1
    574 
    575 n=`expr $n + 1`
    576 echo_i "check ancient data.example (low max-stale-ttl) ($n)"
    577 ret=0
    578 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
    579 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    580 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    581 if [ $ret != 0 ]; then echo_i "failed"; fi
    582 status=`expr $status + $ret`
    583 
    584 n=`expr $n + 1`
    585 echo_i "check ancient nodata.example (low max-stale-ttl) ($n)"
    586 ret=0
    587 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
    588 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    589 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    590 if [ $ret != 0 ]; then echo_i "failed"; fi
    591 status=`expr $status + $ret`
    592 
    593 n=`expr $n + 1`
    594 echo_i "check ancient nxdomain.example (low max-stale-ttl) ($n)"
    595 ret=0
    596 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
    597 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    598 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    599 if [ $ret != 0 ]; then echo_i "failed"; fi
    600 status=`expr $status + $ret`
    601 
    602 #
    603 # Now test server with no serve-stale options set.
    604 #
    605 echo_i "test server with no serve-stale options set"
    606 
    607 n=`expr $n + 1`
    608 echo_i "enable responses from authoritative server ($n)"
    609 ret=0
    610 $DIG -p ${PORT} @10.53.0.2 txt enable  > dig.out.test$n
    611 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    612 grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
    613 if [ $ret != 0 ]; then echo_i "failed"; fi
    614 status=`expr $status + $ret`
    615 
    616 n=`expr $n + 1`
    617 echo_i "prime cache longttl.example (max-stale-ttl default) ($n)"
    618 ret=0
    619 $DIG -p ${PORT} @10.53.0.3 longttl.example TXT > dig.out.test$n
    620 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    621 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    622 if [ $ret != 0 ]; then echo_i "failed"; fi
    623 status=`expr $status + $ret`
    624 
    625 n=`expr $n + 1`
    626 echo_i "prime cache data.example (max-stale-ttl default) ($n)"
    627 ret=0
    628 $DIG -p ${PORT} @10.53.0.3 data.example TXT > dig.out.test$n
    629 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    630 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    631 grep "data\.example\..*1.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    632 if [ $ret != 0 ]; then echo_i "failed"; fi
    633 status=`expr $status + $ret`
    634 
    635 n=`expr $n + 1`
    636 echo_i "prime cache nodata.example (max-stale-ttl default) ($n)"
    637 ret=0
    638 $DIG -p ${PORT} @10.53.0.3 nodata.example TXT > dig.out.test$n
    639 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    640 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    641 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    642 if [ $ret != 0 ]; then echo_i "failed"; fi
    643 status=`expr $status + $ret`
    644 
    645 n=`expr $n + 1`
    646 echo_i "prime cache nxdomain.example (max-stale-ttl default) ($n)"
    647 ret=0
    648 $DIG -p ${PORT} @10.53.0.3 nxdomain.example TXT > dig.out.test$n
    649 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    650 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    651 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    652 if [ $ret != 0 ]; then echo_i "failed"; fi
    653 status=`expr $status + $ret`
    654 
    655 n=`expr $n + 1`
    656 echo_i "verify prime cache statistics (max-stale-ttl default) ($n)"
    657 ret=0
    658 rm -f ns3/named.stats
    659 $RNDCCMD 10.53.0.3 stats > /dev/null 2>&1
    660 [ -f ns3/named.stats ] || ret=1
    661 cp ns3/named.stats ns3/named.stats.$n
    662 # Check first 10 lines of Cache DB statistics.  After prime queries, we expect
    663 # two active TXT RRsets, one nxrrset TXT, and one NXDOMAIN.
    664 grep -A 10 "++ Cache DB RRsets ++" ns3/named.stats.$n > ns3/named.stats.$n.cachedb || ret=1
    665 grep "2 TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    666 grep "1 !TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    667 grep "1 NXDOMAIN" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    668 status=`expr $status + $ret`
    669 if [ $ret != 0 ]; then echo_i "failed"; fi
    670 
    671 n=`expr $n + 1`
    672 echo_i "disable responses from authoritative server ($n)"
    673 ret=0
    674 $DIG -p ${PORT} @10.53.0.2 txt disable  > dig.out.test$n
    675 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    676 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
    677 if [ $ret != 0 ]; then echo_i "failed"; fi
    678 status=`expr $status + $ret`
    679 
    680 sleep 1
    681 
    682 n=`expr $n + 1`
    683 echo_i "check 'rndc serve-stale status' ($n)"
    684 ret=0
    685 $RNDCCMD 10.53.0.3 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    686 grep '_default: off (stale-answer-ttl=1 max-stale-ttl=604800)' rndc.out.test$n > /dev/null || ret=1
    687 if [ $ret != 0 ]; then echo_i "failed"; fi
    688 status=`expr $status + $ret`
    689 
    690 n=`expr $n + 1`
    691 echo_i "check fail of data.example (max-stale-ttl default) ($n)"
    692 ret=0
    693 $DIG -p ${PORT} @10.53.0.3 data.example TXT > dig.out.test$n
    694 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    695 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    696 if [ $ret != 0 ]; then echo_i "failed"; fi
    697 status=`expr $status + $ret`
    698 
    699 n=`expr $n + 1`
    700 echo_i "check fail of nodata.example (max-stale-ttl default) ($n)"
    701 ret=0
    702 $DIG -p ${PORT} @10.53.0.3 nodata.example TXT > dig.out.test$n
    703 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    704 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    705 if [ $ret != 0 ]; then echo_i "failed"; fi
    706 status=`expr $status + $ret`
    707 
    708 n=`expr $n + 1`
    709 echo_i "check fail of nxdomain.example (max-stale-ttl default) ($n)"
    710 ret=0
    711 $DIG -p ${PORT} @10.53.0.3 nxdomain.example TXT > dig.out.test$n
    712 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    713 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    714 if [ $ret != 0 ]; then echo_i "failed"; fi
    715 status=`expr $status + $ret`
    716 
    717 n=`expr $n + 1`
    718 echo_i "verify stale cache statistics (max-stale-ttl default) ($n)"
    719 ret=0
    720 rm -f ns3/named.stats
    721 $RNDCCMD 10.53.0.3 stats > /dev/null 2>&1
    722 [ -f ns3/named.stats ] || ret=1
    723 cp ns3/named.stats ns3/named.stats.$n
    724 # Check first 10 lines of Cache DB statistics. After last queries, we expect
    725 # one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
    726 # stale NXDOMAIN.
    727 grep -A 10 "++ Cache DB RRsets ++" ns3/named.stats.$n > ns3/named.stats.$n.cachedb || ret=1
    728 grep "1 TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    729 grep "1 #TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    730 grep "1 #!TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    731 grep "1 #NXDOMAIN" ns3/named.stats.$n.cachedb > /dev/null || ret=1
    732 status=`expr $status + $ret`
    733 if [ $ret != 0 ]; then echo_i "failed"; fi
    734 
    735 n=`expr $n + 1`
    736 echo_i "check 'rndc serve-stale on' ($n)"
    737 ret=0
    738 $RNDCCMD 10.53.0.3 serve-stale on > rndc.out.test$n 2>&1 || ret=1
    739 if [ $ret != 0 ]; then echo_i "failed"; fi
    740 status=`expr $status + $ret`
    741 
    742 n=`expr $n + 1`
    743 echo_i "check 'rndc serve-stale status' ($n)"
    744 ret=0
    745 $RNDCCMD 10.53.0.3 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    746 grep '_default: on (rndc) (stale-answer-ttl=1 max-stale-ttl=604800)' rndc.out.test$n > /dev/null || ret=1
    747 if [ $ret != 0 ]; then echo_i "failed"; fi
    748 status=`expr $status + $ret`
    749 
    750 n=`expr $n + 1`
    751 echo_i "check data.example (max-stale-ttl default) ($n)"
    752 ret=0
    753 $DIG -p ${PORT} @10.53.0.3 data.example TXT > dig.out.test$n
    754 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    755 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    756 grep "data\.example\..*1.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    757 if [ $ret != 0 ]; then echo_i "failed"; fi
    758 status=`expr $status + $ret`
    759 
    760 n=`expr $n + 1`
    761 echo_i "check nodata.example (max-stale-ttl default) ($n)"
    762 ret=0
    763 $DIG -p ${PORT} @10.53.0.3 nodata.example TXT > dig.out.test$n
    764 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    765 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    766 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    767 if [ $ret != 0 ]; then echo_i "failed"; fi
    768 status=`expr $status + $ret`
    769 
    770 n=`expr $n + 1`
    771 echo_i "check nxdomain.example (max-stale-ttl default) ($n)"
    772 ret=0
    773 $DIG -p ${PORT} @10.53.0.3 nxdomain.example TXT > dig.out.test$n
    774 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    775 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    776 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    777 if [ $ret != 0 ]; then echo_i "failed"; fi
    778 status=`expr $status + $ret`
    779 
    780 #
    781 # Now test server with serve-stale disabled.
    782 #
    783 echo_i "test server with serve-stale disabled"
    784 
    785 n=`expr $n + 1`
    786 echo_i "enable responses from authoritative server ($n)"
    787 ret=0
    788 $DIG -p ${PORT} @10.53.0.2 txt enable  > dig.out.test$n
    789 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    790 grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
    791 if [ $ret != 0 ]; then echo_i "failed"; fi
    792 status=`expr $status + $ret`
    793 
    794 n=`expr $n + 1`
    795 echo_i "prime cache longttl.example (serve-stale disabled) ($n)"
    796 ret=0
    797 $DIG -p ${PORT} @10.53.0.4 longttl.example TXT > dig.out.test$n
    798 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    799 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    800 if [ $ret != 0 ]; then echo_i "failed"; fi
    801 status=`expr $status + $ret`
    802 
    803 n=`expr $n + 1`
    804 echo_i "prime cache data.example (serve-stale disabled) ($n)"
    805 ret=0
    806 $DIG -p ${PORT} @10.53.0.4 data.example TXT > dig.out.test$n
    807 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    808 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    809 grep "data\.example\..*1.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
    810 if [ $ret != 0 ]; then echo_i "failed"; fi
    811 status=`expr $status + $ret`
    812 
    813 n=`expr $n + 1`
    814 echo_i "prime cache nodata.example (serve-stale disabled) ($n)"
    815 ret=0
    816 $DIG -p ${PORT} @10.53.0.4 nodata.example TXT > dig.out.test$n
    817 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
    818 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    819 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    820 if [ $ret != 0 ]; then echo_i "failed"; fi
    821 status=`expr $status + $ret`
    822 
    823 n=`expr $n + 1`
    824 echo_i "prime cache nxdomain.example (serve-stale disabled) ($n)"
    825 ret=0
    826 $DIG -p ${PORT} @10.53.0.4 nxdomain.example TXT > dig.out.test$n
    827 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
    828 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    829 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
    830 if [ $ret != 0 ]; then echo_i "failed"; fi
    831 status=`expr $status + $ret`
    832 
    833 n=`expr $n + 1`
    834 echo_i "verify prime cache statistics (serve-stale disabled) ($n)"
    835 ret=0
    836 rm -f ns4/named.stats
    837 $RNDCCMD 10.53.0.4 stats > /dev/null 2>&1
    838 [ -f ns4/named.stats ] || ret=1
    839 cp ns4/named.stats ns4/named.stats.$n
    840 # Check first 10 lines of Cache DB statistics.  After prime queries, we expect
    841 # two active TXT RRsets, one nxrrset TXT, and one NXDOMAIN.
    842 grep -A 10 "++ Cache DB RRsets ++" ns4/named.stats.$n > ns4/named.stats.$n.cachedb || ret=1
    843 grep "2 TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    844 grep "1 !TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    845 grep "1 NXDOMAIN" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    846 status=`expr $status + $ret`
    847 if [ $ret != 0 ]; then echo_i "failed"; fi
    848 
    849 n=`expr $n + 1`
    850 echo_i "disable responses from authoritative server ($n)"
    851 ret=0
    852 $DIG -p ${PORT} @10.53.0.2 txt disable  > dig.out.test$n
    853 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
    854 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
    855 if [ $ret != 0 ]; then echo_i "failed"; fi
    856 status=`expr $status + $ret`
    857 
    858 sleep 1
    859 
    860 n=`expr $n + 1`
    861 echo_i "check 'rndc serve-stale status' ($n)"
    862 ret=0
    863 $RNDCCMD 10.53.0.4 serve-stale status > rndc.out.test$n 2>&1 || ret=1
    864 grep '_default: off (stale-answer-ttl=1 max-stale-ttl=604800)' rndc.out.test$n > /dev/null || ret=1
    865 if [ $ret != 0 ]; then echo_i "failed"; fi
    866 status=`expr $status + $ret`
    867 
    868 n=`expr $n + 1`
    869 echo_i "check fail of data.example (serve-stale disabled) ($n)"
    870 ret=0
    871 $DIG -p ${PORT} @10.53.0.4 data.example TXT > dig.out.test$n
    872 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    873 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    874 if [ $ret != 0 ]; then echo_i "failed"; fi
    875 status=`expr $status + $ret`
    876 
    877 n=`expr $n + 1`
    878 echo_i "check fail of nodata.example (serve-stale disabled) ($n)"
    879 ret=0
    880 $DIG -p ${PORT} @10.53.0.4 nodata.example TXT > dig.out.test$n
    881 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    882 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    883 if [ $ret != 0 ]; then echo_i "failed"; fi
    884 status=`expr $status + $ret`
    885 
    886 n=`expr $n + 1`
    887 echo_i "check fail of nxdomain.example (serve-stale disabled) ($n)"
    888 ret=0
    889 $DIG -p ${PORT} @10.53.0.4 nxdomain.example TXT > dig.out.test$n
    890 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
    891 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
    892 if [ $ret != 0 ]; then echo_i "failed"; fi
    893 status=`expr $status + $ret`
    894 
    895 n=`expr $n + 1`
    896 echo_i "verify stale cache statistics (serve-stale disabled) ($n)"
    897 ret=0
    898 rm -f ns4/named.stats
    899 $RNDCCMD 10.53.0.4 stats > /dev/null 2>&1
    900 [ -f ns4/named.stats ] || ret=1
    901 cp ns4/named.stats ns4/named.stats.$n
    902 # Check first 10 lines of Cache DB statistics. After last queries, we expect
    903 # one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
    904 # stale NXDOMAIN.
    905 grep -A 10 "++ Cache DB RRsets ++" ns4/named.stats.$n > ns4/named.stats.$n.cachedb || ret=1
    906 grep "1 TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    907 grep "1 #TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    908 grep "1 #!TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    909 grep "1 #NXDOMAIN" ns4/named.stats.$n.cachedb > /dev/null || ret=1
    910 status=`expr $status + $ret`
    911 if [ $ret != 0 ]; then echo_i "failed"; fi
    912 
    913 # Dump the cache.
    914 n=`expr $n + 1`
    915 echo_i "dump the cache (serve-stale disabled) ($n)"
    916 ret=0
    917 $RNDCCMD 10.53.0.4 dumpdb -cache > rndc.out.test$n 2>&1 || ret=1
    918 done=0
    919 for i in 0 1 2 3 4 5 6 7 8 9; do
    920 	grep '^; Dump complete$' ns4/named_dump4.db > /dev/null 2>&1 && done=1
    921 	if [ $done != 1 ]; then sleep 1; fi
    922 done
    923 if [ $done != 1 ]; then ret=1; fi
    924 status=`expr $status + $ret`
    925 if [ $ret != 0 ]; then echo_i "failed"; fi
    926 
    927 echo_i "stop ns4"
    928 $PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} serve-stale ns4
    929 
    930 # Load the cache as if it was five minutes (RBTDB_VIRTUAL) older.
    931 # Since max-stale-ttl defaults to a week, we need to adjust the date by
    932 # one week and five minutes.
    933 LASTWEEK=`TZ=UTC perl -e 'my $now = time();
    934         my $oneWeekAgo = $now - 604800;
    935         my $fiveMinutesAgo = $oneWeekAgo - 300;
    936         my ($s, $m, $h, $d, $mo, $y) = (localtime($fiveMinutesAgo))[0, 1, 2, 3, 4, 5];
    937         printf("%04d%02d%02d%02d%02d%02d", $y+1900, $mo+1, $d, $h, $m, $s);'`
    938 
    939 n=`expr $n + 1`
    940 echo_i "mock the cache date to $LASTWEEK (serve-stale disabled) ($n)"
    941 ret=0
    942 sed -E "s/DATE [0-9]{14}/DATE $LASTWEEK/g" ns4/named_dump4.db > ns4/named_dumpdb4.db.out || ret=1
    943 cp ns4/named_dumpdb4.db.out ns4/named_dumpdb4.db
    944 if [ $ret != 0 ]; then echo_i "failed"; fi
    945 status=`expr $status + $ret`
    946 
    947 echo_i "start ns4"
    948 $PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} serve-stale ns4
    949 
    950 sleep 1
    951 
    952 n=`expr $n + 1`
    953 echo_i "verify ancient cache statistics (serve-stale disabled) ($n)"
    954 ret=0
    955 rm -f ns4/named.stats
    956 $RNDCCMD 10.53.0.4 stats #> /dev/null 2>&1
    957 [ -f ns4/named.stats ] || ret=1
    958 cp ns4/named.stats ns4/named.stats.$n
    959 # Check first 10 lines of Cache DB statistics. After last queries, we expect
    960 # everything to be removed or scheduled to be removed.
    961 grep -A 10 "++ Cache DB RRsets ++" ns4/named.stats.$n > ns4/named.stats.$n.cachedb || ret=1
    962 grep "#TXT" ns4/named.stats.$n.cachedb > /dev/null && ret=1
    963 grep "#!TXT" ns4/named.stats.$n.cachedb > /dev/null && ret=1
    964 grep "#NXDOMAIN" ns4/named.stats.$n.cachedb > /dev/null && ret=1
    965 status=`expr $status + $ret`
    966 if [ $ret != 0 ]; then echo_i "failed"; fi
    967 
    968 echo_i "exit status: $status"
    969 [ $status -eq 0 ] || exit 1
    970