#! /bin/sh
# PCP QA Test No. 504
# exercises pmie_check functionality
# Version of No. 115 ... this one uses pmsocks
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`

if [ "`pmsocks echo ok 2>&1`" != ok ]
then
    echo "pmsocks is not installed and/or not configured" >$seq.notrun
    echo "$seq: [not run] `cat $seq.notrun`"
    exit 0
fi

echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.check
. ./common.filter
. ./common.config

#  Requires common.product:
if [ "$PCP_VER" -lt 2200 ]
then
    echo "test aborted; known problem with pmsocks (#816862)" >$seq.notrun
    echo "$seq: [not run] `cat $seq.notrun`"
    exit 0
fi

signal=$PCP_BINADM_DIR/pmsignal
lhost=`hostname`
host=`_get_fqdn`
remote=`./getpmcdhosts -n 1 -L 2>/dev/null`
if [ -z "$PCP_PMIECONTROL_PATH" ]
then
    echo "Arrgh: Botch: PCP_PMIECONTROL_PATH not defined"
    exit 1
fi
needclean=false

_cleanup()
{
    if $needclean
    then
	$sudo cp $tmp.control.bak $PCP_PMIECONTROL_PATH
	$sudo chown pcp:pcp $PCP_PMIECONTROL_PATH
	$sudo chmod 664 $PCP_PMIECONTROL_PATH
	$sudo cp $tmp.pmcd.bak $PCP_PMCDCONF_PATH
    fi
    $sudo rm -f $tmp.*
}

status=1	# failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_filter()
{
    sed \
	-e "s/$$/PID/g" \
	-e "s/$remote/REMOTEHOST/g" \
	-e "s/$host/LOCALHOST/g" \
	-e "s/$lhost/LOCALHOST/g" \
	-e "s/local:/LOCALHOST/g" \

}

_count_pmies()
{
    count=0
    if [ -d $PCP_TMP_DIR/pmie ] 
    then cd $PCP_TMP_DIR/pmie
    else return 0
    fi

    plist=`ls -1`
    cd $here

    for process in $plist
    do
	ps -p $process >/dev/null 2>&1
	if [ $? = 1 ]
	then
	    echo "urk, $PCP_TMP_DIR/pmie/$process has no running pmie instance"
	else
	    count=`expr $count + 1`
	fi
    done

    return $count
}

# create a basic pmcd config file
cat >$tmp.pmcd.conf << EOF
# from QA $seq
irix	1	dso	irix_init	libirixpmda.so
pmcd	2	dso	pmcd_init	pmda_pmcd.so
proc	3	dso	proc_init	pmda_proc.so
EOF

# create a pmie config file
cat >$tmp.conf << EOF
foo = sample.long.one;
doo = sample.long.ten;
EOF

# create pmie control file
cat >$tmp.control << EOF
\$version=1.0
LOCALHOSTNAME   y $tmp.log0 $tmp.conf
$remote         n $tmp.log1 -c $tmp.conf
$remote         y $tmp.log2 -c $tmp.conf
EOF

# real QA test starts here
cp $PCP_PMIECONTROL_PATH $tmp.control.bak
cp $PCP_PMCDCONF_PATH $tmp.pmcd.bak
needclean=true
$sudo cp $tmp.pmcd.conf $PCP_PMCDCONF_PATH 

$sudo $signal -a -s TERM pmie >/dev/null 2>&1
_change_config pmcd on
_change_config pmie off
$sudo rm -f $PCP_TMP_DIR/pmie/*

_count_pmies
echo "pmie count at start of QA testing: $?"
echo

SOCKS_SERVER=$PCPQA_SOCKS_SERVER
export SOCKS_SERVER

_change_config pmie on
$sudo cp $tmp.control $PCP_PMIECONTROL_PATH
$sudo chown pcp:pcp $PCP_PMIECONTROL_PATH
$sudo chmod 664 $PCP_PMIECONTROL_PATH

echo === check pmie_check and custom config ===
pmie_check -V -V -N -c $tmp.control 2>&1 | _filter
# don't bother counting pmie processes, as -N is used above!
#
echo

echo === check customised control file ===
$sudo $PCP_RC_DIR/pmie restart 2>&1 | _filter_pmie_start
sleep 30	# can take awhile, but in bg - TODO: really needs a "pmie_wait"
_count_pmies
echo "pmie count with custom config (expect 3): $?"
echo

$sudo $PCP_RC_DIR/pmie stop 2>&1 | _filter_pmie_start
_change_config pmie off

status=0
exit
