1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#! /bin/sh
# PCP QA Test No. 295
# verify pmproxy cleans up correctly when clients are terminated
#
# Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
which pmproxy >/dev/null 2>&1 || _notrun "No pmproxy binary installed"
signal=$PCP_BINADM_DIR/pmsignal
status=0 # success is the default!
username=`id -u -n`
trap "_cleanup; $sudo rm -rf $tmp.*; exit \$status" 0 1 2 3 15
pmproxy_was_running=false
[ -f $PCP_RUN_DIR/pmproxy.pid ] && pmproxy_was_running=true
echo "pmproxy_was_running=$pmproxy_was_running" >>$seq_full
OLD_RUN_DIR="$PCP_RUN_DIR"
_cleanup()
{
# kill off the pmproxy we started
#
$sudo $signal -a pmproxy >>$seq_full 2>&1
if $pmproxy_was_running
then
PCP_RUN_DIR="$OLD_RUN_DIR"
export PCP_RUN_DIR
echo "Restart pmproxy ..." >>$seq_full
_service pmproxy restart >>$seq_full 2>&1
_wait_for_pmproxy
else
echo "Stopping pmproxy ..." >>$seq_full
_service pmproxy stop >>$seq_full 2>&1
fi
}
_filter_pmproxy()
{
sed \
-e '/^__pmSetSocketIPC: fd=/d' \
-e '/^__pmSetDataIPC:/d' \
-e '/^__pmDataIPC: /d' \
-e '/^IPC table fd/d' \
-e '/^pmproxy: disabled time series, requires libuv support (missing)/d' \
# end
}
_check()
{
connects=`grep -E 'AcceptNewClient|accept new client' $tmp.log | wc -l`
disconnects=`grep -E 'DeleteClient|connection closed' $tmp.log | wc -l`
difference=`expr $connects - $disconnects`
echo "N connects"
echo "N-$difference disconnects"
echo "--- $tmp.log ---" >>$seq_full
cat $tmp.log >>$seq_full
echo "--- end $tmp.log ---" >>$seq_full
}
if ! _service pmproxy stop >>$seq_full 2>&1; then _exit 1; fi
if $pmproxy_was_running
then
i=0
while [ $i -lt 10 ]
do
if [ ! -f $PCP_RUN_DIR/pmproxy.pid ]
then
break
fi
sleep 1
i=`expr $i + 1`
done
if [ $i -ge 10 ]
then
echo "Warning: failed to kill off pmproxy"
ls -l $PCP_RUN_DIR/pmproxy.pid
cat $PCP_RUN_DIR/pmproxy.pid
fi
fi
mkdir -p $tmp.rundir
PCP_RUN_DIR=$tmp.rundir; export PCP_RUN_DIR
proxyargs="-Dcontext -U $username"
$PCP_BINADM_DIR/pmproxy $proxyargs -l $tmp.log 2>&1 | _filter_pmproxy
# real QA test starts here
PMPROXY_HOST=localhost; export PMPROXY_HOST
pidlist=`sh -c "pmval -h $PMPROXY_HOST hinv.ncpu >$tmp.1 2>&1 & echo \\\$!"`
echo "pmval pid=$pidlist" >>$seq_full
pid=`sh -c "pmstat -h $PMPROXY_HOST >$tmp.2 2>&1 & echo \\\$!"`
echo "pmstat pid=$pid" >>$seq_full
pidlist="$pidlist $pid"
echo "kernel.all.load;" >$tmp.in
pid=`sh -c "pmie -v -h $PMPROXY_HOST -c $tmp.in >$tmp.3 2>&1 & echo \\\$!"`
echo "pmie pid=$pid" >>$seq_full
pidlist="$pidlist $pid"
sleep 3
echo all clients started
echo "expect N connects and N-3 disconnect, thanks to pmie"
_check
for pid in $pidlist
do
echo
echo "kill off a client ..."
echo "kill off client pid=$pid" >>$seq_full
$signal -s KILL $pid >>$seq_full 2>&1
sleep 1
_check
done
echo "pmval output ..." >>$seq_full
cat $tmp.1 >>$seq_full
echo >>$seq_full
echo "pmstat output ..." >>$seq_full
cat $tmp.2 >>$seq_full
echo >>$seq_full
echo "pmie output ..." >>$seq_full
cat $tmp.3 >>$seq_full
# success, all done
exit
|