Merge branch 'master' of git://git.pcp.io/pcp into qt
[pcp.git] / qa / 230
blob1b78274dc368f389773c1732f923f2181206e7d3
1 #!/bin/sh
2 # PCP QA Test No. 230
4 # Check timeouts for pmlc's calls to __pmGetPDU
6 # Copyright (c) 2009 Ken McDonell. All Rights Reserved.
9 seq=`basename $0`
10 echo "QA output created by $seq"
12 # get standard environment, filters and checks
13 . ./common.product
14 . ./common.filter
15 . ./common.check
17 status=1
18 $sudo rm -rf $tmp.*
19 rm -f $seq.full
20 trap "_cleanup" 0 1 2 3 15
22 _cleanup()
24 if [ -f $PCP_TMP_DIR/pmlogger/primary.qa.$seq ]
25 then
26 $sudo cp $PCP_TMP_DIR/pmlogger/primary.qa.$seq $PCP_TMP_DIR/pmlogger/primary
27 $sudo rm -f $PCP_TMP_DIR/pmlogger/primary.qa.$seq
29 _restore_primary_logger
30 rm -f $tmp.*
31 exit $status
34 _check()
36 echo "_check $1" >>$seq.full
37 sleep 2
38 pidlist=`_get_pids_by_name "pmlc"`
39 echo "pidlist=$pidlist" >>$seq.full
40 for pid in $pidlist
42 if [ "$pid" = "$1" ]
43 then
44 echo "pmlc still running ... killing it off"
45 kill -TERM $pid
46 return
48 done
49 echo "pmlc has exited"
52 _filter()
54 echo >>$seq.full
55 echo "=== $tmp.out ===">>$seq.full
56 cat $tmp.out >>$seq.full
57 sed <$tmp.out \
58 -e 's/^\[.*]/[DATE]/' \
59 -e 's/pmlc([0-9][0-9]*)/pmlc(PID)/' \
60 -e "s/`pmhostname`/MYHOST/g" \
61 -e "s/`hostname`/MYHOST/g" \
62 -e "s/localhost\.localdomain/MYHOST/g" \
63 -e "s/localhost/MYHOST/g" \
64 -e "s/local:/MYHOST/g" \
65 -e '/^PMCD host/s/\( *\).*/\1HOST/' \
66 -e '/^log started/s/\( *\).*/\1DATE/' \
67 -e '/^last log entry/s/\( *\).*/\1DATE/' \
68 -e '/^current time/s/\( *\).*/\1DATE/' \
69 -e '/^log volume/s/\( *\).*/\1NUMBER/' \
70 -e '/^log size/s/\( *\).*/\1NUMBER/' \
71 -e '/__pmCloseChannelbyFd/d' \
75 if [ ! -f $PCP_TMP_DIR/pmlogger/primary ]
76 then
77 echo "Arrgh ... cannot find $PCP_TMP_DIR/pmlogger/primary"
78 status=1
79 exit
80 #NOTREACHED#
83 # see comment in src/drain-server.c for choice of port #
85 port=1214
87 # real QA test starts here
88 _change_config pmcd on
89 _change_config pmlogger on
90 _writable_primary_logger
91 $sudo $PCP_RC_DIR/pcp restart >/dev/null 2>&1
92 _wait_for_pmlogger
94 $sudo sed -e "1s/.*/$port/" $PCP_TMP_DIR/pmlogger/primary >$tmp.primary
95 $sudo cp $PCP_TMP_DIR/pmlogger/primary $PCP_TMP_DIR/pmlogger/primary.qa.$seq
96 $sudo cp $tmp.primary $PCP_TMP_DIR/pmlogger/primary
98 echo "=== Hang on Connection Cases ===" | tee -a $seq.full
100 echo | tee -a $seq.full
101 echo "Expect hang ..." | tee -a $seq.full
102 src/drain-server -h &
103 draino=$!
104 sleep 2
105 pmlc -e -h localhost -P >$tmp.out 2>&1 &
106 sleep 2
107 _check $!
108 _filter
109 pidlist=`_get_pids_by_name "drain-server"`
110 for pid in $pidlist
112 [ "$draino" = "$pid" ] && kill -TERM $draino
113 done
114 sleep 2
116 echo | tee -a $seq.full
117 echo "Expect hang and warning ..." | tee -a $seq.full
118 src/drain-server -h &
119 draino=$!
120 sleep 2
121 export PMLOGGER_REQUEST_TIMEOUT=1.5
122 pmlc -e -h localhost -P >$tmp.out 2>&1 &
123 sleep 2
124 _check $!
125 _filter
126 pidlist=`_get_pids_by_name "drain-server"`
127 for pid in $pidlist
129 [ "$draino" = "$pid" ] && kill -TERM $draino
130 done
131 sleep 2
133 echo | tee -a $seq.full
134 echo "Expect no hang and unable to connect to pmlogger ..." | tee -a $seq.full
135 src/drain-server &
136 draino=$!
137 sleep 2
138 export PMLOGGER_REQUEST_TIMEOUT=1
139 pmlc -e -h localhost -P >$tmp.out 2>&1 </dev/null
140 _check $!
141 _filter
142 pidlist=`_get_pids_by_name "drain-server"`
143 for pid in $pidlist
145 [ "$draino" = "$pid" ] && kill -TERM $draino
146 done
148 echo | tee -a $seq.full
149 echo "=== Timeout on pmlc commands cases ===" | tee -a $seq.full
151 # put port info back to original state
153 $sudo cp $PCP_TMP_DIR/pmlogger/primary.qa.$seq $PCP_TMP_DIR/pmlogger/primary
154 $sudo rm -f $PCP_TMP_DIR/pmlogger/primary.qa.$seq
156 echo | tee -a $seq.full
157 echo "Check QA code cleared when pmlc exits ..." | tee -a $seq.full
158 unset PMLOGGER_REQUEST_TIMEOUT
159 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
160 qa 1
161 quit
162 End-of-File
163 _check $!
164 _filter
165 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
166 status
167 quit
168 End-of-File
169 _check $!
170 _filter
172 echo | tee -a $seq.full
173 echo "Expect no hang and log command to timeout connecting to pmcd ..." | tee -a $seq.full
174 export PMLOGGER_REQUEST_TIMEOUT=1
175 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
176 qa 1
177 log mandatory on once sample.long.million
178 quit
179 End-of-File
180 _check $!
181 _filter
182 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
184 echo | tee -a $seq.full
185 echo "Expect no hang and 2nd log command to timeout changing logging status ..." | tee -a $seq.full
186 export PMLOGGER_REQUEST_TIMEOUT=1
187 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
188 log mandatory on once sample.long.million
189 qa 1
190 log mandatory on once sample.long.million
191 quit
192 End-of-File
193 sleep 1 # pmlogger needs a little longer for this one
194 _check $!
195 _filter
196 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
198 echo | tee -a $seq.full
199 echo "Expect no hang and status command to timeout ..." | tee -a $seq.full
200 export PMLOGGER_REQUEST_TIMEOUT=1
201 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
202 qa 1
203 status
204 quit
205 End-of-File
206 _check $!
207 _filter
208 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
210 echo | tee -a $seq.full
211 echo "Expect hang and flush command to timeout ..." | tee -a $seq.full
212 export PMLOGGER_REQUEST_TIMEOUT=1
213 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
214 qa 1
215 flush
216 quit
217 End-of-File
218 _check $!
219 _filter
220 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
222 echo | tee -a $seq.full
223 echo "Expect hang and new volume command to timeout ..." | tee -a $seq.full
224 export PMLOGGER_REQUEST_TIMEOUT=1
225 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1 &
226 qa 1
227 new volume
228 quit
229 End-of-File
230 sleep 2
231 _check $!
232 _filter
233 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
235 # skip show loggers command ... this one communicates with pmcd not
236 # pmlogger
238 #echo | tee -a $seq.full
239 #echo "Expect hang and show loggers to timeout ..." | tee -a $seq.full
240 #export PMLOGGER_REQUEST_TIMEOUT=1
241 #cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1 &
242 #qa 1
243 #show loggers
244 #quit
245 #End-of-File
246 #sleep 2
247 #_check $!
248 #_filter
249 #sleep 3 # let pmlogger get out of sleep() so can use pmlc again
251 echo | tee -a $seq.full
252 echo "Expect no hang and query command to timeout connecting to pmcd ..." | tee -a $seq.full
253 export PMLOGGER_REQUEST_TIMEOUT=1
254 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
255 qa 1
256 query sample.long.million
257 quit
258 End-of-File
259 _check $!
260 _filter
261 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
263 echo | tee -a $seq.full
264 echo "Expect no hang and 2nd query command to timeout fetching logging status ..." | tee -a $seq.full
265 export PMLOGGER_REQUEST_TIMEOUT=1
266 cat <<'End-of-File' | pmlc -e -P >$tmp.out 2>&1
267 query sample.long.million
268 qa 1
269 query sample.long.million
270 quit
271 End-of-File
272 sleep 1 # pmlogger needs a little longer for this one
273 _check $!
274 _filter
275 sleep 3 # let pmlogger get out of sleep() so can use pmlc again
277 # success, all done
278 status=0
279 exit