summaryrefslogtreecommitdiff
path: root/qa/348
diff options
context:
space:
mode:
Diffstat (limited to 'qa/348')
-rwxr-xr-xqa/348137
1 files changed, 137 insertions, 0 deletions
diff --git a/qa/348 b/qa/348
new file mode 100755
index 0000000..bd74284
--- /dev/null
+++ b/qa/348
@@ -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