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/096 | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/096')
-rwxr-xr-x | qa/096 | 130 |
1 files changed, 130 insertions, 0 deletions
@@ -0,0 +1,130 @@ +#! /bin/sh +# PCP QA Test No. 096 +# proc.psinfo.ttyname +# +# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved. +# + +seq=`basename $0` +echo "QA output created by $seq" + +. ./common.product +. ./common.check +. ./common.filter + +if [ $PCP_PLATFORM = darwin -o $PCP_PLATFORM = solaris ] +then + _notrun "No proc metrics for $PCP_PLATFORM" +else + # proc metrics may not be available + # + if pminfo proc.nprocs >/dev/null 2>&1 + then + : + else + _notrun proc PMDA not installed + fi +fi + +trap "rm -f $tmp.*; exit" 0 1 2 3 15 + +# real QA test starts here + +if [ $# -eq 1 ] +then + if [ $1 = "-v" ] + then + verbose=1 + fi +fi + +# make sure we have latest ttymap +$sudo rm -f $seq.full +$sudo rm -f /tmp/pcp.ttymap +# make sure proc agent reloads it +$sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start +_wait_for_pmcd +_wait_for_pmlogger + +# +# tty filtering per host +# +if [ $PCP_PLATFORM = irix ] +then + # handle stupid /dev/tablet as controlling tty! + ls -lr /dev | grep '^c.* 0, 1' \ + | $PCP_AWK_PROG ' + NR == 1 { good=$NF; next } + { print "s/" $NF "/" good "/" }' >$tmp.sed + ps -e | tee -a $seq.full |\ + sed -e 's#pts/#ttyq#' | + sed -f $tmp.sed > $tmp.ps +elif [ $PCP_PLATFORM = linux ] +then + ps -e | tee -a $seq.full | sed \ + -e 's#ttyS#tts/#' \ + | $PCP_AWK_PROG ' + /<defunct>/ { print $1, "?" } + {print}' >$tmp.ps +else + echo "Arrgh ... Need to know how to do tty filtering for $PCP_PLATFORM" + exit 1 +fi + +echo "=====================" >>$seq.full + +pminfo -F proc.psinfo.ttyname |\ + sed > $tmp.pminfo \ + -e '/DISAPPEARED/d' \ + -e 's#"ttyS#"tts/#' \ + -e 's#vc/#tty#' +echo "----" > $tmp.sep + +maxfailures=0 + +cat $tmp.ps $tmp.sep $tmp.pminfo | tee -a $seq.full |\ +$PCP_AWK_PROG -v verbose=$verbose -v maxfailures=$maxfailures -v failfile=$tmp.fail ' + $0 == "----" { pminfo = 1; next; } + pminfo == 0 { + # handle defunct processes which have "-" as tty + if ($2 == "-") + $2 = "?" + ps[$1] = $2 + ps_cmd[$1] = $4 + next + } +/ inst \[/ { + sub(/.* inst \[/, "") # delete up to [ + pid = $1 + # fall-through, expect value on same line, but not + # not necessarily so + } +/] value "/ { + sub(/.*] value "/, "") # delete up to value " + sub(/"/,"") # delete the final " + value = $1; + + # do the comparison + if (pid in ps) { + if (ps[pid] != value && value != "?") { + printf("mismatch: pid = %s, ps = %s, proc = %s, cmd = %s\n", pid, ps[pid], value, ps_cmd[pid]) > failfile; + failures++; + } + else if (verbose == 1) { + printf("match for pid = %d, value = %s, ps[pid] = %s, cmd = %s\n", pid, value, ps[pid], ps_cmd[pid]); + } + } + } + END { + if (failures > maxfailures) { + printf("Number of failures = %d\n", failures) + system("cat " failfile) + } + else + printf("proc.psinfo.ttyname matches with ps\n") + } +' +echo +echo "If failure, check $seq.full" + +exit 0 |