File: 295

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (134 lines) | stat: -rwxr-xr-x 3,269 bytes parent folder | download
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