summaryrefslogtreecommitdiff
path: root/qa/601
diff options
context:
space:
mode:
Diffstat (limited to 'qa/601')
-rwxr-xr-xqa/601206
1 files changed, 206 insertions, 0 deletions
diff --git a/qa/601 b/qa/601
new file mode 100755
index 0000000..85597b0
--- /dev/null
+++ b/qa/601
@@ -0,0 +1,206 @@
+#! /bin/sh
+# PCP QA Test No. 601
+# PCP 2.2 duplicate of 273 (pmdatrace, pmtrace, and libpcp_trace tests)
+#
+# 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
+
+_cleanup()
+{
+ cd $here
+ if [ -n "$savedtracehost" ]
+ then
+ PCP_TRACE_HOST=$savedtracehost; export PCP_TRACE_HOST
+ fi
+ if $_needclean
+ then
+ if $install_on_cleanup
+ then
+ ( cd $PCP_PMDAS_DIR/trace; $sudo ./Install </dev/null >/dev/null 2>&1 )
+ else
+ ( cd $PCP_PMDAS_DIR/trace; $sudo ./Remove </dev/null >/dev/null 2>&1 )
+ fi
+ _needclean=false
+ fi
+ rm -f $tmp.*
+ exit $status
+}
+
+install_on_cleanup=false
+pminfo trace >/dev/null 2>&1 && install_on_cleanup=true
+
+status=1 # failure is the default!
+_needclean=true
+trap "_cleanup" 0 1 2 3 15
+
+if [ -n "$PCP_TRACE_HOST" ]
+then
+ savedtracehost=$PCP_TRACE_HOST; unset PCP_TRACE_HOST
+fi
+
+thishost=`hostname`
+
+_filter_trace_install()
+{
+ # some warnings are *expected* - no trace values yet
+ _filter_pmda_install | sed \
+ -e 's/ *[0-9]+ warnings,//g'
+}
+
+# real QA test starts here
+
+cd $PCP_PMDAS_DIR/trace
+$sudo ./Install -R / </dev/null 2>&1 | _filter_trace_install
+cd $here
+
+_wait_for_pmcd
+
+period=`pminfo -f trace.control.period | fgrep value | sed -e 's/.*value //g'`
+interval=`pminfo -f trace.control.interval | fgrep value | sed -e 's/.*value //g'`
+
+if [ -z "$interval" -o -z "$period" ]
+then
+ echo "Cannot retrieve interval or update period."
+ exit 1
+else
+ echo "Initial values: period=$period,interval=$interval"
+fi
+
+echo "=== TRANSACTIONS ==="
+pmtrace -q -h $thishost -e 'sleep 1' sleep1
+pmtrace -q -h $thishost -e 'sleep 3' sleep2
+pmtrace -q -h $thishost -e 'sleep 2' 'third sleep'
+echo "Waiting for buffers to rotate (1/3) ..."
+sleep $interval
+pmtrace -q -h $thishost -e 'sleep 2' 'third sleep'
+echo "Waiting for buffers to rotate (2/3) ..."
+sleep $interval
+pmtrace -q -h $thishost -e 'sleep 2' sleep1
+pmtrace -q -h $thishost -e 'sleep 1' sleep1
+echo "Waiting for buffers to rotate (3/3) ..."
+sleep $interval
+
+# These are deterministic:
+pminfo -f trace.transact.count
+pminfo -f trace.transact.min_time trace.transact.max_time \
+ | sed -e 's/\.[0-9][0-9]*//g'
+
+# These fluctuate slightly above theoretical result (system() & trace overhead):
+rate=`pminfo -f trace.transact.rate | fgrep sleep1 | sed -e 's/.*value //g'`
+ave_time=`pminfo -f trace.transact.ave_time | fgrep sleep1 | sed -e 's/.*value //g'`
+
+# Use bc to get these as integers, and then compare in the shell ...
+rate=`bc << EOF
+scale=5
+(3 / $period) * 100000
+$rate * 100000
+EOF` | $PCP_AWK_PROG '
+{
+ if ($2 < $1) {
+ printf("Out of range - trace.transact.rate[sleep1] (%s < %s)\n",$2,$1);
+ }
+}'
+echo "Finished checking trace.transact.rate"
+
+ave_time=`bc << EOF
+scale=5
+(4 / 3) * 100000
+$ave_time * 100000
+EOF` | $PCP_AWK_PROG '
+{
+ if ($2 < $1) {
+ printf("Out of range - trace.transact.ave_time[sleep1] (%s < %s)\n",$2,$1);
+ }
+}'
+echo "Finished checking trace.transact.ave_time"
+
+echo "=== OBSERVATIONS ==="
+pmtrace -h $thishost -q -v 200 obs1
+pmtrace -h $thishost -q -v 0.765 obs2
+echo "Waiting for buffers to rotate (1/3) ..."
+sleep $interval
+pmtrace -h $thishost -q -v 210 obs1
+pmtrace -h $thishost -q -v 220 obs1
+echo "Waiting for buffers to rotate (2/3) ..."
+sleep $interval
+pmtrace -h $thishost -q -v 230 obs1
+pmtrace -h $thishost -q -v 240 obs1
+echo "Waiting for buffers to rotate (3/3) ..."
+sleep $interval
+
+pminfo -f trace.observe.count trace.observe.value
+rate=`pminfo -f trace.observe.rate | fgrep obs1 | sed -e 's/.*value //g'`
+rate=`bc << EOF
+scale=5
+(5 / $period) * 100000
+$rate * 100000
+EOF` | $PCP_AWK_PROG '
+{
+ if ($2 != $1) {
+ printf("Result mismatch - trace.observe.rate[obs1] (%s != %s)\n",$1,$2);
+ }
+}'
+echo "Finished checking trace.observe.rate"
+
+echo "=== COUNTERS ==="
+pmtrace -h $thishost -q -c 200 cnt1
+pmtrace -h $thishost -q -c 0.765 cnt2
+echo "Waiting for buffers to rotate (1/3) ..."
+sleep $interval
+pmtrace -h $thishost -q -c 210 cnt1
+pmtrace -h $thishost -q -c 220 cnt1
+echo "Waiting for buffers to rotate (2/3) ..."
+sleep $interval
+pmtrace -h $thishost -q -c 230 cnt1
+pmtrace -h $thishost -q -c 240 cnt1
+echo "Waiting for buffers to rotate (3/3) ..."
+sleep $interval
+
+pminfo -f trace.counter.count trace.counter.value
+rate=`pminfo -f trace.counter.rate | fgrep cnt1 | sed -e 's/.*value //g'`
+rate=`bc << EOF
+scale=5
+(5 / $period) * 100000
+$rate * 100000
+EOF` | $PCP_AWK_PROG '
+{
+ if ($2 != $1) {
+ printf("Result mismatch - trace.counter.rate[obs1] (%s != %s)\n",$1,$2); }
+}'
+echo "Finished checking trace.counter.rate"
+
+echo "=== POINT ==="
+# Point & observe rates calculated the same, so check pmtrace point works.
+pmtrace -h $thishost -q 'good point'
+sleep $interval
+pminfo -f trace.point
+echo "Finished checking trace.point"
+
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking sample programs build - ""$PCP_ECHO_C"
+cd $PCP_DEMOS_DIR/trace
+$sudo make clobber 2>&1 >/dev/null
+$sudo make app1 app2 app3 pmtrace >$tmp.make 2>&1
+if [ $? -ne 0 ]
+then
+ $PCP_ECHO_PROG "demo trace programs make failed. Here is the make output ..."
+ cat $tmp.make
+ exit 1
+else
+ $PCP_ECHO_PROG make succeeded.
+fi
+
+$PCP_DEMOS_DIR/trace/app1 >/dev/null 2>&1
+sleep $interval
+pminfo -f trace.transact.count
+
+# success, all done
+status=0
+exit