#! /bin/sh
# PCP QA Test No. 115
# exercises pmie_check functionality
# See also of No. 504 ... for a version that uses pmsocks
#
# Copyright (c) 2002 Silicon Graphics, Inc.  All Rights Reserved.
#

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

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

signal=$PCP_BINADM_DIR/pmsignal
lhost=`hostname | sed -e 's/\..*//'`
host=`_get_fqdn`
remote=`./getpmcdhosts -n 1 -L 2>$tmp.out`
rhost=`echo $remote | sed -e 's/\..*//'`
if [ -z "$remote" ]
then
    cat $tmp.out >$seq.notrun
    rm -f $tmp.out
    exit
fi
needclean=false
if [ -z "$PCP_PMIECONTROL_PATH" ]
then
    echo "Arrgh: Botch: PCP_PMIECONTROL_PATH not defined"
    exit 1
fi

_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/$seq-$$/SEQ-PID/g" \
	-e 's/$/ /' \
	-e 's/\([ "]\)'"$remote"'\([ "]\)/\1REMOTEHOST\2/g' \
	-e 's/\([ "]\)'"$rhost"'\([ "]\)/\1REMOTEHOST\2/g' \
	-e 's/\([ "]\)'"$host"'\([ "]\)/\1LOCALHOST\2/g' \
	-e 's/\([ "]\)local:\([ "]\)/\1LOCALHOST\2/g' \
	-e "s;/private/tmp;/tmp;g" \
	-e 's/ $//'
}

_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 files
cat >$tmp.control << EOF
\$version=1.0
$remote         n $tmp.log1 -c $tmp.conf
$remote         n $tmp.log2 -c $tmp.conf
LOCALHOSTNAME   n $tmp.log0 $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

echo === check default install operation ===
$sudo $PCP_RC_DIR/pmie restart 2>&1 | _filter_pmie_start
_count_pmies
echo "pmie count after chkconfig pmie off: $?"
echo

echo === check for missing control file ===
_change_config pmie off
$sudo rm -f $PCP_PMIECONTROL_PATH
_change_config pmie on
$sudo $PCP_RC_DIR/pmie restart 2>&1 | _filter_pmie_start
_count_pmies
echo "pmie count after attempt without control file: $?"
echo

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

$sudo $PCP_RC_DIR/pmie stop 2>&1 \
| _filter_pmie_start \
| sed -e '/pmie: PMIE not running/d'
_change_config pmie off

status=0
exit
