#!/bin/sh
# PCP QA Test No. 857
# Check Linux interrupts and softirqs metrics with valgrind.
#
# Copyright (c) 2016 Red Hat.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

_check_valgrind
[ $PCP_PLATFORM = linux ] || _notrun "Linux interrupts test, only works with Linux"

_cleanup()
{
    # Need to clear the linux PMDA's indom cache when we're done to
    # prevent cross-version pollution
    #
    $sudo rm -f $PCP_VAR_DIR/config/pmda/60.*
    cd $here
    rm -rf $tmp.*
}

status=1	# failure is the default!
$sudo rm -rf $tmp.* $seq.full
trap "_cleanup; exit \$status" 0 1 2 3 15

_filter()
{
    sed \
	-e "s,$PCP_PMDAS_DIR,PCP_PMDAS_DIR,g" \
    #end
}

# real QA test starts here
pmda=$PCP_PMDAS_DIR/linux/pmda_linux.so,linux_init
metrics="kernel.percpu.intr kernel.percpu.interrupts kernel.percpu.sirq kernel.percpu.softirqs"

for machine in 8cpu-x86_64 1cpu-i686
do
    # Need to clear the linux PMDA's indom cache before we run with -L
    # to prevent cross-version pollution
    #
    $sudo rm -f $PCP_VAR_DIR/config/pmda/60.*

    ncpus=`echo $machine | sed -e 's/cpu.*//g'`
    export LINUX_STATSPATH=$tmp.root
    export LINUX_NCPUS=$ncpus

    mkdir -p $LINUX_STATSPATH/proc
    cp $here/linux/interrupts-$machine $LINUX_STATSPATH/proc/interrupts
    cp $here/linux/softirqs-$machine $LINUX_STATSPATH/proc/softirqs
    _make_proc_stat $LINUX_STATSPATH/proc/stat $ncpus

    echo "== Checking interrupts and softirqs names - $ncpus CPU(s)"
    _run_valgrind pminfo -L -K clear -K add,60,$pmda $metrics | _filter
    echo && echo "== done" && echo

    echo "== Checking interrupts and softirqs values"
    _run_valgrind pminfo --fetch -L -K clear -K add,60,$pmda $metrics | _filter
    echo && echo "== done" && echo

    echo "== Checking interrupts and softirqs helptext"
    _run_valgrind pminfo -tT -L -K clear -K add,60,$pmda $metrics | _filter
    echo && echo "== done" && echo

    rm -fr $LINUX_STATSPATH/proc
done

# success, all done
status=0
exit
