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/440 | |
download | pcp-47e6e7c84f008a53061e661f31ae96629bc694ef.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/440')
-rwxr-xr-x | qa/440 | 256 |
1 files changed, 256 insertions, 0 deletions
@@ -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 |