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