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 https://mozilla.org/MPL/2.0/. 8# 9# See the COPYRIGHT file distributed with this work for additional 10# information regarding copyright ownership. 11 12#shellcheck source=conf.sh 13SYSTEMTESTTOP=.. 14. "$SYSTEMTESTTOP/conf.sh" 15 16dig_with_opts() { 17 "$DIG" -p "${PORT}" "$@" 18} 19 20wait_for_pid() ( 21 for pid in "$@"; do 22 kill -0 "$pid" 2>/dev/null && return 1 23 done 24 return 0 25) 26 27status=0 28n=0 29 30n=$((n+1)) 31echo_i "check lookups against TTL=0 records ($n)" 32i=0 33ret=0 34passes=10 35dig_with_opts @10.53.0.2 axfr example | grep -v "^ds0" | \ 36awk '$2 == "0" { print "-q", $1, $4; print "-q", "zzz"$1, $4;}' > query.list 37 38# add 1/5 second per query 39timeout=$(($(wc -l < query.list) / 5)) 40while [ $i -lt $passes ] 41do 42 (dig_with_opts @10.53.0.3 -f query.list > "dig.out$i.1.test$n") & pid1="$!" 43 (dig_with_opts @10.53.0.3 -f query.list > "dig.out$i.2.test$n") & pid2="$!" 44 (dig_with_opts @10.53.0.3 -f query.list > "dig.out$i.3.test$n") & pid3="$!" 45 (dig_with_opts @10.53.0.3 -f query.list > "dig.out$i.4.test$n") & pid4="$!" 46 (dig_with_opts @10.53.0.3 -f query.list > "dig.out$i.5.test$n") & pid5="$!" 47 (dig_with_opts @10.53.0.3 -f query.list > "dig.out$i.6.test$n") & pid6="$!" 48 49 retry_quiet "$timeout" wait_for_pid "$pid1" "$pid2" "$pid3" "$pid4" "$pid5" "$pid6" || ret=1 50 kill -TERM "$pid1" "$pid2" "$pid3" "$pid4" "$pid5" "$pid6" 2>/dev/null 51 52 wait "$pid1" || ret=1 53 wait "$pid2" || ret=1 54 wait "$pid3" || ret=1 55 wait "$pid4" || ret=1 56 wait "$pid5" || ret=1 57 wait "$pid6" || ret=1 58 59 grep "status: SERVFAIL" "dig.out$i.1.test$n" > /dev/null && ret=1 60 grep "status: SERVFAIL" "dig.out$i.2.test$n" > /dev/null && ret=1 61 grep "status: SERVFAIL" "dig.out$i.3.test$n" > /dev/null && ret=1 62 grep "status: SERVFAIL" "dig.out$i.4.test$n" > /dev/null && ret=1 63 grep "status: SERVFAIL" "dig.out$i.5.test$n" > /dev/null && ret=1 64 grep "status: SERVFAIL" "dig.out$i.6.test$n" > /dev/null && ret=1 65 [ $ret = 1 ] && break 66 i=$((i+1)) 67 echo_i "successfully completed pass $i of $passes" 68done 69if [ $ret != 0 ]; then echo_i "failed"; fi 70status=$((status+ret)) 71 72repeat_query() ( 73 i=0 74 while [ "$i" -lt "$1" ]; do 75 dig_with_opts +short "@$2" "$3" | tee "dig.out$i.test$n" || return 1 76 i=$((i+1)) 77 done 78) 79 80count_unique() ( 81 repeat_query "$@" | sort -u | wc -l 82) 83 84n=$((n+1)) 85echo_i "check repeated recursive lookups of non recurring TTL=0 responses get new values ($n)" 86ret=0 87repeats=9 88count=$(count_unique "$repeats" 10.53.0.3 foo.increment) 89if [ "$count" -ne "$repeats" ] ; then echo_i "failed (count=$count, repeats=$repeats)"; ret=1; fi 90status=$((status+ret)) 91 92n=$((n+1)) 93echo_i "check lookups against TTL=1 records ($n)" 94i=0 95passes=10 96ret=0 97while [ $i -lt $passes ] 98do 99 dig_with_opts @10.53.0.3 www.one.tld > "dig.out$i.1.test$n" || ret=1 100 dig_with_opts @10.53.0.3 www.one.tld > "dig.out$i.2.test$n" || ret=1 101 dig_with_opts @10.53.0.3 www.one.tld > "dig.out$i.3.test$n" || ret=1 102 dig_with_opts @10.53.0.3 www.one.tld > "dig.out$i.4.test$n" || ret=1 103 dig_with_opts @10.53.0.3 www.one.tld > "dig.out$i.5.test$n" || ret=1 104 dig_with_opts @10.53.0.3 www.one.tld > "dig.out$i.6.test$n" || ret=1 105 grep "status: SERVFAIL" "dig.out$i.1.test$n" > /dev/null && ret=1 106 grep "status: SERVFAIL" "dig.out$i.2.test$n" > /dev/null && ret=1 107 grep "status: SERVFAIL" "dig.out$i.3.test$n" > /dev/null && ret=1 108 grep "status: SERVFAIL" "dig.out$i.4.test$n" > /dev/null && ret=1 109 grep "status: SERVFAIL" "dig.out$i.5.test$n" > /dev/null && ret=1 110 grep "status: SERVFAIL" "dig.out$i.6.test$n" > /dev/null && ret=1 111 [ $ret = 1 ] && break 112 i=$((i+1)) 113 echo_i "successfully completed pass $i of $passes" 114 sleep 1 115done 116if [ $ret != 0 ]; then echo_i "failed"; fi 117status=$((status+ret)) 118 119echo_i "exit status: $status" 120[ "$status" -eq 0 ] || exit 1 121