summaryrefslogtreecommitdiff
path: root/qa/440
diff options
context:
space:
mode:
Diffstat (limited to 'qa/440')
-rwxr-xr-xqa/440256
1 files changed, 256 insertions, 0 deletions
diff --git a/qa/440 b/qa/440
new file mode 100755
index 0000000..8ec3262
--- /dev/null
+++ b/qa/440
@@ -0,0 +1,256 @@
+#!/bin/sh
+# PCP QA Test No. 440
+# pmlogger -v conditions
+# Based on QA 252.
+#
+# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
+# Copyright (c) 2011 Ken McDonell. All Rights Reserved.
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.product
+. ./common.filter
+. ./common.check
+
+status=0 # success is the default!
+$sudo rm -rf $tmp.* $seq.full
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# real QA test starts here
+
+pmdumplog='pmdumplog'
+pmlogger='pmlogger'
+SECS_TOL=2 # number of seconds tolerance
+
+#
+_clean_archive()
+{
+rm -f $tmp.log $tmp.[0-9]* $tmp.index $tmp.meta
+}
+
+# Is given value within tolerance of expected value
+_tolerance()
+{
+ expected=$1
+ given=$2
+ tolerance=$3
+ upper_limit=`expr $expected + $tolerance`
+ lower_limit=`expr $expected - $tolerance`
+ [ $lower_limit -le $given -a $given -le $upper_limit ]
+}
+
+_num_recs()
+{
+ num_recs=`$pmdumplog $tmp | egrep -c '^[0-9][0-9]:[0-9][0-9]:'`
+ # subtract 1 for the preamble
+ num_recs=`expr $num_recs - 1`
+ echo "found $num_recs samples after the preamble" >>$seq.full
+}
+
+_test_sample_size()
+{
+ vol_arg=$1
+ size_arg=$2
+ num_vol=$3 # volumes expected
+ echo "_test_sample_size $@" >>$seq.full
+ $pmlogger -v $vol_arg -s $size_arg -c $tmp.config -l $tmp.log $tmp
+ cat $tmp.log >>$seq.full
+ ls -l $tmp.* >>$seq.full
+ if [ -f $tmp.0 ]
+ then
+ vol=`ls $tmp.[0-9]* | wc -l | sed -e 's/ //g'`
+ else
+ vol=0
+ fi
+ echo "vol=$vol num_vol=$num_vol" >>$seq.full
+ if [ "$vol" != "$num_vol" ]
+ then
+ echo "Error: Number of volumes is $vol, expected $num_vol" | tee -a $seq.full
+ ls -l $tmp.[0-9]*
+ cat $tmp.log
+ $pmdumplog -a $tmp >>$seq.full
+ fi
+
+ _num_recs
+ if [ "$size_arg" = "$num_recs" ]
+ then
+ echo "Log size for $size_arg and volume size for $vol_arg is correct" | tee -a $seq.full
+ else
+ echo "Error: Log contains $num_recs samples, expected $size_arg" | tee -a $seq.full
+ ls -l $tmp.*
+ cat $tmp.log
+ $pmdumplog -a $tmp >>$seq.full
+ fi
+ _clean_archive
+}
+
+# Find out number of records, n, for given size
+# Then make sure for (n-1) records that the size is smaller
+_test_file_size()
+{
+ vol_arg=$1
+ size_arg=$2
+ num_vol=$3 # volumes expected
+ num_bytes=$4 # bytes expected
+ echo "_test_file_size $@" >>$seq.full
+ $pmlogger -v $vol_arg -s $size_arg -c $tmp.config -l $tmp.log $tmp
+ cat $tmp.log >>$seq.full
+ ls -l $tmp.* >>$seq.full
+ if [ -f $tmp.0 ]
+ then
+ vol=`ls $tmp.[0-9]* | wc -l | sed -e 's/ //g'`
+ bigger_size=`ls -l $tmp.[0-9]* | $PCP_AWK_PROG '{t += $5} END {print t}'`
+ else
+ vol=0
+ bigger_size=-1
+ fi
+ echo "bigger_size=$bigger_size" >>$seq.full
+ echo "vol=$vol num_vol=$num_vol" >>$seq.full
+ if [ "$vol" != "$num_vol" ]
+ then
+ echo "Error: Number of volumes is $vol, expected $num_vol" | tee -a $seq.full
+ ls -l $tmp.[0-9]*
+ cat $tmp.log
+ $pmdumplog -a $tmp >>$seq.full
+ fi
+ _num_recs
+ echo "num_recs=$num_recs" >>$seq.full
+ num_recs=`expr $num_recs - 1`
+ if [ $num_recs -gt 0 ]
+ then
+ _clean_archive
+ $pmlogger -v $vol_arg -s $num_recs -c $tmp.config -l $tmp.log $tmp
+ cat $tmp.log >>$seq.full
+ ls -l $tmp.* >>$seq.full
+ if [ -f $tmp.0 ]
+ then
+ smaller_size=`ls -l $tmp.[0-9]* | $PCP_AWK_PROG ' {t += $5} END {print t}'`
+ else
+ smaller_size=-1
+ fi
+ else
+ smaller_size=-1
+ fi
+ echo "smaller_size=$smaller_size" >>$seq.full
+ if [ $smaller_size -le $num_bytes -a $num_bytes -le $bigger_size ]
+ then
+ echo "Log size for $size_arg and volume size for $vol_arg is correct" | tee -a $seq.full
+ else
+ echo "Error: Log size $num_bytes is not within range $smaller_size - $bigger_size" | tee -a $seq.full
+ ls -l $tmp.*
+ cat $tmp.log
+ $pmdumplog -a $tmp >>$seq.full
+ fi
+ _clean_archive
+}
+
+_time_me ()
+{
+ # return time in seconds
+ #
+ # /usr/bin/time IS bloody important - dont port-sh it. EVER!
+ /usr/bin/time $* 2>&1 >/dev/null | \
+ if [ $PCP_PLATFORM = linux ]
+ then
+ # 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 2752maxresident)k
+ tr ' ' "\n" | $PCP_AWK_PROG '/elapsed$/ { sub("elapsed", "", $1);
+ split ($1,tt,"[:.]");
+ print (tt[1]*60)+tt[2];}'
+ elif [ $PCP_PLATFORM = darwin ]
+ then
+ # 0.00 real 0.00 user 0.00 sys
+ $PCP_AWK_PROG '{print $1}' | sed -e 's/\..*//'
+ else
+ # real 0.0
+ # user 0.0
+ # sys 0.0
+ $PCP_AWK_PROG '/^real/ {print $2}' | sed -e 's/\..*//'
+ fi
+}
+
+# Note: size arg should be given in secs for comparison with /usr/bin/time
+_test_time_size()
+{
+ vol_arg=$1
+ size_arg=$2
+ num_vol=$3 # volumes expected
+ num_sec=$4 # elapsed seconds expected
+ echo "_test_time_size $@" >>$seq.full
+ time=`_time_me $pmlogger -v $vol_arg -s $size_arg -c $tmp.config -l $tmp.log $tmp`
+ [ -z "$time" ] && time=-1
+ cat $tmp.log >>$seq.full
+ ls -l $tmp.* >>$seq.full
+ if [ -f $tmp.0 ]
+ then
+ vol=`ls $tmp.[0-9]* | wc -l | sed -e 's/ //g'`
+ else
+ vol=0
+ fi
+ echo "vol=$vol num_vol=$num_vol" >>$seq.full
+ if [ "$vol" != "$num_vol" ]
+ then
+ echo "Error: Number of volumes is $vol, expected $num_vol" | tee -a $seq.full
+ ls -l $tmp.[0-9]*
+ cat $tmp.log
+ $pmdumplog -a $tmp >>$seq.full
+ fi
+ if _tolerance $num_sec $time $SECS_TOL
+ then
+ echo "Log time for $num_sec and volume time for $vol_arg is correct" | tee -a $seq.full
+ else
+ echo "Error: Log time $time, expected $num_sec +/- $SECS_TOL" | tee -a $seq.full
+ ls -l $tmp.*
+ cat $tmp.log
+ $pmdumplog -a $tmp >>$seq.full
+ fi
+ _clean_archive
+}
+
+# Create a simple configuration file for testing
+cat <<EOF >$tmp.config
+# pmlogger(1) configuration file for doing QA tests
+#
+log mandatory on 10 msec {
+ sample.control
+ sample.milliseconds
+ sample.load
+ sample.colour
+ sample.bin
+ sample.bucket
+ sample.drift
+ sample.step
+ sample.write_me
+ sample.lights
+ sample.magnitude
+ sample.pdu
+ sample.recv_pdu
+ sample.xmit_pdu
+ sample.noinst
+}
+EOF
+
+# real QA test starts here
+
+# Test out -v and -s
+_test_file_size 2000BYTE "4000bytes" 2 4000
+_test_file_size 1024b "4K" 4 4096
+_test_file_size 10Mbyte "4kilobytes" 1 4096
+_test_file_size 3K 4194B 2 4194
+_test_sample_size 3 8 3
+_test_time_size 3.5secs 5secs 2 5
+
+# Some error conditions
+$pmlogger -v 3bozobyte -s 10 -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v 5 -s 3bozobyte -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v-1 -s 10 -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v 5 -s-1 -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v 0.5Mbyte -s 10 -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v 5 -s 0.5K -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v 0.03 -s 10 -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+$pmlogger -v 5 -s 0.03 -c /dev/null $tmp 2>&1 | sed -e '/Usage/q'
+
+# success, all done
+exit