Home | History | Annotate | Line # | Download | only in qmin
tests.sh revision 1.1.1.6.2.1
      1 #!/bin/sh
      2 
      3 # Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      4 #
      5 # SPDX-License-Identifier: MPL-2.0
      6 #
      7 # This Source Code Form is subject to the terms of the Mozilla Public
      8 # License, v. 2.0.  If a copy of the MPL was not distributed with this
      9 # file, you can obtain one at https://mozilla.org/MPL/2.0/.
     10 #
     11 # See the COPYRIGHT file distributed with this work for additional
     12 # information regarding copyright ownership.
     13 
     14 set -e
     15 
     16 . ../conf.sh
     17 
     18 DIGOPTS="-p ${PORT}"
     19 RNDCCMD="$RNDC -c ../_common/rndc.conf -p ${CONTROLPORT} -s"
     20 CLEANQL="rm -f ans*/query.log"
     21 status=0
     22 n=0
     23 
     24 n=$((n + 1))
     25 echo_i "query for .good is not minimized when qname-minimization is off ($n)"
     26 ret=0
     27 $CLEANQL
     28 $RNDCCMD 10.53.0.5 flush
     29 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.5 >dig.out.test$n
     30 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
     31 grep "icky.icky.icky.ptang.zoop.boing.good. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
     32 sleep 1
     33 cat <<__EOF | diff ans2/query.log - >/dev/null || ret=1
     34 ADDR icky.icky.icky.ptang.zoop.boing.good.
     35 ADDR ns3.good.
     36 ADDR ns3.good.
     37 ADDR a.bit.longer.ns.name.good.
     38 ADDR a.bit.longer.ns.name.good.
     39 __EOF
     40 echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | diff ans3/query.log - >/dev/null || ret=1
     41 echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | diff ans4/query.log - >/dev/null || ret=1
     42 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
     43 if [ $ret != 0 ]; then echo_i "failed"; fi
     44 status=$((status + ret))
     45 
     46 n=$((n + 1))
     47 echo_i "query for .bad is not minimized when qname-minimization is off ($n)"
     48 ret=0
     49 $CLEANQL
     50 $RNDCCMD 10.53.0.5 flush
     51 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.5 >dig.out.test$n
     52 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
     53 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
     54 sleep 1
     55 cat <<__EOF | diff ans2/query.log - >/dev/null || ret=1
     56 ADDR icky.icky.icky.ptang.zoop.boing.bad.
     57 ADDR ns3.bad.
     58 ADDR ns3.bad.
     59 ADDR a.bit.longer.ns.name.bad.
     60 ADDR a.bit.longer.ns.name.bad.
     61 __EOF
     62 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | diff ans3/query.log - >/dev/null || ret=1
     63 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | diff ans4/query.log - >/dev/null || ret=1
     64 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
     65 if [ $ret != 0 ]; then echo_i "failed"; fi
     66 status=$((status + ret))
     67 
     68 n=$((n + 1))
     69 echo_i "query for .slow is not minimized when qname-minimization is off ($n)"
     70 ret=0
     71 $CLEANQL
     72 $RNDCCMD 10.53.0.5 flush
     73 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.5 >dig.out.test$n
     74 sleep 5
     75 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
     76 grep "icky.icky.icky.ptang.zoop.boing.slow. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
     77 sleep 1
     78 cat <<__EOF | diff ans2/query.log - >/dev/null || ret=1
     79 ADDR icky.icky.icky.ptang.zoop.boing.slow.
     80 ADDR ns3.slow.
     81 ADDR ns3.slow.
     82 ADDR a.bit.longer.ns.name.slow.
     83 ADDR a.bit.longer.ns.name.slow.
     84 __EOF
     85 echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | diff ans3/query.log - >/dev/null || ret=1
     86 echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | diff ans4/query.log - >/dev/null || ret=1
     87 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
     88 if [ $ret != 0 ]; then echo_i "failed"; fi
     89 status=$((status + ret))
     90 
     91 n=$((n + 1))
     92 echo_i "query for .ugly is not minimized when qname-minimization is off ($n)"
     93 ret=0
     94 $CLEANQL
     95 $RNDCCMD 10.53.0.5 flush
     96 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.5 >dig.out.test$n
     97 sleep 5
     98 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
     99 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
    100 sleep 1
    101 cat <<__EOF | diff ans2/query.log - >/dev/null || ret=1
    102 ADDR icky.icky.icky.ptang.zoop.boing.ugly.
    103 ADDR ns3.ugly.
    104 ADDR ns3.ugly.
    105 ADDR a.bit.longer.ns.name.ugly.
    106 ADDR a.bit.longer.ns.name.ugly.
    107 __EOF
    108 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans3/query.log - >/dev/null || ret=1
    109 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans4/query.log - >/dev/null || ret=1
    110 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    111 if [ $ret != 0 ]; then echo_i "failed"; fi
    112 status=$((status + ret))
    113 
    114 n=$((n + 1))
    115 echo_i "query for .good is properly minimized when qname-minimization is in strict mode ($n)"
    116 ret=0
    117 $CLEANQL
    118 $RNDCCMD 10.53.0.6 flush
    119 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 >dig.out.test$n
    120 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    121 grep "icky.icky.icky.ptang.zoop.boing.good. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
    122 sleep 1
    123 sort ans2/query.log >ans2/query.log.sorted
    124 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    125 ADDR a.bit.longer.ns.name.good.
    126 ADDR a.bit.longer.ns.name.good.
    127 ADDR ns2.good.
    128 ADDR ns3.good.
    129 ADDR ns3.good.
    130 NS boing.good.
    131 NS good.
    132 NS zoop.boing.good.
    133 __EOF
    134 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1
    135 NS zoop.boing.good.
    136 NS ptang.zoop.boing.good.
    137 NS icky.ptang.zoop.boing.good.
    138 __EOF
    139 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1
    140 NS icky.ptang.zoop.boing.good.
    141 NS icky.icky.ptang.zoop.boing.good.
    142 ADDR icky.icky.icky.ptang.zoop.boing.good.
    143 __EOF
    144 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    145 if [ $ret != 0 ]; then echo_i "failed"; fi
    146 status=$((status + ret))
    147 
    148 n=$((n + 1))
    149 echo_i "query for .good is properly minimized when qname-minimization is in relaxed mode ($n)"
    150 ret=0
    151 $CLEANQL
    152 $RNDCCMD 10.53.0.7 flush
    153 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.7 >dig.out.test$n
    154 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    155 grep "icky.icky.icky.ptang.zoop.boing.good. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
    156 sleep 1
    157 sort ans2/query.log >ans2/query.log.sorted
    158 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    159 ADDR a.bit.longer.ns.name.good.
    160 ADDR a.bit.longer.ns.name.good.
    161 ADDR ns2.good.
    162 ADDR ns3.good.
    163 ADDR ns3.good.
    164 NS boing.good.
    165 NS zoop.boing.good.
    166 __EOF
    167 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1
    168 NS ptang.zoop.boing.good.
    169 NS icky.ptang.zoop.boing.good.
    170 __EOF
    171 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1
    172 NS icky.icky.ptang.zoop.boing.good.
    173 ADDR icky.icky.icky.ptang.zoop.boing.good.
    174 __EOF
    175 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    176 if [ $ret != 0 ]; then echo_i "failed"; fi
    177 status=$((status + ret))
    178 
    179 n=$((n + 1))
    180 echo_i "query for .bad fails when qname-minimization is in strict mode ($n)"
    181 ret=0
    182 $CLEANQL
    183 $RNDCCMD 10.53.0.6 flush
    184 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.6 >dig.out.test$n
    185 grep "status: NXDOMAIN" dig.out.test$n >/dev/null || ret=1
    186 sleep 1
    187 sort ans2/query.log >ans2/query.log.sorted
    188 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    189 ADDR ns2.bad.
    190 NS bad.
    191 NS boing.bad.
    192 __EOF
    193 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    194 if [ $ret != 0 ]; then echo_i "failed"; fi
    195 status=$((status + ret))
    196 
    197 n=$((n + 1))
    198 echo_i "query for .bad succeeds when qname-minimization is in relaxed mode ($n)"
    199 ret=0
    200 $CLEANQL
    201 $RNDCCMD 10.53.0.7 flush
    202 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.7 >dig.out.test$n
    203 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    204 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
    205 sleep 1
    206 sort ans2/query.log >ans2/query.log.sorted
    207 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    208 ADDR a.bit.longer.ns.name.bad.
    209 ADDR a.bit.longer.ns.name.bad.
    210 ADDR icky.icky.icky.ptang.zoop.boing.bad.
    211 ADDR ns2.bad.
    212 ADDR ns3.bad.
    213 ADDR ns3.bad.
    214 NS boing.bad.
    215 __EOF
    216 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1
    217 ADDR icky.icky.icky.ptang.zoop.boing.bad.
    218 __EOF
    219 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1
    220 ADDR icky.icky.icky.ptang.zoop.boing.bad.
    221 __EOF
    222 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    223 if [ $ret != 0 ]; then echo_i "failed"; fi
    224 status=$((status + ret))
    225 
    226 n=$((n + 1))
    227 echo_i "query for .ugly fails when qname-minimization is in strict mode ($n)"
    228 ret=0
    229 $CLEANQL
    230 $RNDCCMD 10.53.0.6 flush
    231 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.6 >dig.out.test$n
    232 grep "status: SERVFAIL" dig.out.test$n >/dev/null || ret=1
    233 sleep 1
    234 sort ans2/query.log >ans2/query.log.sorted
    235 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    236 ADDR ns2.ugly.
    237 NS boing.ugly.
    238 NS ugly.
    239 __EOF
    240 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    241 if [ $ret != 0 ]; then echo_i "failed"; fi
    242 status=$((status + ret))
    243 $RNDCCMD 10.53.0.6 flush
    244 
    245 n=$((n + 1))
    246 echo_i "query for .ugly succeeds when qname-minimization is in relaxed mode ($n)"
    247 ret=0
    248 $CLEANQL
    249 $RNDCCMD 10.53.0.7 flush
    250 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.7 >dig.out.test$n
    251 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    252 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
    253 sleep 1
    254 sort ans2/query.log >ans2/query.log.sorted
    255 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    256 ADDR a.bit.longer.ns.name.ugly.
    257 ADDR a.bit.longer.ns.name.ugly.
    258 ADDR icky.icky.icky.ptang.zoop.boing.ugly.
    259 ADDR ns2.ugly.
    260 ADDR ns3.ugly.
    261 ADDR ns3.ugly.
    262 NS boing.ugly.
    263 __EOF
    264 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans3/query.log - >/dev/null || ret=1
    265 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans4/query.log - >/dev/null || ret=1
    266 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    267 if [ $ret != 0 ]; then echo_i "failed"; fi
    268 status=$((status + ret))
    269 $RNDCCMD 10.53.0.7 flush
    270 
    271 n=$((n + 1))
    272 echo_i "information that minimization was unsuccessful for .ugly is logged in relaxed mode ($n)"
    273 ret=0
    274 wait_for_log 5 "success resolving 'icky.icky.icky.ptang.zoop.boing.ugly/A' after disabling qname minimization" ns7/named.run >/dev/null || ret=1
    275 if [ $ret != 0 ]; then echo_i "failed"; fi
    276 status=$((status + ret))
    277 
    278 n=$((n + 1))
    279 echo_i "query for .slow is properly minimized when qname-minimization is on ($n)"
    280 ret=0
    281 $CLEANQL
    282 $RNDCCMD 10.53.0.6 flush
    283 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.6 >dig.out.test$n
    284 sleep 5
    285 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    286 grep "icky.icky.icky.ptang.zoop.boing.slow. 1	IN A	192.0.2.1" dig.out.test$n >/dev/null || ret=1
    287 sort ans2/query.log >ans2/query.log.sorted
    288 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    289 ADDR a.bit.longer.ns.name.slow.
    290 ADDR a.bit.longer.ns.name.slow.
    291 ADDR ns2.slow.
    292 ADDR ns3.slow.
    293 ADDR ns3.slow.
    294 NS boing.slow.
    295 NS slow.
    296 NS zoop.boing.slow.
    297 __EOF
    298 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1
    299 NS zoop.boing.slow.
    300 NS ptang.zoop.boing.slow.
    301 NS icky.ptang.zoop.boing.slow.
    302 __EOF
    303 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1
    304 NS icky.ptang.zoop.boing.slow.
    305 NS icky.icky.ptang.zoop.boing.slow.
    306 ADDR icky.icky.icky.ptang.zoop.boing.slow.
    307 __EOF
    308 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    309 if [ $ret != 0 ]; then echo_i "failed"; fi
    310 status=$((status + ret))
    311 
    312 n=$((n + 1))
    313 echo_i "query for .ip6.arpa succeeds and skips on proper boundaries when qname-minimization is on ($n)"
    314 ret=0
    315 $CLEANQL
    316 $RNDCCMD 10.53.0.6 flush
    317 $DIG $DIGOPTS -x 2001:4f8::1 @10.53.0.6 >dig.out.test$n
    318 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    319 grep "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 1 IN PTR nee.com." dig.out.test$n >/dev/null || ret=1
    320 sleep 1
    321 grep -v ADDR ans2/query.log >ans2/query.log.trimmed
    322 cat <<__EOF | diff ans2/query.log.trimmed - >/dev/null || ret=1
    323 NS 1.0.0.2.ip6.arpa.
    324 NS 8.f.4.0.1.0.0.2.ip6.arpa.
    325 NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa.
    326 NS 0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa.
    327 NS 0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa.
    328 PTR 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa.
    329 __EOF
    330 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    331 if [ $ret != 0 ]; then echo_i "failed"; fi
    332 status=$((status + ret))
    333 
    334 n=$((n + 1))
    335 echo_i "query for multiple label name skips after 7th label ($n)"
    336 ret=0
    337 $CLEANQL
    338 $RNDCCMD 10.53.0.6 flush
    339 $DIG $DIGOPTS more.icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 >dig.out.test$n
    340 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    341 grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN	A 192.0.2.2" dig.out.test$n >/dev/null || ret=1
    342 sleep 1
    343 sort ans2/query.log >ans2/query.log.sorted
    344 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    345 ADDR a.bit.longer.ns.name.good.
    346 ADDR a.bit.longer.ns.name.good.
    347 ADDR ns2.good.
    348 ADDR ns3.good.
    349 ADDR ns3.good.
    350 NS boing.good.
    351 NS good.
    352 NS zoop.boing.good.
    353 __EOF
    354 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1
    355 NS zoop.boing.good.
    356 NS ptang.zoop.boing.good.
    357 NS icky.ptang.zoop.boing.good.
    358 __EOF
    359 # There's no NS icky.icky.icky.ptang.zoop.boing.good. query - we skipped it.
    360 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1
    361 NS icky.ptang.zoop.boing.good.
    362 NS icky.icky.ptang.zoop.boing.good.
    363 ADDR more.icky.icky.icky.ptang.zoop.boing.good.
    364 __EOF
    365 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    366 if [ $ret != 0 ]; then echo_i "failed"; fi
    367 status=$((status + ret))
    368 
    369 n=$((n + 1))
    370 echo_i "qname minimization is disabled when forwarding ($n)"
    371 ret=0
    372 $CLEANQL
    373 $RNDCCMD 10.53.0.7 flush
    374 $DIG $DIGOPTS a.bit.longer.ns.name.fwd. @10.53.0.7 >dig.out.test$n
    375 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    376 grep "a.bit.longer.ns.name.fwd. 1	IN	A	10.53.0.4" dig.out.test$n >/dev/null || ret=1
    377 sleep 1
    378 cat <<__EOF | diff ans2/query.log - >/dev/null || ret=1
    379 ADDR a.bit.longer.ns.name.fwd.
    380 __EOF
    381 for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    382 if [ $ret != 0 ]; then echo_i "failed"; fi
    383 status=$((status + ret))
    384 
    385 n=$((n + 1))
    386 echo_i "qname minimization resolves unusual ip6.arpa. names ($n)"
    387 ret=0
    388 $CLEANQL
    389 $DIG $DIGOPTS test1.test2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.0.9.4.1.1.1.1.8.2.6.0.1.0.0.2.ip6.arpa. txt @10.53.0.7 >dig.out.test$n 2>&1
    390 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    391 # Expected output in dig.out.test$n:
    392 # ;; ANSWER SECTION:
    393 # test1.test2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.0.9.4.1.1.1.1.8.2.6.0.1.0.0.2.ip6.arpa. 1 IN TXT "long_ip6_name"
    394 grep 'ip6\.arpa.*TXT.*long_ip6_name' dig.out.test$n >/dev/null || ret=1
    395 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    396 if [ $ret != 0 ]; then echo_i "failed"; fi
    397 status=$((status + ret))
    398 
    399 # Below are test cases for GL #2665: The QNAME minimization (if enabled) should
    400 # also occur on the second query, after the RRsets have expired from cache.
    401 # BIND will still have the entries in cache, but marked stale. These stale
    402 # entries should not prevent the resolver from minimizing the QNAME.
    403 # We query for the test domain a.b.stale. in all cases (QNAME minimization off,
    404 # strict mode, and relaxed mode) and expect it to behave the same the second
    405 # time when we have a stale delegation structure in cache.
    406 n=$((n + 1))
    407 echo_i "query for .stale is not minimized when qname-minimization is off ($n)"
    408 ret=0
    409 $CLEANQL
    410 $RNDCCMD 10.53.0.5 flush
    411 $DIG $DIGOPTS @10.53.0.5 txt a.b.stale. >dig.out.test$n
    412 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    413 grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n >/dev/null || ret=1
    414 sleep 1
    415 echo "TXT a.b.stale." | diff ans2/query.log - >/dev/null || ret=1
    416 echo "TXT a.b.stale." | diff ans3/query.log - >/dev/null || ret=1
    417 test -f ans4/query.log && ret=1
    418 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    419 if [ $ret != 0 ]; then echo_i "failed"; fi
    420 status=$((status + ret))
    421 
    422 n=$((n + 1))
    423 echo_i "query for .stale is properly minimized when qname-minimization is in strict mode ($n)"
    424 ret=0
    425 $CLEANQL
    426 $RNDCCMD 10.53.0.6 flush
    427 $DIG $DIGOPTS @10.53.0.6 txt a.b.stale. >dig.out.test$n
    428 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    429 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1
    430 sleep 1
    431 sort ans2/query.log >ans2/query.log.sorted
    432 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    433 ADDR ns.b.stale.
    434 ADDR ns2.stale.
    435 NS b.stale.
    436 NS stale.
    437 __EOF
    438 test -f ans3/query.log && ret=1
    439 sort ans4/query.log >ans4/query.log.sorted
    440 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1
    441 ADDR ns.b.stale.
    442 NS b.stale.
    443 TXT a.b.stale.
    444 __EOF
    445 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    446 if [ $ret != 0 ]; then echo_i "failed"; fi
    447 status=$((status + ret))
    448 
    449 n=$((n + 1))
    450 echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode ($n)"
    451 ret=0
    452 $CLEANQL
    453 $RNDCCMD 10.53.0.7 flush
    454 $DIG $DIGOPTS @10.53.0.7 txt a.b.stale. >dig.out.test$n
    455 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    456 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1
    457 sleep 1
    458 sort ans2/query.log >ans2/query.log.sorted
    459 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    460 ADDR ns.b.stale.
    461 ADDR ns2.stale.
    462 NS b.stale.
    463 __EOF
    464 test -f ans3/query.log && ret=1
    465 sort ans4/query.log >ans4/query.log.sorted
    466 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1
    467 ADDR ns.b.stale.
    468 TXT a.b.stale.
    469 __EOF
    470 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    471 if [ $ret != 0 ]; then echo_i "failed"; fi
    472 status=$((status + ret))
    473 
    474 echo_i "sleep 2, allow entries in cache to go stale"
    475 sleep 2
    476 
    477 n=$((n + 1))
    478 echo_i "query for .stale is not minimized when qname-minimization is off (stale cache) ($n)"
    479 ret=0
    480 $CLEANQL
    481 $DIG $DIGOPTS @10.53.0.5 txt a.b.stale. >dig.out.test$n
    482 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    483 grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n >/dev/null || ret=1
    484 sleep 1
    485 echo "TXT a.b.stale." | diff ans2/query.log - >/dev/null || ret=1
    486 echo "TXT a.b.stale." | diff ans3/query.log - >/dev/null || ret=1
    487 test -f ans4/query.log && ret=1
    488 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    489 if [ $ret != 0 ]; then echo_i "failed"; fi
    490 status=$((status + ret))
    491 
    492 n=$((n + 1))
    493 echo_i "query for .stale is properly minimized when qname-minimization is in strict mode (stale cache) ($n)"
    494 ret=0
    495 $CLEANQL
    496 $DIG $DIGOPTS @10.53.0.6 txt a.b.stale. >dig.out.test$n
    497 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    498 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1
    499 sleep 1
    500 sort ans2/query.log >ans2/query.log.sorted
    501 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    502 NS b.stale.
    503 NS stale.
    504 __EOF
    505 test -f ans3/query.log && ret=1
    506 sort ans4/query.log >ans4/query.log.sorted
    507 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1
    508 NS b.stale.
    509 TXT a.b.stale.
    510 __EOF
    511 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    512 if [ $ret != 0 ]; then echo_i "failed"; fi
    513 status=$((status + ret))
    514 
    515 n=$((n + 1))
    516 echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode (stale cache) ($n)"
    517 ret=0
    518 $CLEANQL
    519 $DIG $DIGOPTS @10.53.0.7 txt a.b.stale. >dig.out.test$n
    520 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1
    521 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1
    522 sleep 1
    523 sort ans2/query.log >ans2/query.log.sorted
    524 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1
    525 NS b.stale.
    526 __EOF
    527 test -f ans3/query.log && ret=1
    528 sort ans4/query.log >ans4/query.log.sorted
    529 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1
    530 TXT a.b.stale.
    531 __EOF
    532 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
    533 if [ $ret != 0 ]; then echo_i "failed"; fi
    534 status=$((status + ret))
    535 
    536 echo_i "exit status: $status"
    537 [ $status -eq 0 ] || exit 1
    538