diff options
Diffstat (limited to 'qa/348')
-rwxr-xr-x | qa/348 | 137 |
1 files changed, 137 insertions, 0 deletions
@@ -0,0 +1,137 @@ +#! /bin/sh +# PCP QA Test No. 348 +# Install/Remove for Linux KVM pmda +# +# Copyright (c) 2008 Aconex. All Rights Reserved. +# + +seq=`basename $0` +echo "QA output created by $seq" + +# get standard filters +. ./common.product +. ./common.filter +. ./common.check + +[ $PCP_PLATFORM = linux ] || _notrun "KVM only exists on Linux" +perl -e "use PCP::PMDA" >/dev/null 2>&1 +[ $? -eq 0 ] || _notrun "perl PCP::PMDA module not installed" +kvm_stats_path=/sys/kernel/debug/kvm +$sudo [ -d $kvm_stats_path ] || _notrun "KVM sysfs interface not available" + +rm -f $seq.out +if [ $PCP_VER -lt 3600 ] +then + ln $seq.out.1 $seq.out || exit 1 +else + ln $seq.out.2 $seq.out || exit 1 +fi + +status=1 +done_clean=false +rm -f $seq.full + +install_on_cleanup=false +pminfo kvm >/dev/null 2>&1 && install_on_cleanup=true + +_cleanup() +{ + if $done_clean + then + : + else + [ -f $tmp.pmcd.conf ] && $sudo mv $tmp.pmcd.conf $PCP_PMCDCONF_PATH + rm -f $tmp.* + $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start + _wait_for_pmcd + _wait_for_pmlogger + if $install_on_cleanup + then + ( cd $PCP_PMDAS_DIR/kvm; $sudo ./Install </dev/null >/dev/null 2>&1 ) + else + ( cd $PCP_PMDAS_DIR/kvm; $sudo ./Remove >/dev/null 2>&1 ) + fi + done_clean=true + fi + exit $status +} + +trap "_cleanup" 0 1 2 3 15 + +# real QA test starts here +home=$PCP_PMDAS_DIR +iam=kvm +if [ ! -d $home/$iam ] +then + echo "Where is $home/$iam?" + exit 1 +fi +cd $home/$iam +unset ROOT MAKEFLAGS + +# copy the pmcd config file to restore state later. +cp $PCP_PMCDCONF_PATH $tmp.pmcd.conf + +# start from a known starting point +$sudo ./Remove >/dev/null 2>&1 +$sudo rm -f pmns domain.h + +echo +echo "=== $iam agent installation ===" +$sudo ./Install </dev/null >$tmp.out 2>&1 +# Check kvm metrics have appeared ... X metrics and Y values +_filter_pmda_install <$tmp.out \ +| sed \ + -e '/^Waiting for pmcd/s/\.\.\.[. ]*$/DOTS/' \ +| $PCP_AWK_PROG ' +/Check kvm metrics have appeared/ { if ($7 >= 30 && $7 <= 40) $7 = "X" + if ($10 >= 30 && $10 <= 40) $10 = "Y" + } + { print }' + +if pminfo -v $iam +then + : +else + echo "... failed! ... here is the Install log ..." + cat $tmp.out +fi + +echo +echo "=== validate values ===" +rm -f $tmp.stats $tmp.values $tmp.probe $tmp.diff +pmprobe -v $iam | LC_COLLATE=POSIX sort > $tmp.probe +echo "from pmprobe ..." >>$here/$seq.full +cat $tmp.probe >>$here/$seq.full +for stat in `$sudo find $kvm_stats_path -mindepth 1` +do + value=`$sudo cat $stat` + echo $stat 1 $value | sed -e "s,$kvm_stats_path/,kvm.,g" >> $tmp.stats +done +LC_COLLATE=POSIX sort $tmp.stats > $tmp.values +echo "from /sys/kernel/debug/kvm ..." >>$here/$seq.full +cat $tmp.values >>$here/$seq.full +LC_COLLATE=POSIX join $tmp.probe $tmp.values >$tmp.all +echo >>$here/$seq.full +cat $tmp.all >>$here/$seq.full + +echo +echo "=== check values ===" +cat $tmp.all \ +| while read metric n1 vpcp n2 vsys +do + if [ "$n1" = 1 -a "$n2" = 1 ] + then + _within_tolerance $metric $vpcp $vsys 2% -v + else + echo "$metric: number of values not 1 as expected: pcp $n1 /sys $n2" + fi +done | tee -a $here/$seq.full + +echo +echo "=== remove $iam agent ===" +$sudo ./Remove >$tmp.out 2>&1 +_filter_pmda_remove <$tmp.out + +status=0 +exit |