diff options
Diffstat (limited to 'qa/243')
-rwxr-xr-x | qa/243 | 136 |
1 files changed, 136 insertions, 0 deletions
@@ -0,0 +1,136 @@ +#! /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 + +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_err() +{ + _filter_pmcd_log \ + | 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/,+1 d' \ + -e 's/ INADDR_ANY/ 0x0/g' +} + +_filter_log() +{ + sleep 3 + _filter_pmcd_log <./pmcd.log \ + | sed \ + -e '/^DATA: from client/d' \ + -e 's/Cannot open 000000660066: No such file or directory//' \ + -e 's/^$//' \ + -e '/^00[08]:/d' \ + -e '/pmGetPDU/{ +s/\[[0-9][0-9]*]/[PID]/ +s/from=.*/from=PID/ +}' \ + -e '/_pmHaveMoreInput/{ +s/\[[0-9][0-9]*]/[PID]/ +s/0x[^ ]*\([^ ][^ ][^ ]\)/ADDR...\1/ +}' \ + -e '/Piggy-back/{ +s/0x[^ ]*\([^ ][^ ][^ ]\)/ADDR...\1/ +s/from=.*/from=PID/ +}' \ + -e '/pmXmitPDU/s/\[[0-9][0-9]*]/[PID]/' \ + -e '/pmResult/s/ .* numpmid/ ... numpmid/' \ + -e '/value /{ +s/value [0-9][0-9]*/value INTEGER/ +}' \ + -e 's;pcp/lib/mips_[^.]*\.;pcp/lib/ISA.;' \ + | $PCP_AWK_PROG ' +$3 ~ /^[0-9][0-9]*$/ { $3 = "A_PID" } + { print }' + +} + +signal=$PCP_BINADM_DIR/pmsignal +_needclean=true + +rm -rf $tmp +mkdir $tmp +chmod ugo+rwx $tmp +cd $tmp + +cleanup() +{ + cd $here + if $_needclean + then + _needclean=false + $signal -s TERM $my_pmcd_pid + sleep 1 + unset PMCD_SOCKET + echo "Restart and ping pmcd ..." + $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start + _wait_for_pmcd + _wait_for_pmlogger + pmprobe pmcd.control.debug + fi + rm -rf $tmp +} + +status=1 +trap "cleanup; exit \$status" 0 1 2 3 15 + +# real QA test starts here +$sudo $PCP_RC_DIR/pcp stop | _filter_pcp_stop + +# 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 + +echo "Checking for startup errors ..." +[ -f err1 ] && _filter_err <err1 + +# Try to start another pmcd. This should fail because the socket is already in +# use. Make sure that there are no changes to the log file +# +if [ -f pmcd.log ] +then + cp pmcd.log pmcd.log.$$ +else + echo "No pmcd.log, pmcd failed to start!" + exit +fi + +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 2>&1 | _filter_err & +sleep 2 + +echo "Checking for startup errors ..." +[ -f err2 ] && _filter_err <err2 + +echo "Checking that log hasn't changed ..." +diff pmcd.log pmcd.log.$$ + +status=$? |