diff options
Diffstat (limited to '')
-rwxr-xr-x | src/test/test7.sh | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/test/test7.sh b/src/test/test7.sh new file mode 100755 index 0000000..8e55905 --- /dev/null +++ b/src/test/test7.sh @@ -0,0 +1,83 @@ +#!/bin/sh -xe + +# expect non-zero exit code +malformed_input_fmt() { + FILESTEM="$1" + ! ../dnsperf -vvv -B -d "$srcdir/$FILESTEM.blob" > "$FILESTEM.out" 2>&1 + grep -F "Error: input file contains no data" "$FILESTEM.out" +} + +malformed_input_fmt "empty" +malformed_input_fmt "tooshortlength" +malformed_input_fmt "missingpayload" + +test "$TEST_DNSPERF_WITH_NETWORK" = "1" || exit 0 + +check_sent_and_lost() { + FILESTEM="$1" + EXPECTEDCOUNT="$2" + grep "Queries sent: $EXPECTEDCOUNT$" "$FILESTEM.out" + grep -F "Queries lost: $EXPECTEDCOUNT (" "$FILESTEM.out" +} + +# send to an address which does not reply anyway; +# typically for weird blobs which do not even have DNS header - so we cannot expect a response +blackhole() { + FILESTEM="$1" + EXTRAARGS="$2" + EXPECTEDCOUNT="$3" + ../dnsperf -t 0.001 -vvv -B -d "$srcdir/$FILESTEM.blob" -s 192.0.2.1 $EXTRAARGS > "$FILESTEM.out" 2>&1 + check_sent_and_lost "$FILESTEM" "$EXPECTEDCOUNT" +} +blackhole2() { + FILESTEM="$1" + EXTRAARGS="$2" + EXPECTEDCOUNT="$3" + ../dnsperf -t 0.001 -vvv -B -d "$FILESTEM.blob" -s 192.0.2.1 $EXTRAARGS > "$FILESTEM.out" 2>&1 + check_sent_and_lost "$FILESTEM" "$EXPECTEDCOUNT" +} + +blackhole "emptypayload" "" 1 +blackhole "shortpayload" "" 1 +blackhole "largestudp" "" 1 +# too large for UDP; at least it should not crash +blackhole "largesttcp" "" 0 +grep -F 'failed to send packet' largesttcp.out + +# valid DNS queries as blobs +expect_noerror() { + FILESTEM="$1" + EXTRAARGS="$2" + EXPECTEDCOUNT="$3" + ../dnsperf -vvv -B -d "$srcdir/$FILESTEM.blob" -s 1.1.1.1 $EXTRAARGS > "$FILESTEM.out" 2>&1 + grep "Queries sent: $EXPECTEDCOUNT$" "$FILESTEM.out" + grep -F "Queries completed: $EXPECTEDCOUNT (" "$FILESTEM.out" +} + +# single plain run +expect_noerror "querywithcookie" "" 1 + +# loop over the binary twice +expect_noerror "querywithcookie" "-n 2" 2 + +# multiple queries in one file +expect_noerror "twoquerieswithnsid" "" 2 + +# file too big to cache +rm -f 10queries.tmp.blob +cat "$srcdir/twoquerieswithnsid.blob" "$srcdir/querywithcookie.blob" "$srcdir/emptypayload.blob" \ + "$srcdir/largestudp.blob" "$srcdir/twoquerieswithnsid.blob" "$srcdir/querywithcookie.blob" \ + "$srcdir/emptypayload.blob" "$srcdir/largestudp.blob" \ + > 10queries.tmp.blob +blackhole2 "10queries.tmp" "" 10 + +# repeat non-cacheable file the same twice +blackhole2 "10queries.tmp" "-n 2" 20 + +# large binary on stdin should work too +cat 10queries.tmp.blob | ../dnsperf -t 0.001 -vvv -B -s 192.0.2.1 > "stdinlarge.out" 2>&1 +check_sent_and_lost "stdinlarge" 10 + +# small binary on stdin +cat "$srcdir/twoquerieswithnsid.blob" | ../dnsperf -t 0.001 -vvv -B -s 192.0.2.1 > "stdinsmall.out" 2>&1 +check_sent_and_lost "stdinsmall" 2 |