diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/117 | |
download | pcp-47e6e7c84f008a53061e661f31ae96629bc694ef.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/117')
-rwxr-xr-x | qa/117 | 187 |
1 files changed, 187 insertions, 0 deletions
@@ -0,0 +1,187 @@ +#! /bin/sh +# PCP QA Test No. 117 +# Verify network.ip statistics (Non-linux version, see 216 for Linux version) +# +# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved. +# + +seq=`basename $0` +echo "QA output created by $seq" + +# get standard filters +. ./common.product +. ./common.filter +. ./common.check + +if [ $PCP_PLATFORM = linux ] +then + _notrun "network.ip checks for linux done in test 216" +elif [ $PCP_PLATFORM = darwin -o $PCP_PLATFORM = solaris ] +then + _notrun "no network.ip metrics for $PCP_PLATFORM" +fi + +compare=`pwd`/src/compare +rm -rf $tmp.* + +trap "rm -rf $tmp.*" 0 1 2 3 15 + +if [ ! -x $compare ] +then + echo "Can't find compare, giving up" + exit 1 +fi + +if pminfo network.ip >/dev/null +then + : +else + echo "pminfo network.ip not working, giving up" + exit 1 +fi + +# real QA test starts here +ns1=$tmp.netstat1 +pcp=$tmp.pcp +ns2=$tmp.netstat2 + +rm -f $seq.full +rm -rf $ns1 $pcp $ns2 + +_get_netstat() +{ + netstat -s -p ip \ + | tee -a $seq.full \ + | $PCP_AWK_PROG ' + NR > 1 { + print $1 + # This used to be a bit nasty because some lines contain + # another number in parentheses with surrounding text in + # some cases ... no longer an issue me thinks + # + #for (i = 2; i <= NF; i++) { + #n = match($i, /[0-9][0-9]*/); + #if ( n > 0 ) + #print $i + #} + }' \ + | tr -d '()' +} + +echo "=== First netstat ===" >>$seq.full +_get_netstat >$ns1 + +# Fetch metrics in the same order as they appear in netstat output +# +# ip: +# 584532 total packets received +# 0 bad header checksums +# 0 with size smaller than minimum +# 0 with data size < data length +# 0 with header length < data size +# 0 with data length < header length +# 0 with bad options +# 0 fragments received +# 0 fragments dropped +# 0 fragments dropped after timeout +# 584387 packets for this host +# 283 packets recvd for unknown/unsupported protocol +# 0 packets forwarded (forwarding enabled) +# 145 packets not forwardable +# 0 redirects sent +# 1009836 packets sent from this host +# 0 output packets dropped due to no bufs, etc. +# 0 output packets discarded due to no route +# 0 datagrams fragmented +# 0 fragments created +# 0 datagrams that can't be fragmented +# 0 fragments dropped due to overlap (and ipv4_strict_reassembly = 1) +# 0 fragments dropped because they introduced gaps (and ipv4_strict_reassembly = 1) +# + +ip=network.ip + +# +cat <<END >$tmp.metrics +$ip.total +$ip.badsum +$ip.toosmall +$ip.tooshort +$ip.badhlen +$ip.badlen +$ip.badoptions +$ip.fragments +$ip.fragdropped +$ip.fragtimeout +$ip.delivered +$ip.noproto +$ip.forward +$ip.cantforward +$ip.redirect +$ip.localout +$ip.odropped +$ip.noroute +$ip.fragmented +$ip.ofragments +$ip.cantfrag +$ip.strictreassoverlapfrags +$ip.strictreassgapfrags +END + +echo '#!/bin/sh' >$tmp.pminfo.sh +$PCP_ECHO_PROG $PCP_ECHO_N 'true'"$PCP_ECHO_C" >>$tmp.pminfo.sh +$PCP_AWK_PROG < $tmp.metrics >>$tmp.pminfo.sh ' +line % 5 == 0 { printf " || exit 1\npminfo -f "; line++; } + { printf "%s ", $1; line++; } +END { print " || exit 1" } +' + +echo "=== pminfo ===" >>$seq.full +if sh $tmp.pminfo.sh \ + | tee -a $seq.full \ + | sed -e '/^No/s/.*/ value -666/' \ + | grep ' value ' \ + | $PCP_AWK_PROG '{ print $2 }' \ + > $pcp +then + : +else + echo "pminfo fetches failed, giving up" + exit 1 +fi + +echo "=== Second netstat ===" >>$seq.full +_get_netstat >$ns2 + +nm=`wc -l $tmp.metrics | $PCP_AWK_PROG '{print $1}'` +nn=`wc -l $ns2 | $PCP_AWK_PROG '{print $1}'` +if [ $nm -lt $nn ] +then + echo "Update list! fewer metrics ($nm) than netstat statistics ($nn)" +elif [ $nm -gt $nn ] +then + echo "Update list! more metrics ($nm) than netstat statistics ($nn)" +fi + +echo "#!/bin/sh" >>$tmp.sh +echo "sts=0" >>$tmp.sh +paste -d" \n" $ns1 $pcp $ns2 $tmp.metrics \ +| tee $tmp.debug \ + | $PCP_AWK_PROG ' { + printf "if '$compare' %d %d %d; then :; else ", $1, $2, $3; + printf "sts=1; echo \"%s = %d out of range %d..%d\"; fi\n", $4, $2, $1, $3 + }' \ + >>$tmp.sh +echo "exit $sts" >>$tmp.sh +chmod u+x $tmp.sh + +# for debugging +# if sh -x $tmp.sh + +if sh $tmp.sh +then + exit 0 +else + echo "Bad network.ip metrics" + exit 1 +fi |