diff options
Diffstat (limited to 'bin/tests/system/statschannel/tests.sh')
-rw-r--r-- | bin/tests/system/statschannel/tests.sh | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/bin/tests/system/statschannel/tests.sh b/bin/tests/system/statschannel/tests.sh new file mode 100644 index 0000000..780f857 --- /dev/null +++ b/bin/tests/system/statschannel/tests.sh @@ -0,0 +1,215 @@ +#!/bin/sh +# +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGCMD="$DIG @10.53.0.2 -p ${PORT}" +RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" + +if [ ! "$HAVEJSONSTATS" ] +then + unset PERL_JSON + echo_i "JSON was not configured; skipping" >&2 +elif $PERL -e 'use JSON;' 2>/dev/null +then + PERL_JSON=1 +else + unset PERL_JSON + echo_i "JSON tests require JSON library; skipping" >&2 +fi + +if [ ! "$HAVEXMLSTATS" ] +then + unset PERL_XML + echo_i "XML was not configured; skipping" >&2 +elif $PERL -e 'use XML::Simple;' 2>/dev/null +then + PERL_XML=1 +else + unset PERL_XML + echo_i "XML tests require XML::Simple; skipping" >&2 +fi + +if [ ! "$PERL_JSON" -a ! "$PERL_XML" ]; then + echo_i "skipping all tests" + exit 0 +fi + + +gettraffic() { + echo_i "... using $1" + case $1 in + xml) path='xml/v3/traffic' ;; + json) path='json/v1/traffic' ;; + *) return 1 ;; + esac + file=`$PERL fetch.pl -p ${EXTRAPORT1} $path` + $PERL traffic-${1}.pl $file 2>/dev/null | sort > traffic.out.$2 + result=$? + rm -f $file + return $result +} + +status=0 +n=1 +ret=0 +echo_i "fetching traffic size data ($n)" +if [ $PERL_XML ]; then + gettraffic xml x$n || ret=1 + cmp traffic.out.x$n traffic.expect.$n || ret=1 +fi +if [ $PERL_JSON ]; then + gettraffic json j$n || ret=1 + cmp traffic.out.j$n traffic.expect.$n || ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +echo_i "fetching traffic size data after small UDP query ($n)" +$DIGCMD short.example txt > dig.out.$n || ret=1 +if [ $PERL_XML ]; then + gettraffic xml x$n || ret=1 + cmp traffic.out.x$n traffic.expect.$n || ret=1 +fi +if [ $PERL_JSON ]; then + gettraffic json j$n || ret=1 + cmp traffic.out.j$n traffic.expect.$n || ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +n=`expr $n + 1` +echo_i "fetching traffic size data after large UDP query ($n)" +$DIGCMD long.example txt > dig.out.$n || ret=1 +if [ $PERL_XML ]; then + gettraffic xml x$n || ret=1 + cmp traffic.out.x$n traffic.expect.$n || ret=1 +fi +if [ $PERL_JSON ]; then + gettraffic json j$n || ret=1 + cmp traffic.out.j$n traffic.expect.$n || ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +echo_i "fetching traffic size data after small TCP query ($n)" +$DIGCMD +tcp short.example txt > dig.out.$n || ret=1 +if [ $PERL_XML ]; then + gettraffic xml x$n || ret=1 + cmp traffic.out.x$n traffic.expect.$n || ret=1 +fi +if [ $PERL_JSON ]; then + gettraffic json j$n || ret=1 + cmp traffic.out.j$n traffic.expect.$n || ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +echo_i "fetching traffic size data after large TCP query ($n)" +$DIGCMD +tcp long.example txt > dig.out.$n || ret=1 +if [ $PERL_XML ]; then + gettraffic xml x$n || ret=1 + cmp traffic.out.x$n traffic.expect.$n || ret=1 +fi +if [ $PERL_JSON ]; then + gettraffic json j$n || ret=1 + cmp traffic.out.j$n traffic.expect.$n || ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +echo_i "checking consistency between named.stats and xml/json ($n)" +rm -f ns2/named.stats +$DIGCMD +tcp example ns > dig.out.$n || ret=1 +$RNDCCMD 10.53.0.2 stats 2>&1 | sed 's/^/I:ns1 /' +query_count=`awk '/QUERY/ {print $1}' ns2/named.stats` +txt_count=`awk '/TXT/ {print $1}' ns2/named.stats` +noerror_count=`awk '/NOERROR/ {print $1}' ns2/named.stats` +if [ $PERL_XML ]; then + file=`$PERL fetch.pl -p ${EXTRAPORT1} xml/v3/server` + mv $file xml.stats + $PERL server-xml.pl > xml.fmtstats 2> /dev/null + xml_query_count=`awk '/opcode QUERY/ { print $NF }' xml.fmtstats` + xml_query_count=${xml_query_count:-0} + [ "$query_count" -eq "$xml_query_count" ] || ret=1 + xml_txt_count=`awk '/qtype TXT/ { print $NF }' xml.fmtstats` + xml_txt_count=${xml_txt_count:-0} + [ "$txt_count" -eq "$xml_txt_count" ] || ret=1 + xml_noerror_count=`awk '/rcode NOERROR/ { print $NF }' xml.fmtstats` + xml_noerror_count=${xml_noerror_count:-0} + [ "$noerror_count" -eq "$xml_noerror_count" ] || ret=1 +fi +if [ $PERL_JSON ]; then + file=`$PERL fetch.pl -p ${EXTRAPORT1} json/v1/server` + mv $file json.stats + $PERL server-json.pl > json.fmtstats 2> /dev/null + json_query_count=`awk '/opcode QUERY/ { print $NF }' json.fmtstats` + json_query_count=${json_query_count:-0} + [ "$query_count" -eq "$json_query_count" ] || ret=1 + json_txt_count=`awk '/qtype TXT/ { print $NF }' json.fmtstats` + json_txt_count=${json_txt_count:-0} + [ "$txt_count" -eq "$json_txt_count" ] || ret=1 + json_noerror_count=`awk '/rcode NOERROR/ { print $NF }' json.fmtstats` + json_noerror_count=${json_noerror_count:-0} + [ "$noerror_count" -eq "$json_noerror_count" ] || ret=1 +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +echo_i "checking consistency between regular and compressed output ($n)" +if [ "$HAVEXMLSTATS" ]; +then + URL=http://10.53.0.2:${EXTRAPORT1}/xml/v3/server +else + URL=http://10.53.0.2:${EXTRAPORT1}/json/v1/server +fi +$CURL -D regular.headers $URL 2>/dev/null | \ + sed -e "s#<current-time>.*</current-time>##g" > regular.out +$CURL -D compressed.headers --compressed $URL 2>/dev/null | \ + sed -e "s#<current-time>.*</current-time>##g" > compressed.out +diff regular.out compressed.out >/dev/null || ret=1 +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +ret=0 +echo_i "checking if compressed output is really compressed ($n)" +if [ "$ZLIB" ]; +then + REGSIZE=`cat regular.headers | \ + grep -i Content-Length | sed -e "s/.*: \([0-9]*\).*/\1/"` + COMPSIZE=`cat compressed.headers | \ + grep -i Content-Length | sed -e "s/.*: \([0-9]*\).*/\1/"` + if [ ! `expr $REGSIZE / $COMPSIZE` -gt 2 ]; then + ret=1 + fi +else + echo_i "skipped" +fi +if [ $ret != 0 ]; then echo_i "failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +echo_i "exit status: $status" +[ $status -eq 0 ] || exit 1 |