Home | History | Annotate | Line # | Download | only in dnstap
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 DIGOPTS="+short -p ${PORT}"
     16 RNDCCMD="$RNDC -p ${CONTROLPORT} -c ../common/rndc.conf"
     17 
     18 status=0
     19 
     20 for bad in bad-*.conf
     21 do
     22 	ret=0
     23 	echo_i "checking that named-checkconf detects error in $bad"
     24 	$CHECKCONF $bad > /dev/null 2>&1
     25 	if [ $? != 1 ]; then echo_i "failed"; ret=1; fi
     26 	status=`expr $status + $ret`
     27 done
     28 
     29 for good in good-*.conf
     30 do
     31 	ret=0
     32 	echo_i "checking that named-checkconf detects no error in $good"
     33 	$CHECKCONF $good > /dev/null 2>&1
     34 	if [ $? != 0 ]; then echo_i "failed"; ret=1; fi
     35 	status=`expr $status + $ret`
     36 done
     37 
     38 echo_i "wait for servers to finish loading"
     39 ret=0
     40 wait_for_log 20 "all zones loaded" ns1/named.run || ret=1
     41 wait_for_log 20 "all zones loaded" ns2/named.run || ret=1
     42 wait_for_log 20 "all zones loaded" ns3/named.run || ret=1
     43 wait_for_log 20 "all zones loaded" ns4/named.run || ret=1
     44 if [ $ret != 0 ]; then echo_i "failed"; fi
     45 status=`expr $status + $ret`
     46 
     47 # both the 'a.example/A' lookup and the './NS' lookup to ns1
     48 # need tocomplete before reopening/rolling for the counts to
     49 # be correct.
     50 
     51 $DIG $DIGOPTS @10.53.0.3 a.example > dig.out
     52 wait_for_log 20 "(./NS): query_reset" ns1/named.run || true
     53 
     54 # check three different dnstap reopen/roll methods:
     55 # ns1: dnstap-reopen; ns2: dnstap -reopen; ns3: dnstap -roll
     56 mv ns1/dnstap.out ns1/dnstap.out.save
     57 mv ns2/dnstap.out ns2/dnstap.out.save
     58 
     59 if [ -n "$FSTRM_CAPTURE" ] ; then
     60 	$FSTRM_CAPTURE -t protobuf:dnstap.Dnstap -u ns4/dnstap.out \
     61 		-w dnstap.out > fstrm_capture.out 2>&1 &
     62 	fstrm_capture_pid=$!
     63 fi
     64 
     65 $RNDCCMD -s 10.53.0.1 dnstap-reopen | sed 's/^/ns1 /' | cat_i
     66 $RNDCCMD -s 10.53.0.2 dnstap -reopen | sed 's/^/ns2 /' | cat_i
     67 $RNDCCMD -s 10.53.0.3 dnstap -roll | sed 's/^/ns3 /' | cat_i
     68 $RNDCCMD -s 10.53.0.4 dnstap -reopen | sed 's/^/ns4 /' | cat_i
     69 
     70 $DIG $DIGOPTS @10.53.0.3 a.example > dig.out
     71 
     72 # send an UPDATE to ns2
     73 $NSUPDATE <<- EOF
     74 server 10.53.0.2 ${PORT}
     75 zone example
     76 update add b.example 3600 in a 10.10.10.10
     77 send
     78 EOF
     79 
     80 # XXX: file output should be flushed once a second according
     81 # to the libfstrm source, but it doesn't seem to happen until
     82 # enough data has accumulated. to get all the output, we stop
     83 # the name servers, forcing a flush on shutdown. it would be
     84 # nice to find a better way to do this.
     85 $RNDCCMD -s 10.53.0.1 stop | sed 's/^/ns1 /' | cat_i
     86 $RNDCCMD -s 10.53.0.2 stop | sed 's/^/ns2 /' | cat_i
     87 $RNDCCMD -s 10.53.0.3 stop | sed 's/^/ns3 /' | cat_i
     88 
     89 sleep 1
     90 
     91 echo_i "checking initial message counts"
     92 
     93 udp1=`$DNSTAPREAD ns1/dnstap.out.save | grep "UDP " | wc -l`
     94 tcp1=`$DNSTAPREAD ns1/dnstap.out.save | grep "TCP " | wc -l`
     95 aq1=`$DNSTAPREAD ns1/dnstap.out.save | grep "AQ " | wc -l`
     96 ar1=`$DNSTAPREAD ns1/dnstap.out.save | grep "AR " | wc -l`
     97 cq1=`$DNSTAPREAD ns1/dnstap.out.save | grep "CQ " | wc -l`
     98 cr1=`$DNSTAPREAD ns1/dnstap.out.save | grep "CR " | wc -l`
     99 rq1=`$DNSTAPREAD ns1/dnstap.out.save | grep "RQ " | wc -l`
    100 rr1=`$DNSTAPREAD ns1/dnstap.out.save | grep "RR " | wc -l`
    101 uq1=`$DNSTAPREAD ns1/dnstap.out.save | grep "UQ " | wc -l`
    102 ur1=`$DNSTAPREAD ns1/dnstap.out.save | grep "UR " | wc -l`
    103 
    104 udp2=`$DNSTAPREAD ns2/dnstap.out.save | grep "UDP " | wc -l`
    105 tcp2=`$DNSTAPREAD ns2/dnstap.out.save | grep "TCP " | wc -l`
    106 aq2=`$DNSTAPREAD ns2/dnstap.out.save | grep "AQ " | wc -l`
    107 ar2=`$DNSTAPREAD ns2/dnstap.out.save | grep "AR " | wc -l`
    108 cq2=`$DNSTAPREAD ns2/dnstap.out.save | grep "CQ " | wc -l`
    109 cr2=`$DNSTAPREAD ns2/dnstap.out.save | grep "CR " | wc -l`
    110 rq2=`$DNSTAPREAD ns2/dnstap.out.save | grep "RQ " | wc -l`
    111 rr2=`$DNSTAPREAD ns2/dnstap.out.save | grep "RR " | wc -l`
    112 uq2=`$DNSTAPREAD ns2/dnstap.out.save | grep "UQ " | wc -l`
    113 ur2=`$DNSTAPREAD ns2/dnstap.out.save | grep "UR " | wc -l`
    114 
    115 mv ns3/dnstap.out.0 ns3/dnstap.out.save
    116 udp3=`$DNSTAPREAD ns3/dnstap.out.save | grep "UDP " | wc -l`
    117 tcp3=`$DNSTAPREAD ns3/dnstap.out.save | grep "TCP " | wc -l`
    118 aq3=`$DNSTAPREAD ns3/dnstap.out.save | grep "AQ " | wc -l`
    119 ar3=`$DNSTAPREAD ns3/dnstap.out.save | grep "AR " | wc -l`
    120 cq3=`$DNSTAPREAD ns3/dnstap.out.save | grep "CQ " | wc -l`
    121 cr3=`$DNSTAPREAD ns3/dnstap.out.save | grep "CR " | wc -l`
    122 rq3=`$DNSTAPREAD ns3/dnstap.out.save | grep "RQ " | wc -l`
    123 rr3=`$DNSTAPREAD ns3/dnstap.out.save | grep "RR " | wc -l`
    124 uq3=`$DNSTAPREAD ns3/dnstap.out.save | grep "UQ " | wc -l`
    125 ur3=`$DNSTAPREAD ns3/dnstap.out.save | grep "UR " | wc -l`
    126 
    127 echo_i "checking UDP message counts"
    128 ret=0
    129 [ $udp1 -eq 0 ] || {
    130 	echo_i "ns1 $udp1 expected 0"
    131 	ret=1
    132 }
    133 [ $udp2 -eq 2 ] || {
    134 	echo_i "ns2 $udp2 expected 2"
    135 	ret=1
    136 }
    137 [ $udp3 -eq 4 ] || {
    138 	echo_i "ns3 $udp3 expected 4"
    139 	ret=1
    140 }
    141 if [ $ret != 0 ]; then echo_i "failed"; fi
    142 status=`expr $status + $ret`
    143 
    144 echo_i "checking TCP message counts"
    145 ret=0
    146 [ $tcp1 -eq 6 ] || {
    147 	echo_i "ns1 $tcp1 expected 6"
    148 	ret=1
    149 }
    150 [ $tcp2 -eq 2 ] || {
    151 	echo_i "ns2 $tcp2 expected 2"
    152 	ret=1
    153 }
    154 [ $tcp3 -eq 6 ] || {
    155 	echo_i "ns3 $tcp3 expected 6"
    156 	ret=1
    157 }
    158 if [ $ret != 0 ]; then echo_i "failed"; fi
    159 status=`expr $status + $ret`
    160 
    161 echo_i "checking AUTH_QUERY message counts"
    162 ret=0
    163 [ $aq1 -eq 3 ] || {
    164 	echo_i "ns1 $aq1 exepcted 3"
    165 	ret=1
    166 }
    167 [ $aq2 -eq 2 ] || {
    168 	echo_i "ns2 $aq2 expected 2"
    169 	ret=1
    170 }
    171 [ $aq3 -eq 1 ] || {
    172 	echo_i "ns3 $aq3 expected 1"
    173 	ret=1
    174 }
    175 if [ $ret != 0 ]; then echo_i "failed"; fi
    176 status=`expr $status + $ret`
    177 
    178 echo_i "checking AUTH_RESPONSE message counts"
    179 ret=0
    180 [ $ar1 -eq 2 ] || {
    181 	echo_i "ns1 $ar1 expected 2"
    182 	ret=1
    183 }
    184 [ $ar2 -eq 1 ] || {
    185 	echo_i "ns2 $ar2 expected 1"
    186 	ret=1
    187 }
    188 [ $ar3 -eq 0 ] || {
    189 	echo_i "ns3 $ar3 expected 0"
    190 	ret=1
    191 }
    192 if [ $ret != 0 ]; then echo_i "failed"; fi
    193 status=`expr $status + $ret`
    194 
    195 echo_i "checking CLIENT_QUERY message counts"
    196 ret=0
    197 [ $cq1 -eq 0 ] || {
    198 	echo_i "ns1 $cq1 expected 0"
    199 	ret=1
    200 }
    201 [ $cq2 -eq 0 ] || {
    202 	echo_i "ns2 $cq2 expected 0"
    203 	ret=1
    204 }
    205 [ $cq3 -eq 1 ] || {
    206 	echo_i "ns3 $cq3 expected 1"
    207 	ret=1
    208 }
    209 if [ $ret != 0 ]; then echo_i "failed"; fi
    210 status=`expr $status + $ret`
    211 
    212 echo_i "checking CLIENT_RESPONSE message counts"
    213 ret=0
    214 [ $cr1 -eq 1 ] || {
    215 	echo_i "ns1 $cr1 expected 1"
    216 	ret=1
    217 }
    218 [ $cr2 -eq 1 ] || {
    219 	echo_i "ns2 $cr2 expected 1"
    220 	ret=1
    221 }
    222 [ $cr3 -eq 2 ] || {
    223 	echo_i "ns3 $cr3 expected 2"
    224 	ret=1
    225 }
    226 if [ $ret != 0 ]; then echo_i "failed"; fi
    227 status=`expr $status + $ret`
    228 
    229 echo_i "checking RESOLVER_QUERY message counts"
    230 ret=0
    231 [ $rq1 -eq 0 ] || {
    232 	echo_i "ns1 $rq1 expected 0"
    233 	ret=1
    234 }
    235 [ $rq2 -eq 0 ] || {
    236 	echo_i "ns2 $rq2 expected 0"
    237 	ret=1
    238 }
    239 [ $rq3 -eq 3 ] || {
    240 	echo_i "ns3 $rq3 expected 3"
    241 	ret=1
    242 }
    243 if [ $ret != 0 ]; then echo_i "failed"; fi
    244 status=`expr $status + $ret`
    245 
    246 echo_i "checking RESOLVER_RESPONSE message counts"
    247 ret=0
    248 [ $rr1 -eq 0 ] || {
    249 	echo_i "ns1 $rr1 expected 0"
    250 	ret=1
    251 }
    252 [ $rr2 -eq 0 ] || {
    253 	echo_i "ns2 $rr2 expected 0"
    254 	ret=1
    255 }
    256 [ $rr3 -eq 3 ] || {
    257 	echo_i "ns3 $rr3 expected 3"
    258 	ret=1
    259 }
    260 if [ $ret != 0 ]; then echo_i "failed"; fi
    261 status=`expr $status + $ret`
    262 
    263 echo_i "checking UPDATE_QUERY message counts"
    264 ret=0
    265 [ $uq1 -eq 0 ] || {
    266 	echo_i "ns1 $uq1 expected 0"
    267 	ret=1
    268 }
    269 [ $uq2 -eq 0 ] || {
    270 	echo_i "ns2 $uq2 expected 0"
    271 	ret=1
    272 }
    273 [ $uq3 -eq 0 ] || {
    274 	echo_i "ns3 $uq3 expected 0"
    275 	ret=1
    276 }
    277 if [ $ret != 0 ]; then echo_i "failed"; fi
    278 status=`expr $status + $ret`
    279 
    280 echo_i "checking UPDATE_RESPONSE message counts"
    281 ret=0
    282 [ $ur1 -eq 0 ] || {
    283 	echo_i "ns1 $ur1 expected 0"
    284 	ret=1
    285 }
    286 [ $ur2 -eq 0 ] || {
    287 	echo_i "ns2 $ur2 expected 0"
    288 	ret=1
    289 }
    290 [ $ur3 -eq 0 ] || {
    291 	echo_i "ns3 $ur3 expected 0"
    292 	ret=1
    293 }
    294 if [ $ret != 0 ]; then echo_i "failed"; fi
    295 status=`expr $status + $ret`
    296 
    297 echo_i "checking reopened message counts"
    298 
    299 udp1=`$DNSTAPREAD ns1/dnstap.out | grep "UDP " | wc -l`
    300 tcp1=`$DNSTAPREAD ns1/dnstap.out | grep "TCP " | wc -l`
    301 aq1=`$DNSTAPREAD ns1/dnstap.out | grep "AQ " | wc -l`
    302 ar1=`$DNSTAPREAD ns1/dnstap.out | grep "AR " | wc -l`
    303 cq1=`$DNSTAPREAD ns1/dnstap.out | grep "CQ " | wc -l`
    304 cr1=`$DNSTAPREAD ns1/dnstap.out | grep "CR " | wc -l`
    305 rq1=`$DNSTAPREAD ns1/dnstap.out | grep "RQ " | wc -l`
    306 rr1=`$DNSTAPREAD ns1/dnstap.out | grep "RR " | wc -l`
    307 uq1=`$DNSTAPREAD ns1/dnstap.out | grep "UQ " | wc -l`
    308 ur1=`$DNSTAPREAD ns1/dnstap.out | grep "UR " | wc -l`
    309 
    310 udp2=`$DNSTAPREAD ns2/dnstap.out | grep "UDP " | wc -l`
    311 tcp2=`$DNSTAPREAD ns2/dnstap.out | grep "TCP " | wc -l`
    312 aq2=`$DNSTAPREAD ns2/dnstap.out | grep "AQ " | wc -l`
    313 ar2=`$DNSTAPREAD ns2/dnstap.out | grep "AR " | wc -l`
    314 cq2=`$DNSTAPREAD ns2/dnstap.out | grep "CQ " | wc -l`
    315 cr2=`$DNSTAPREAD ns2/dnstap.out | grep "CR " | wc -l`
    316 rq2=`$DNSTAPREAD ns2/dnstap.out | grep "RQ " | wc -l`
    317 rr2=`$DNSTAPREAD ns2/dnstap.out | grep "RR " | wc -l`
    318 uq2=`$DNSTAPREAD ns2/dnstap.out | grep "UQ " | wc -l`
    319 ur2=`$DNSTAPREAD ns2/dnstap.out | grep "UR " | wc -l`
    320 
    321 udp3=`$DNSTAPREAD ns3/dnstap.out | grep "UDP " | wc -l`
    322 tcp3=`$DNSTAPREAD ns3/dnstap.out | grep "TCP " | wc -l`
    323 aq3=`$DNSTAPREAD ns3/dnstap.out | grep "AQ " | wc -l`
    324 ar3=`$DNSTAPREAD ns3/dnstap.out | grep "AR " | wc -l`
    325 cq3=`$DNSTAPREAD ns3/dnstap.out | grep "CQ " | wc -l`
    326 cr3=`$DNSTAPREAD ns3/dnstap.out | grep "CR " | wc -l`
    327 rq3=`$DNSTAPREAD ns3/dnstap.out | grep "RQ " | wc -l`
    328 rr3=`$DNSTAPREAD ns3/dnstap.out | grep "RR " | wc -l`
    329 uq3=`$DNSTAPREAD ns3/dnstap.out | grep "UQ " | wc -l`
    330 ur3=`$DNSTAPREAD ns3/dnstap.out | grep "UR " | wc -l`
    331 
    332 echo_i "checking UDP message counts"
    333 ret=0
    334 [ $udp1 -eq 0 ] || {
    335 	echo_i "ns1 $udp1 expected 0"
    336 	ret=1
    337 }
    338 [ $udp2 -eq 2 ] || {
    339 	echo_i "ns2 $udp2 expected 2"
    340 	ret=1
    341 }
    342 [ $udp3 -eq 2 ] || {
    343 	echo_i "ns3 $udp3 expected 2"
    344 	ret=1
    345 }
    346 if [ $ret != 0 ]; then echo_i "failed"; fi
    347 status=`expr $status + $ret`
    348 
    349 echo_i "checking TCP message counts"
    350 ret=0
    351 [ $tcp1 -eq 0 ] || {
    352 	echo_i "ns1 $tcp1 expected 0"
    353 	ret=1
    354 }
    355 [ $tcp2 -eq 0 ] || {
    356 	echo_i "ns2 $tcp2 expected 0"
    357 	ret=1
    358 }
    359 [ $tcp3 -eq 0 ] || {
    360 	echo_i "ns3 $tcp3 expected 0"
    361 	ret=1
    362 }
    363 if [ $ret != 0 ]; then echo_i "failed"; fi
    364 status=`expr $status + $ret`
    365 
    366 echo_i "checking AUTH_QUERY message counts"
    367 ret=0
    368 [ $aq1 -eq 0 ] || {
    369 	echo_i "ns1 $aq1 exepcted 0"
    370 	ret=1
    371 }
    372 [ $aq2 -eq 0 ] || {
    373 	echo_i "ns2 $aq2 expected 0"
    374 	ret=1
    375 }
    376 [ $aq3 -eq 0 ] || {
    377 	echo_i "ns3 $aq3 expected 0"
    378 	ret=1
    379 }
    380 if [ $ret != 0 ]; then echo_i "failed"; fi
    381 status=`expr $status + $ret`
    382 
    383 echo_i "checking AUTH_RESPONSE message counts"
    384 ret=0
    385 [ $ar1 -eq 0 ] || {
    386 	echo_i "ns1 $ar1 expected 0"
    387 	ret=1
    388 }
    389 [ $ar2 -eq 0 ] || {
    390 	echo_i "ns2 $ar2 expected 0"
    391 	ret=1
    392 }
    393 [ $ar3 -eq 0 ] || {
    394 	echo_i "ns3 $ar3 expected 0"
    395 	ret=1
    396 }
    397 if [ $ret != 0 ]; then echo_i "failed"; fi
    398 status=`expr $status + $ret`
    399 
    400 echo_i "checking CLIENT_QUERY message counts"
    401 ret=0
    402 [ $cq1 -eq 0 ] || {
    403 	echo_i "ns1 $cq1 expected 0"
    404 	ret=1
    405 }
    406 [ $cq2 -eq 0 ] || {
    407 	echo_i "ns2 $cq2 expected 0"
    408 	ret=1
    409 }
    410 [ $cq3 -eq 1 ] || {
    411 	echo_i "ns3 $cq3 expected 1"
    412 	ret=1
    413 }
    414 if [ $ret != 0 ]; then echo_i "failed"; fi
    415 status=`expr $status + $ret`
    416 
    417 echo_i "checking CLIENT_RESPONSE message counts"
    418 ret=0
    419 [ $cr1 -eq 0 ] || {
    420 	echo_i "ns1 $cr1 expected 0"
    421 	ret=1
    422 }
    423 [ $cr2 -eq 0 ] || {
    424 	echo_i "ns2 $cr2 expected 0"
    425 	ret=1
    426 }
    427 [ $cr3 -eq 1 ] || {
    428 	echo_i "ns3 $cr3 expected 1"
    429 	ret=1
    430 }
    431 if [ $ret != 0 ]; then echo_i "failed"; fi
    432 status=`expr $status + $ret`
    433 
    434 echo_i "checking RESOLVER_QUERY message counts"
    435 ret=0
    436 [ $rq1 -eq 0 ] || {
    437 	echo_i "ns1 $rq1 expected 0"
    438 	ret=1
    439 }
    440 [ $rq2 -eq 0 ] || {
    441 	echo_i "ns2 $rq2 expected 0"
    442 	ret=1
    443 }
    444 [ $rq3 -eq 0 ] || {
    445 	echo_i "ns3 $rq3 expected 0"
    446 	ret=1
    447 }
    448 if [ $ret != 0 ]; then echo_i "failed"; fi
    449 status=`expr $status + $ret`
    450 
    451 echo_i "checking RESOLVER_RESPONSE message counts"
    452 ret=0
    453 [ $rr1 -eq 0 ] || {
    454 	echo_i "ns1 $rr1 expected 0"
    455 	ret=1
    456 }
    457 [ $rr2 -eq 0 ] || {
    458 	echo_i "ns2 $rr2 expected 0"
    459 	ret=1
    460 }
    461 [ $rr3 -eq 0 ] || {
    462 	echo_i "ns3 $rr3 expected 0"
    463 	ret=1
    464 }
    465 if [ $ret != 0 ]; then echo_i "failed"; fi
    466 status=`expr $status + $ret`
    467 
    468 echo_i "checking UPDATE_QUERY message counts"
    469 ret=0
    470 [ $uq1 -eq 0 ] || {
    471 	echo_i "ns1 $uq1 expected 0"
    472 	ret=1
    473 }
    474 [ $uq2 -eq 1 ] || {
    475 	echo_i "ns2 $uq2 expected 1"
    476 	ret=1
    477 }
    478 [ $uq3 -eq 0 ] || {
    479 	echo_i "ns3 $uq3 expected 0"
    480 	ret=1
    481 }
    482 if [ $ret != 0 ]; then echo_i "failed"; fi
    483 status=`expr $status + $ret`
    484 
    485 echo_i "checking UPDATE_RESPONSE message counts"
    486 ret=0
    487 [ $ur1 -eq 0 ] || {
    488 	echo_i "ns1 $ur1 expected 0"
    489 	ret=1
    490 }
    491 [ $ur2 -eq 1 ] || {
    492 	echo_i "ns2 $ur2 expected 1"
    493 	ret=1
    494 }
    495 [ $ur3 -eq 0 ] || {
    496 	echo_i "ns3 $ur3 expected 0"
    497 	ret=1
    498 }
    499 if [ $ret != 0 ]; then echo_i "failed"; fi
    500 status=`expr $status + $ret`
    501 
    502 HAS_PYYAML=0
    503 if [ -n "$PYTHON" ] ; then
    504 	$PYTHON -c "import yaml" 2> /dev/null && HAS_PYYAML=1
    505 fi
    506 
    507 if [ $HAS_PYYAML -ne 0 ] ; then
    508 	echo_i "checking dnstap-read YAML output"
    509 	ret=0
    510         {
    511 	  $PYTHON ydump.py "$DNSTAPREAD" "ns3/dnstap.out.save" > ydump.out || ret=1
    512         } | cat_i
    513 	if [ $ret != 0 ]; then echo_i "failed"; fi
    514 	status=`expr $status + $ret`
    515 fi
    516 
    517 echo_i "checking dnstap-read hex output"
    518 ret=0
    519 hex=`$DNSTAPREAD -x ns3/dnstap.out | tail -1`
    520 echo $hex | $WIRETEST > dnstap.hex
    521 grep 'status: NOERROR' dnstap.hex > /dev/null 2>&1 || ret=1
    522 grep 'ANSWER: 3, AUTHORITY: 1' dnstap.hex > /dev/null 2>&1 || ret=1
    523 if [ $ret != 0 ]; then echo_i "failed"; fi
    524 status=`expr $status + $ret`
    525 
    526 if [ -n "$FSTRM_CAPTURE" ] ; then
    527 	$DIG $DIGOPTS @10.53.0.4 a.example > dig.out
    528 
    529 	# send an UPDATE to ns4
    530 	$NSUPDATE <<- EOF > nsupdate.out 2>&1
    531 	server 10.53.0.4 ${PORT}
    532 	zone example
    533 	update add b.example 3600 in a 10.10.10.10
    534 	send
    535 EOF
    536 	grep "update failed: NOTAUTH" nsupdate.out > /dev/null || ret=1
    537 
    538 	echo_i "checking unix socket message counts"
    539 	sleep 2
    540 	kill $fstrm_capture_pid
    541 	wait
    542 	udp4=`$DNSTAPREAD dnstap.out | grep "UDP " | wc -l`
    543 	tcp4=`$DNSTAPREAD dnstap.out | grep "TCP " | wc -l`
    544 	aq4=`$DNSTAPREAD dnstap.out | grep "AQ " | wc -l`
    545 	ar4=`$DNSTAPREAD dnstap.out | grep "AR " | wc -l`
    546 	cq4=`$DNSTAPREAD dnstap.out | grep "CQ " | wc -l`
    547 	cr4=`$DNSTAPREAD dnstap.out | grep "CR " | wc -l`
    548 	rq4=`$DNSTAPREAD dnstap.out | grep "RQ " | wc -l`
    549 	rr4=`$DNSTAPREAD dnstap.out | grep "RR " | wc -l`
    550 	uq4=`$DNSTAPREAD dnstap.out | grep "UQ " | wc -l`
    551 	ur4=`$DNSTAPREAD dnstap.out | grep "UR " | wc -l`
    552 
    553 	echo_i "checking UDP message counts"
    554 	ret=0
    555 	[ $udp4 -eq 4 ] || {
    556 		echo_i "ns4 $udp4 expected 4"
    557 		ret=1
    558 	}
    559 	if [ $ret != 0 ]; then echo_i "failed"; fi
    560 	status=`expr $status + $ret`
    561 
    562 	echo_i "checking TCP message counts"
    563 	ret=0
    564 	[ $tcp4 -eq 0 ] || {
    565 		echo_i "ns4 $tcp4 expected 0"
    566 		ret=1
    567 	}
    568 	if [ $ret != 0 ]; then echo_i "failed"; fi
    569 	status=`expr $status + $ret`
    570 
    571 	echo_i "checking AUTH_QUERY message counts"
    572 	ret=0
    573 	[ $aq4 -eq 0 ] || {
    574 		echo_i "ns4 $aq4 expected 0"
    575 		ret=1
    576 	}
    577 	if [ $ret != 0 ]; then echo_i "failed"; fi
    578 	status=`expr $status + $ret`
    579 
    580 	echo_i "checking AUTH_RESPONSE message counts"
    581 	ret=0
    582 	[ $ar4 -eq 0 ] || {
    583 		echo_i "ns4 $ar4 expected 0"
    584 		ret=1
    585 	}
    586 	if [ $ret != 0 ]; then echo_i "failed"; fi
    587 	status=`expr $status + $ret`
    588 
    589 	echo_i "checking CLIENT_QUERY message counts"
    590 	ret=0
    591 	[ $cq4 -eq 1 ] || {
    592 		echo_i "ns4 $cq4 expected 1"
    593 		ret=1
    594 	}
    595 	if [ $ret != 0 ]; then echo_i "failed"; fi
    596 	status=`expr $status + $ret`
    597 
    598 	echo_i "checking CLIENT_RESPONSE message counts"
    599 	ret=0
    600 	[ $cr4 -eq 1 ] || {
    601 		echo_i "ns4 $cr4 expected 1"
    602 		ret=1
    603 	}
    604 	if [ $ret != 0 ]; then echo_i "failed"; fi
    605 	status=`expr $status + $ret`
    606 
    607 	echo_i "checking RESOLVER_QUERY message counts"
    608 	ret=0
    609 	[ $rq4 -eq 0 ] || {
    610 		echo_i "ns4 $rq4 expected 0"
    611 		ret=1
    612 	}
    613 	if [ $ret != 0 ]; then echo_i "failed"; fi
    614 	status=`expr $status + $ret`
    615 
    616 	echo_i "checking RESOLVER_RESPONSE message counts"
    617 	ret=0
    618 	[ $rr4 -eq 0 ] || {
    619 		echo_i "ns4 $rr4 expected 0"
    620 		ret=1
    621 	}
    622 
    623 	echo_i "checking UPDATE_QUERY message counts"
    624 	ret=0
    625 	[ $uq4 -eq 1 ] || {
    626 		echo_i "ns4 $uq4 expected 1"
    627 		ret=1
    628 	}
    629 	if [ $ret != 0 ]; then echo_i "failed"; fi
    630 	status=`expr $status + $ret`
    631 
    632 	echo_i "checking UPDATE_RESPONSE message counts"
    633 	ret=0
    634 	[ $ur4 -eq 1 ] || {
    635 		echo_i "ns4 $ur4 expected 1"
    636 		ret=1
    637 	}
    638 	if [ $ret != 0 ]; then echo_i "failed"; fi
    639 	status=`expr $status + $ret`
    640 
    641 	mv dnstap.out dnstap.out.save
    642 
    643 	$FSTRM_CAPTURE -t protobuf:dnstap.Dnstap -u ns4/dnstap.out \
    644 		-w dnstap.out > fstrm_capture.out 2>&1 &
    645 	fstrm_capture_pid=$!
    646 	$RNDCCMD -s 10.53.0.4 dnstap -reopen | sed 's/^/ns4 /' | cat_i
    647 	$DIG $DIGOPTS @10.53.0.4 a.example > dig.out
    648 
    649 	echo_i "checking reopened unix socket message counts"
    650 	sleep 2
    651 	kill $fstrm_capture_pid
    652 	wait
    653 	udp4=`$DNSTAPREAD dnstap.out | grep "UDP " | wc -l`
    654 	tcp4=`$DNSTAPREAD dnstap.out | grep "TCP " | wc -l`
    655 	aq4=`$DNSTAPREAD dnstap.out | grep "AQ " | wc -l`
    656 	ar4=`$DNSTAPREAD dnstap.out | grep "AR " | wc -l`
    657 	cq4=`$DNSTAPREAD dnstap.out | grep "CQ " | wc -l`
    658 	cr4=`$DNSTAPREAD dnstap.out | grep "CR " | wc -l`
    659 	rq4=`$DNSTAPREAD dnstap.out | grep "RQ " | wc -l`
    660 	rr4=`$DNSTAPREAD dnstap.out | grep "RR " | wc -l`
    661 	uq4=`$DNSTAPREAD dnstap.out | grep "UQ " | wc -l`
    662 	ur4=`$DNSTAPREAD dnstap.out | grep "UR " | wc -l`
    663 
    664 	echo_i "checking UDP message counts"
    665 	ret=0
    666 	[ $udp4 -eq 2 ] || {
    667 		echo_i "ns4 $udp4 expected 2"
    668 		ret=1
    669 	}
    670 	if [ $ret != 0 ]; then echo_i "failed"; fi
    671 	status=`expr $status + $ret`
    672 
    673 	echo_i "checking TCP message counts"
    674 	ret=0
    675 	[ $tcp4 -eq 0 ] || {
    676 		echo_i "ns4 $tcp4 expected 0"
    677 		ret=1
    678 	}
    679 	if [ $ret != 0 ]; then echo_i "failed"; fi
    680 	status=`expr $status + $ret`
    681 
    682 	echo_i "checking AUTH_QUERY message counts"
    683 	ret=0
    684 	[ $aq4 -eq 0 ] || {
    685 		echo_i "ns4 $aq4 expected 0"
    686 		ret=1
    687 	}
    688 	if [ $ret != 0 ]; then echo_i "failed"; fi
    689 	status=`expr $status + $ret`
    690 
    691 	echo_i "checking AUTH_RESPONSE message counts"
    692 	ret=0
    693 	[ $ar4 -eq 0 ] || {
    694 		echo_i "ns4 $ar4 expected 0"
    695 		ret=1
    696 	}
    697 	if [ $ret != 0 ]; then echo_i "failed"; fi
    698 	status=`expr $status + $ret`
    699 
    700 	echo_i "checking CLIENT_QUERY message counts"
    701 	ret=0
    702 	[ $cq4 -eq 1 ] || {
    703 		echo_i "ns4 $cq4 expected 1"
    704 		ret=1
    705 	}
    706 	if [ $ret != 0 ]; then echo_i "failed"; fi
    707 	status=`expr $status + $ret`
    708 
    709 	echo_i "checking CLIENT_RESPONSE message counts"
    710 	ret=0
    711 	[ $cr4 -eq 1 ] || {
    712 		echo_i "ns4 $cr4 expected 1"
    713 		ret=1
    714 	}
    715 	if [ $ret != 0 ]; then echo_i "failed"; fi
    716 	status=`expr $status + $ret`
    717 
    718 	echo_i "checking RESOLVER_QUERY message counts"
    719 	ret=0
    720 	[ $rq4 -eq 0 ] || {
    721 		echo_i "ns4 $rq4 expected 0"
    722 		ret=1
    723 	}
    724 	if [ $ret != 0 ]; then echo_i "failed"; fi
    725 	status=`expr $status + $ret`
    726 
    727 	echo_i "checking RESOLVER_RESPONSE message counts"
    728 	ret=0
    729 	[ $rr4 -eq 0 ] || {
    730 		echo_i "ns4 $rr4 expected 0"
    731 		ret=1
    732 	}
    733 
    734 	echo_i "checking UPDATE_QUERY message counts"
    735 	ret=0
    736 	[ $uq4 -eq 0 ] || {
    737 		echo_i "ns4 $uq4 expected 0"
    738 		ret=1
    739 	}
    740 	if [ $ret != 0 ]; then echo_i "failed"; fi
    741 	status=`expr $status + $ret`
    742 
    743 	echo_i "checking UPDATE_RESPONSE message counts"
    744 	ret=0
    745 	[ $ur4 -eq 0 ] || {
    746 		echo_i "ns4 $ur4 expected 0"
    747 		ret=1
    748 	}
    749 	if [ $ret != 0 ]; then echo_i "failed"; fi
    750 	status=`expr $status + $ret`
    751 fi
    752 
    753 echo_i "checking large packet printing"
    754 ret=0
    755 # Expect one occurrence of "opcode: QUERY" below "reponse_message_data" and
    756 # another one below "response_message".
    757 lines=`$DNSTAPREAD -y large-answer.fstrm | grep -c "opcode: QUERY"`
    758 [ $lines -eq 2 ] || ret=1
    759 if [ $ret != 0 ]; then echo_i "failed"; fi
    760 status=`expr $status + $ret`
    761 
    762 test_dnstap_roll() (
    763     ip="$1"
    764     ns="$2"
    765     n="$3"
    766     $RNDCCMD -s "${ip}" dnstap -roll "${n}" | sed "s/^/${ns} /" | cat_i &&
    767     files=$(find "$ns" -name "dnstap.out.[0-9]" | wc -l) &&
    768     test "$files" -le "${n}" && test "$files" -ge "1"
    769 )
    770 
    771 echo_i "checking 'rndc -roll <value>' (no versions)"
    772 ret=0
    773 start_server --noclean --restart --port "${PORT}" dnstap ns3
    774 _repeat 5 test_dnstap_roll 10.53.0.3 ns3 3 || ret=1
    775 if [ $ret != 0 ]; then echo_i "failed"; fi
    776 status=$((status+ret))
    777 
    778 echo_i "checking 'rndc -roll <value>' (versions)"
    779 ret=0
    780 start_server --noclean --restart --port "${PORT}" dnstap ns2
    781 _repeat 5 test_dnstap_roll 10.53.0.2 ns2 3 || ret=1
    782 if [ $ret != 0 ]; then echo_i "failed"; fi
    783 status=$((status+ret))
    784 
    785 echo_i "exit status: $status"
    786 [ "$status" -eq 0 ] || exit 1
    787