diff options
Diffstat (limited to 'qa/275')
-rwxr-xr-x | qa/275 | 142 |
1 files changed, 142 insertions, 0 deletions
@@ -0,0 +1,142 @@ +#!/bin/sh +# PCP QA Test No. 275 +# +# pmUnits handling for derived metrics +# +# Copyright (c) 2009 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 + +if grep -q 'pmRegisterDerived' $PCP_DIR/usr/include/pcp/pmapi.h +then + : +else + echo "No derived metric support" >$seq.notrun + echo "$seq: [not run] `cat $seq.notrun`" + exit 0 +fi + +status=0 # success is the default! +$sudo rm -rf $tmp.* $seq.full +trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 + +export PCP_DERIVED_CONFIG=$tmp.config + +# Derived metric expr dump from 0x8513a48... +# expr node 0x867eb68 type=PLUS left=0x867eb98 right=0x867ed28 +_filter() +{ + cat $tmp.out >>$seq.full + awk <$tmp.out >$tmp.sed ' +BEGIN { n = 0 } +$1 == "expr" && $2 == "node" && $3 ~ /^0x/ { print "s/" $3 "/<addr-" n ">/"; n++ } + { next }' + echo "=== sed ===" >>$seq.full + cat $tmp.sed >>$seq.full + sed -f $tmp.sed <$tmp.out \ + | sed \ + -e '/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/s/[^ ]*.*numpmid/TIMESTAMP ... numpmid/' \ + -e 's/=0x0 /=(nil) /g' \ + -e "s;$tmp;TMP;" +# -e 's/ val=[0-9][0-9]*/ val=<number>/g' +} + +# expr node <addr-6> type=NAME left=(nil) right=(nil) save_last=1 [sample.pdu] master=0 +# ... +# [0] inst=-1, val=49794 +_filter2() +{ + sed <$tmp.out -e 's/val=/val /' \ + | awk >$tmp.sed2 ' +BEGIN { n = 0 } +/expr.*sample\./ { want=1; next } +want == 1 && $3 == "val" { if (seen[$4] != "y") { + print "s/ val=" $4 "$/ val=<value-" n ">/" + n++ + seen[$4] = "y" + } + } +$1 == "expr" { want = 0 }' + echo "=== sed2 ===" >>$seq.full + cat $tmp.sed2 >>$seq.full + sed -f $tmp.sed2 +} + +# real QA test starts here + +echo "=== expression trees and pmDesc propagation ===" +cat <<End-of-File >$tmp.config +my.space_over_time1 = sample.mirage + sample.mirage_longlong +my.space_over_time2 = sample.mirage_longlong + sample.mirage +my.space_over_time3 = sample.mirage_longlong + sample.mirage - sample.byte_rate +my.space_over_time4 = sample.byte_rate + sample.byte_rate_perhour +my.space = sample.byte_ctr + sample.kbyte_ctr +my.byte1 = sample.byte_rate * sample.scale_step.time_up_secs +my.byte2 = sample.byte_rate * sample.scale_step.time_up_nanosecs +my.x1 = sample.scale_step.bytes_down / sample.scale_step.time_up_secs +my.x2 = sample.scale_step.bytes_down / sample.scale_step.time_up_secs + sample.mirage +my.x3 = sample.scale_step.count_up * sample.scale_step.count_down +my.x4 = sample.scale_step.count_down / sample.scale_step.count_up +# discrete and instantaneous combinations +my.i1 = 42 + sample.scale_step.none_up +my.i2 = sample.scale_step.none_up + 42 +my.i3 = pmcd.pmlogger.port - pmcd.pmlogger.port +End-of-File +echo +cat $tmp.config + +echo +pminfo -Dderive,appl0,appl1 -d my >$tmp.out 2>&1 +_filter + +echo +echo "=== fetch values exercises ===" +echo + +pminfo -f -a src/sample_expr + +# suggested by gcov analysis +echo +echo "=== some more scale conversion tests ===" + +cat <<End-of-File >$tmp.config +gcov.a = ( 1 / sample.mirage_longlong ) / (1 / sample.mirage ) +gcov.b = ( 1 / sample.mirage ) / (1 / sample.mirage_longlong ) +gcov.c = sample.seconds + disk.all.total +gcov.d = sample.ulong.count.base - sample.ulong.count.kilo +gcov.e = sample.ulong.count.mega - sample.ulong.count.kilo +gcov.f = (1/sample.ulong.count.base) - (1/sample.ulong.count.kilo) +gcov.g = (1/sample.ulong.count.mega) - (1/sample.ulong.count.kilo) +End-of-File +echo +cat $tmp.config + +pminfo -Dderive,appl1 -d gcov >$tmp.out 2>&1 +_filter | _filter2 + +pminfo -f gcov.d gcov.e gcov.f gcov.g + +exit + +# don't have any semantic checking at this stage ... all done earlier + +echo +echo "=== semantic errors ===" +cat <<End-of-File >$tmp.config +End-of-File +echo +cat $tmp.config + +echo +pminfo -Dderive,appl0,appl1 -d my >$tmp.out 2>&1 +_filter + +# success, all done +exit |