diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/041 | |
download | pcp-47e6e7c84f008a53061e661f31ae96629bc694ef.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/041')
-rwxr-xr-x | qa/041 | 158 |
1 files changed, 158 insertions, 0 deletions
@@ -0,0 +1,158 @@ +#! /bin/sh +# PCP QA Test No. 041 +# Test $PCP_RC_DIR/pcp start +# +# 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 = mingw ] && _notrun "Process stop signal not available on Win32" + +_filter() +{ + tee -a $seq.full \ + | _filter_pmcd_log \ + | sed \ + -e '/^ *$/d' \ + -e 's/ -t [0-9][0-9]* / /' \ + -e '/UID/d' \ + -e '/UNAME/d' \ + -e '/USER/d' \ + -e '/host/s/host "[^"]*"/host SOMEHOST/' \ + -e 's/^ *root[^/]*\// USERNAME ... \//' \ + -e 's/^ *pcp[^/]*\// USERNAME ... \//' \ + -e 's/pmcd -.*/pmcd/' \ + -e '/__pmGetPDU:.*illegal PDU len=0/d' \ + | _filter_pcp_start +} + +_expect() +{ + echo "" | tee -a $seq.full + echo "### Expect: $* ###" | tee -a $seq.full + echo "" | tee -a $seq.full +} + +tmp=/var/tmp/qa041.$$ +_needclean=true +TAG=000666000magic +status=1 +[ -z "$PCP_PMLOGGERCONTROL_PATH" ] && \ + PCP_PMLOGGERCONTROL_PATH="$PCP_SYSCONF_DIR/pmlogger/control" + +trap "_cleanup" 0 1 2 3 15 + +_cleanup() +{ + if $_needclean + then + [ -f $tmp.control ] && \ + $sudo cp $tmp.control $PCP_PMLOGGERCONTROL_PATH + $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start + _wait_for_pmcd + _wait_for_pmlogger + _needclean=false + fi + $sudo rm -f $tmp.* + exit $status +} + +if [ -d $PCP_LOG_DIR/pmlogger ] +then + LOGGING_DIR=$PCP_LOG_DIR/pmlogger +else + LOGGING_DIR=$PCP_LOG_DIR +fi + +rm -f $seq.full + +# real QA test starts here + +# disable all pmloggers ... +$sudo cp $PCP_PMLOGGERCONTROL_PATH $tmp.control +cat <<End-of-File >$tmp.tmp +# dummy file created by qa/$seq on `date` +# the goal here is to have a controlled primary logger that does +# not make requests to pmcd! +\$version=1.1 +LOCALHOSTNAME y n $LOGGING_DIR/LOCALHOSTNAME -c /dev/null +End-of-File +$sudo cp $tmp.tmp $PCP_PMLOGGERCONTROL_PATH + +# I have no idea why this is required, but this test run +# after 040 sometimes produces garbled messages unless +# this is done! +$sudo $PCP_RC_DIR/pcp stop >$tmp.out 2>$tmp.err +cat $tmp.out >>$seq.full +_filter_pcp_stop <$tmp.out +cat $tmp.err + +# allow pmcd's socket teardown to complete +# +sleep 2 + +rm -f $tmp.out $tmp.err +_expect "connection refused" +pminfo -f sample.long.million 2>&1 | _filter + +$sudo $PCP_RC_DIR/pcp start >$tmp.one 2>&1 + +_wait_for_pmcd +_expect "one million retrieved OK from sample.long.million" +pminfo -f sample.long.million + +sleep 3 # make sure pmlogger is not clobbered + +pid=`_get_pids_by_name pmcd` +if [ -z "$pid" ] +then + echo "Arrgh ... cannot find PID for pmcd!" + ps $PCP_PS_ALL_FLAGS + echo "=== pmcd.log ===" + cat $PCP_LOG_DIR/pmcd/pmcd.log + echo "=== pmcd.log.prev ===" + cat $PCP_LOG_DIR/pmcd/pmcd.log.prev + exit +fi +echo "pmcd pid=$pid" >>$seq.full +ps $PCP_PS_ALL_FLAGS | egrep "PID|$pid" >>$seq.full + +$sudo kill -STOP $pid + +sleep 3 # make sure pmcd gets the SIGSTOP + +# this will hang, and then see a timeout failure when PMCD is +# killed off +$sudo rm -f $tmp.tmp +PMCD_CONNECT_TIMEOUT=1000 +export PMCD_CONNECT_TIMEOUT +pminfo -f sample.long.million >$tmp.tmp 2>&1 & + +_expect "Starting, Waiting, Forcing termination and Starting again" +ps $PCP_PS_ALL_FLAGS | egrep "PID|$pid" >>$seq.full +$sudo $PCP_RC_DIR/pcp start >$tmp.two 2>&1 + +_wait_for_pmcd +wait + +_filter_pcp_start <$tmp.one | _filter +_filter <$tmp.two +rm -f $tmp.out $tmp.err + +_expect "Timeout waiting for a response from PMCD" +_filter <$tmp.tmp +rm -f $tmp.tmp + +_expect "one million again" +pminfo -f sample.long.million + +# all OK +status=0 +exit |