summaryrefslogtreecommitdiff
path: root/qa/412
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/412
downloadpcp-47e6e7c84f008a53061e661f31ae96629bc694ef.tar.gz
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/412')
-rwxr-xr-xqa/412242
1 files changed, 242 insertions, 0 deletions
diff --git a/qa/412 b/qa/412
new file mode 100755
index 0000000..6d2ecd8
--- /dev/null
+++ b/qa/412
@@ -0,0 +1,242 @@
+#! /bin/sh
+# PCP QA Test No. 412
+# Test out wrapping on libpcp/interp
+#
+# Test the creation and reading of an archive created using pmlogger(1) and
+# and pmval(1). On IRIX 6.2 and earlier, this test purposely sets the TZ
+# variable to specify daylight savings using the extended format, in a way
+# that does not break libc.so.
+#
+# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.product
+. ./common.filter
+. ./common.check
+
+signal=$PCP_BINADM_DIR/pmsignal
+status=1 # failure is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+_wrap_off()
+{
+ dowrap=0
+ unset PCP_COUNTER_WRAP
+ echo "--- Wrapping OFF ---"
+}
+
+_wrap_on()
+{
+ dowrap=1
+ PCP_COUNTER_WRAP=
+ export PCP_COUNTER_WRAP
+ echo "--- Wrapping ON ---"
+}
+
+_isLaterThanIRIX62 () {
+ if [ "$PCP_PLATFORM" = irix ]
+ then
+ STAT=`uname -a | $PCP_AWK_PROG '
+BEGIN { status = 0 }
+1 {
+ x = $3
+ if (x > 6.2) status = "0"
+ else status = "1"
+ }
+END { print status }
+'`
+ else
+ STAT=2 # not an IRIX platform
+ fi
+
+ return $STAT
+}
+
+_setTimeZone () {
+ MONTH=`date +%m`
+
+ if [ $MONTH -lt 7 ]
+ then
+ # Daylight savings on from Sunday 1st January to
+ # Sunday 5th March
+ TZ="EST-10EDT-11,1/0,64/3"
+ else
+ # Daylight savings on from Sunday 29th October to Wednesday
+ # "32nd" December (including the end of the extra day for
+ # leap years)
+ TZ="EST-10EDT-11,302/2,367/0"
+ fi
+
+ # This is what the specification should be normally, but
+ # it won't work because the start date of daylight savings
+ # is AFTER the end date. libc.so hates this, so I hate
+ # libc.so.
+ #TZ="EST-10EDT-11,302/2,64/3"
+
+ echo $TZ
+}
+
+#
+# Reset the sample agent so that we start from a known
+# point for the wrap metrics
+#
+_reset()
+{
+ pmstore sample.control -1 >/dev/null
+ $sudo $signal -a -s HUP pmcd
+ _wait_for_pmcd
+}
+
+#
+# Simulate interpolated fetching with/without wrapping
+# Assumes doing it for sample.wrap.ulong
+#
+_process_log()
+{
+ $PCP_AWK_PROG -v dowrap=$dowrap -v half_delta=$half_delta '
+ BEGIN {
+ maxuint = 4294967295;
+ debug=0
+ }
+ $2 == "29.0.58" {
+ curr_time = $1;
+ curr_value = $5;
+ gsub(/^.*:/, "", curr_time);
+ if (prev_time != 0) {
+ delta = curr_time - prev_time;
+ if (delta < 0) delta += 60; # delta wrap :-)
+ if (debug)
+ printf("delta=%s;curr=%s;prev=%s\n", delta, curr_time, prev_time);
+
+ #x = (prev_value + curr_value) / 2.0
+ x = (curr_value - prev_value) / delta * half_delta;
+ x += prev_value;
+
+ if (curr_value < prev_value && dowrap) { # then wrap
+ new_curr_value = curr_value + maxuint;
+
+ x = (new_curr_value - prev_value) / delta * half_delta;
+ x += prev_value;
+
+ if (x > maxuint) x -= maxuint; # wrap back if necessary
+ }
+ printf "%15.0d\n",x;
+ }
+ prev_time = curr_time;
+ prev_value = curr_value;
+ }
+ ' <$tmp.dump
+}
+
+#
+# Note the time of the first sample.wrap value
+#
+_set_starttime()
+{
+ $PCP_AWK_PROG '
+ $2 == "29.0.58" {
+ printf("starttime=%s\n", $1);
+ exit 0;
+ }
+ ' <$tmp.dump >$tmp.starttime
+ eval `cat $tmp.starttime`
+}
+
+#
+# Get out the interp values using pmval
+#
+_pmval_log()
+{
+ echo >>$seq.full
+ echo "--- pmval ---" >>$seq.full
+ pmval -w 15 -f 0 -r -a $tmp.archive -S "@$starttime" -O $half_delta -t $delta \
+ sample.wrap.ulong \
+ | tee -a $seq.full \
+ | sed \
+ -e '/metric/,/interval/d' \
+ -e '/^[ ]*$/d' \
+ -e 's/^[^ ][^ ]* *//'
+}
+
+#
+# Compare values allowing for an error
+#
+_compare_results()
+{
+ echo >>$seq.full
+ echo "--- paste ---" >>$seq.full
+ error=1e+08
+ paste $tmp.1 $tmp.2 \
+ | tee -a $seq.full \
+ | $PCP_AWK_PROG -v error=$error ' {
+ diff = $1-$2;
+ if (diff < 0) diff *= -1;
+ if (diff > error)
+ printf("mismatch: %f, %f (diff=%f)\n", $1, $2, diff);
+ else
+ printf("match\n");
+ }'
+}
+
+rm -f $seq.full
+
+# real QA test starts here
+
+delta=2
+half_delta=1
+
+_isLaterThanIRIX62
+if [ $? = 1 ]
+then
+ TZ=`_setTimeZone` # this forces the timezone to be correct and
+ export TZ # problem-free on IRIX 6.2 and earlier.
+fi
+
+_reset
+cat <<EOF >$tmp.config
+log advisory on $delta second {
+ sample.wrap.ulong
+}
+EOF
+pmlogger -c $tmp.config -s5 -l$tmp.log $tmp.archive
+if [ $? -ne 0 ]
+then
+ echo "Archive failed to be created !"
+ cat $tmp.log
+ exit 1
+ fi
+pmdumplog $tmp.archive >$tmp.dump
+echo >>$seq.full
+echo "--- pmdumplog ---" >>$seq.full
+cat $tmp.dump >>$seq.full
+_set_starttime
+
+_wrap_off
+_process_log >$tmp.1
+echo >>$seq.full
+echo "--- process_log wrap_off ---" >>$seq.full
+cat $tmp.1 >>$seq.full
+_pmval_log >$tmp.2
+echo >>$seq.full
+echo "--- process pmval ---" >>$seq.full
+cat $tmp.2 >>$seq.full
+_compare_results
+
+_wrap_on
+_process_log >$tmp.1
+echo >>$seq.full
+echo "--- process_log wrap_on ---" >>$seq.full
+cat $tmp.1 >>$seq.full
+_pmval_log >$tmp.2
+echo >>$seq.full
+echo "--- process pmval ---" >>$seq.full
+cat $tmp.2 >>$seq.full
+_compare_results
+
+# success, all done
+status=0
+exit