diff options
Diffstat (limited to 'qa/common.gfs2')
-rw-r--r-- | qa/common.gfs2 | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/qa/common.gfs2 b/qa/common.gfs2 new file mode 100644 index 0000000..4606e1f --- /dev/null +++ b/qa/common.gfs2 @@ -0,0 +1,154 @@ +# +# Common pre-test checking and settings for GFS2 QA. Handles setup for +# the basic environment needed for GFS2 pmda testing. +# +# Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. +# + +# get standard environment, filters and checks +. ./common.product +. ./common.filter +. ./common.check + +_gfs2_filesystem_support_tests() +{ + [ $PCP_VER -ge 3611 ] || _notrun "Installed pcp version is too old" + [ $PCP_PLATFORM = linux ] || _notrun "GFS2 test, only works with Linux" + + grep gfs2 /proc/filesystems >/dev/null + if [ $? -ne 0 ]; then + $sudo modprobe gfs2 + if [ $? -ne 0 ]; then + _notrun "no GFS2 module to load and not builtin" + fi + + grep gfs2 /proc/filesystems >/dev/null + if [ $? -ne 0 ]; then + _notrun "failed to load the gfs2 module successfully, sorry" + fi + fi + + if ! type "mkfs.gfs2" > /dev/null; then + _notrun "mkfs.gfs2 not found, please install gfs2-utils" + fi +} + +_debugfs_mount_tests() +{ + if [ ! -d /sys/kernel/debug/gfs2/ ]; then + $sudo mount -t debugfs none /sys/kernel/debug + + if [ ! -d /sys/kernel/debug/gfs2/ ]; then + _notrun "debugfs not mounted and have been unable to mount" + fi + fi +} + +_gfs2_tracepoints_support_tests() +{ + [ -d /sys/kernel/debug/tracing/events/gfs2 ] || \ + _notrun "No kernel support for GFS2 tracepoint stats" + + [ -d /sys/kernel/debug/tracing/events/gfs2/gfs2_glock_lock_time ] || \ + _notrun "No GFS2 support for gfs2_glock_lock_time tracepoint" +} + +_gfs2_sysfs_support_tests() +{ + for fs in 1 0 + do + [ -f /sys/kernel/debug/gfs2/loop$fs/glocks ] || \ + _notrun "No GFS2 glocks sysfs support" + + [ -f /sys/kernel/debug/gfs2/loop$fs/glstats ] || \ + _notrun "No GFS2 glstats sysfs support" + + [ -f /sys/kernel/debug/gfs2/loop$fs/sbstats ]|| \ + _notrun "No GFS2 sbstats sysfs support" + done +} + +_gfs2_filter_pminfo() +{ + # The order in which loop device paths are evaluated is non-deterministic + # but that's ok; we just want to check both are found and have some value + # + tee -a $here/$seq.full | sed \ + -e 's/value [-?0-9.e+][-?0-9.e+]*/value NUMBER/' \ + -e 's/"loop[01]"/"loopN"/g' +} + +_pmcount() +{ + pminfo $1 | grep -c . +} + +_filter_gfs2() +{ + sed -e 's/ and [0-9[0-9]* values/ and N values/g' +} + +_setup_gfs2_mounts() +{ + # create a couple of filesystems on sparse files, mount. + for fs in 1 0 + do + echo "creating pseudo device $fs" + dd of=$tmp.loop$fs if=/dev/zero bs=1048576 seek=1024 count=1 2>/dev/null + echo "creating a mount point $fs" + mkfs.gfs2 -O -p lock_nolock -j 1 $tmp.loop$fs >/dev/null + echo "creating device file $fs" + $sudo losetup /dev/loop$fs $tmp.loop$fs + echo "creating a mount point $fs" + mkdir -p $tmp.mount$fs.dir + echo "mounting pseudo device $fs" + $sudo mount -t gfs2 /dev/loop$fs $tmp.mount$fs.dir + done +} + +_setup_gfs2_tracepoints() +{ + enable_tracing=$1 + [ "X$enable_tracing" == X ] && enable_tracing=false + + file=/sys/kernel/debug/tracing/events/gfs2/enable + [ -f $file ] || _notrun "Cannot enable gfs2 tracepoints" + + $enable_tracing || continue + echo "enabling gfs2 tracepoints" + $sudo sh -c "echo 1 > $file" +} + +_install_pmda() +{ + # install the PMDA + cd $PCP_PMDAS_DIR/$iam + $sudo ./Remove < /dev/null >/dev/null 2>&1 + $sudo ./Install < /dev/null >$tmp.out 2>&1 + cat $tmp.out | _filter_pmda_install | sed \ + -e '/.*pmcd.*/d' \ + -e '/.*pmlogger.*/d' \ + -e '/Latest.*/d' \ + -e '/Duplicate.*/d' +} + +_remove_pmda() +{ + cd $PCP_PMDAS_DIR/$iam + $sudo ./Remove < /dev/null > /dev/null 2>&1 +} + +_cleanup() +{ + for fs in 0 1 + do + $sudo umount $tmp.mount$fs.dir + $sudo losetup -d /dev/loop$fs + done + + _restore_pmda_install $iam + $sudo rm -fr $tmp.*.dir + $sudo rm -f $tmp.* + exit $status +} + |