summaryrefslogtreecommitdiff
path: root/qa/354
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-10-26 12:33:50 +0400
committerIgor Pashev <pashev.igor@gmail.com>2014-10-26 12:33:50 +0400
commit47e6e7c84f008a53061e661f31ae96629bc694ef (patch)
tree648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/354
downloadpcp-debian.tar.gz
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/354')
-rwxr-xr-xqa/354272
1 files changed, 272 insertions, 0 deletions
diff --git a/qa/354 b/qa/354
new file mode 100755
index 0000000..67b86f5
--- /dev/null
+++ b/qa/354
@@ -0,0 +1,272 @@
+#! /bin/sh
+# PCP QA Test No. 354
+# more serious exercising of record mode in libpcp_gui
+#
+# 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
+
+signal=$PCP_BINADM_DIR/pmsignal
+host=`hostname`
+status=1 # failure is the default!
+trap "cd $here; rm -rf $tmp $tmp.*; exit \$status" 0 1 2 3 15
+rm -rf $tmp
+mkdir $tmp
+if [ ! -d $tmp ]
+then
+ echo "Arrgh, failed to mkdir \"$tmp\""
+ ls -ld $tmp
+fi
+cd $tmp
+
+_build_sed()
+{
+ echo "s/$host/HOST/g" >$tmp.sed
+ $PCP_AWK_PROG <$1 >>$tmp.sed '
+BEGIN { numpid = 0; pid[""] = 1 }
+/pid:/ { if ($6 == 0) next
+ for (i in pid) {
+ if ($6 == pid[i]) next
+ }
+ numpid++
+ pid[numpid] = $6
+ print "s/ " $6 " / pmlogger-pid-" numpid " /g"
+ }'
+}
+
+_filter()
+{
+ sed <$1 \
+ -e 's/$/ /' \
+ -e 's/^/ /' \
+ | sed -f $tmp.sed \
+ | sed \
+ -e 's/ $//' \
+ -e 's/^ //' \
+ -e "s/$MKTEMP/MKTEMP/" \
+ -e "s/$host/HOST/" \
+ -e 's/[0-9][^ ]* [kmKM]*bytes/SOME bytes/g' \
+ -e 's/[0-9][^ ]* seconds/SOME seconds/g' \
+ -e "s/$seq-$$/SEQ-PID/g" \
+ -e '/xconfirm: Not found/d' \
+ -e '/pmRecordControl/s/Bad file descriptor/Invalid argument/' \
+ | _filter_pmlogger_log \
+ | sed \
+ -e 's/\/[A-Z]*\/tmp/\/tmp/' \
+ -e 's/\/[a-z]*\/tmp/\/tmp/'
+}
+
+_filter_ps()
+{
+$PCP_AWK_PROG '
+NR == 1 { if ($2 != "PID") {
+ print "PID not in field 2 of ps output!"
+ print
+ exit(1)
+ }
+ if ($8 == "CMD")
+ # Linux
+ cmd = 8
+ else if ($11 == "COMMAND")
+ # Darwin
+ cmd = 11
+ else {
+ print "CMD (or COMMAND) not in field 8 (or 11) of ps output!"
+ print
+ exit(1)
+ }
+ next
+ }
+ { print "ps:",$2,$cmd,$(cmd+1),$(cmd+2),$(cmd+3),$(cmd+4) }'
+}
+
+rm -f $here/$seq.full
+
+# NOT the default pmconfirm(1), please
+#
+cat <<'End-of-File' >$tmp.xconfirm
+#!/bin/sh
+# generate no output so pmlogger will report the message
+exit 0
+End-of-File
+chmod 755 $tmp.xconfirm
+export PCP_XCONFIRM_PROG=$tmp.xconfirm
+
+# real QA test starts here
+
+echo
+echo "=== folio name relative to cwd ==="
+echo "=== folio name relative to cwd ===" >>$here/$seq.full
+echo
+
+$here/src/record foo no-1 1 $host localhost $host localhost 2>&1 >$tmp.out &
+sleep 10
+
+# We used to have the temp basename created and left over (this was a bug).
+# In fixing the bug we've made this test much harder ...
+# typical output from ls looks like
+# lZYiOHa.localhost.0
+# lZYiOH.localhost.0
+# and we need to extract lZYiOH not lZYiOHa
+#
+MKTEMP=`ls *.localhost.0 \
+ | tee -a $here/$seq.full \
+ | awk '{ print length($0),$0 }' \
+ | sort -n \
+ | sed -e 's/^[0-9][0-9]* //' -e 's/\.localhost\.0//' -e 1q`
+echo "MKTEMP=$MKTEMP" >>$here/$seq.full
+_build_sed $tmp.out
+_filter $tmp.out
+cat $tmp.out >>$here/$seq.full
+echo
+echo "pmlogger processes:"
+echo "pmlogger processes:" >>$here/$seq.full
+ps $PCP_PS_ALL_FLAGS 2>&1 \
+| tee -a $here/$seq.full \
+| sed -n -e 1p -e '/[p]mlogger.*-x/p' \
+| _filter_ps \
+| tee $tmp.tmp \
+| sed -f $tmp.sed \
+| LC_COLLATE=POSIX sort
+pid=`$PCP_AWK_PROG '{ print $2 }' <$tmp.tmp`
+if [ -z "$pid" ]
+then
+ # oops!
+ #
+ echo "Arrgh, no pmlogger process found ... see $seq.full"
+ exit
+else
+ echo "pmlogger pid: $pid" >>$here/$seq.full
+ npmlogger=`echo "$pid" | wc -w | sed -e 's/ //g'`
+ if [ "$npmlogger" -ne 1 ]
+ then
+ echo "Arrgh, expecting 1 pmlogger process found $npmlogger processes ... see $seq.full"
+ exit
+ fi
+ $signal -s TERM $pid
+fi
+
+for i in 1 2 3 4 5
+do
+ if pmlc $pid </dev/null 2>&1 | egrep "Connection refused|Transport endpoint is not connected" >/dev/null
+ then
+ # pmlogger has gone away, continue
+ #
+ break
+ else
+ # pmlogger still present
+ #
+ if [ $i = 5 ]
+ then
+ echo "Arrgh, pmlogger process ($pid) will not die ... see $seq.full"
+ exit
+ else
+ sleep 2
+ fi
+ fi
+done
+
+echo
+echo "files:"
+for file in *
+do
+ new=`echo $file | sed -e "s/$MKTEMP/MKTEMP/" -e "s/$host/HOST/"`
+ [ "$new" != "$file" ] && mv $file $new
+done
+LC_COLLATE=POSIX ls
+for log in `LC_COLLATE=POSIX ls *.log`
+do
+ echo
+ echo "=== $log ==="
+ echo "=== $log ===" >>$here/$seq.full
+ _filter $log
+ cat $log >>$here/$seq.full
+done
+
+rm -rf *
+echo
+echo "=== absolute folio name ==="
+echo "=== absolute folio name ===" >>$here/$seq.full
+echo
+
+$here/src/record `pwd`/foo no-2 0 $host localhost $host localhost 2>&1 >$tmp.out &
+sleep 10
+# see note above
+MKTEMP=`ls *.localhost.0 \
+ | tee -a $here/$seq.full \
+ | awk '{ print length($0),$0 }' \
+ | sort -n \
+ | sed -e 's/^[0-9][0-9]* //' -e 's/\.localhost\.0//' -e 1q`
+echo "MKTEMP=$MKTEMP" >>$here/$seq.full
+_build_sed $tmp.out
+cat $tmp.out >>$here/$seq.full
+_filter $tmp.out
+echo
+echo "pmlogger processes:"
+echo "pmlogger processes:" >>$here/$seq.full
+ps $PCP_PS_ALL_FLAGS 2>&1 \
+| tee -a $here/$seq.full \
+| sed -n -e 1p -e '/[p]mlogger.*-x/p' \
+| _filter_ps \
+| tee $tmp.tmp \
+| sed -f $tmp.sed \
+| LC_COLLATE=POSIX sort
+pid=`$PCP_AWK_PROG '{ print $2 }' <$tmp.tmp`
+if [ -z "$pid" ]
+then
+ # oops!
+ #
+ echo "Arrgh, no pmlogger process found ... see $seq.full"
+ exit
+else
+ echo "pmlogger pid: $pid" >>$here/$seq.full
+ $signal -s TERM $pid
+fi
+
+for i in 1 2 3 4 5
+do
+ if pmlc $pid </dev/null 2>&1 | egrep "Connection refused|Transport endpoint is not connected" >/dev/null
+ then
+ # pmlogger has gone away, continue
+ #
+ break
+ else
+ # pmlogger still present
+ #
+ if [ $i = 5 ]
+ then
+ echo "Arrgh, pmlogger process ($pid) will not die ... see $seq.full"
+ exit
+ else
+ sleep 2
+ fi
+ fi
+done
+
+echo
+echo "files:"
+for file in *
+do
+ new=`echo $file | sed -e "s/$MKTEMP/MKTEMP/" -e "s/$host/HOST/"`
+ [ "$new" != "$file" ] && mv $file $new
+done
+LC_COLLATE=POSIX ls
+for log in `LC_COLLATE=POSIX ls *.log`
+do
+ echo
+ echo "=== $log ==="
+ echo "=== $log ===" >>$here/$seq.full
+ _filter $log
+ cat $log >>$here/$seq.full
+done
+
+# success, all done
+status=0
+exit