File: 243

package info (click to toggle)
pcp 7.0.5-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,916 kB
  • sloc: ansic: 1,478,844; sh: 177,285; xml: 160,462; cpp: 83,809; python: 24,349; perl: 18,303; yacc: 6,877; lex: 2,864; makefile: 2,694; awk: 165; fortran: 60; java: 52
file content (157 lines) | stat: -rwxr-xr-x 3,640 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#! /bin/sh
# PCP QA Test No. 243
# Multiple PMCDs test
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

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

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

[ $PCP_PLATFORM = darwin ] && _notrun "Who knows what the darwin networking code is doing, don't bother with this test"

rm -f $seq.out
_get_libpcp_config
if $ipv6 ; then
    ln $seq.out.ipv6 $seq.out || exit 1
else
    ln $seq.out.nonipv6 $seq.out || exit 1
fi

_filter_info()
{
    sed -e '/PMNS file "DEFAULT" is unchanged/d'
}

_filter_err()
{
    _filter_pmcd_log \
    | _filter_info \
    | sed \
	-e 's/ __pmBind: / bind: /g' \
	-e 's/may already be running/is already running/g' \
	-e '/Log for pmcd/,/INADDR_ANY/c\
... boring stuff deleted' \
	-e '/ok FD 44321 ipv6 INADDR_ANY/d' \
	-e '/OpenRequestSocket.*unix.*bind: Address already in use/{
N
d
}' \
	-e 's/ INADDR_ANY/ 0x0/g' \
	-e "s@$tmp@TMP@g" \
	#end
}

signal=$PCP_BINADM_DIR/pmsignal
_needclean=true

mkdir $tmp
chmod ugo+rwx $tmp
cd $tmp

_cleanup()
{
    cd $here
    if $_needclean
    then
	_needclean=false
	$signal -s TERM $my_pmcd_pid
	pmsleep 1.5
	unset PMCD_SOCKET
	echo "Restart and ping pmcd ..."
	_service pmcd restart 2>&1 | _filter_pcp_restart
	_wait_for_pmcd
	_restore_auto_restart pmcd
	_service pmlogger restart 2>&1 | _filter_pcp_restart
	_wait_for_pmlogger
	pmprobe pmcd.control.debug
    fi
    rm -rf $tmp $tmp.*
}

status=1
trap "_cleanup; exit \$status" 0 1 2 3 15

_stop_auto_restart pmcd

# real QA test starts here
if ! _service pmlogger stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmlogger_end || _exit 1
if ! _service pmcd stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmcd_end || _exit 1

# Note: start pmcd with -f so that its PID stays the same (no daemon)
#
export PMCD_SOCKET=$tmp/pmcd.socket
$PCP_PMCD_PROG -f -x err1 &
my_pmcd_pid=$!

_wait_for_pmcd || _exit 1

echo "Checking for startup errors ..."
[ -f err1 ] && _filter_err <err1

# Save pmcd log file to date ...
#
# Although _wait_for_pmcd() returns and pmcd is alive, the log file
# may not have been created yet ... be a little patient
#
for i in 1 2 3 4 5 6 7 8 9 10
do
    [ -f pmcd.log ] && break
    pmsleep 0.2
done
if [ -f pmcd.log ]
then
    _filter_info < pmcd.log > pmcd.log1.$$
else
    echo "No pmcd.log, pmcd failed to start?"
    $PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mcd( |$)'
    exit
fi

# Try to start another pmcd.  This should fail because the socket is
# already in use.
#
echo
echo "Trying to start another PMCD over the top of the first one."
echo "Expect \"bind:  Address already in use\"...:"
$PCP_PMCD_PROG -f -x err2 -l $tmp.log 2>&1 | _filter_err &

# EADDRINUSE errors now have 4x250 msec delay while we retry before giving
# up, and this happens once per socket type, so up to 3 times ... and then
# wait a little longer ...
pmsleep 3.5

ls -l err2 >>$seq_full 2>&1
echo "Checking for startup errors ..."
if [ -f err2 ]
then
    echo "+++ err for second pmcd +++" >>$seq_full
    cat err2 >>$seq_full 2>&1
    _filter_err <err2
fi
ls -l $tmp.log >>$seq_full 2>&1
echo "+++ log file for second pmcd +++" >>$seq_full
cat $tmp.log >>$seq_full 2>&1

# Make sure that there are no changes to the pmcd log file
#
echo "Checking that the original pmcd log hasn't changed ..."
_filter_info < pmcd.log > pmcd.log2.$$
if diff pmcd.log2.$$ pmcd.log1.$$
then
    status=0
else
    echo "+++ log file for first pmcd (1) +++" >>$seq_full
    cat pmcd.log2.$$ >>$seq_full
    echo "+++ log file for first pmcd (2) +++" >>$seq_full
    cat pmcd.log1.$$ >>$seq_full
fi