summaryrefslogtreecommitdiff
path: root/qa/067
diff options
context:
space:
mode:
Diffstat (limited to 'qa/067')
-rwxr-xr-xqa/067194
1 files changed, 194 insertions, 0 deletions
diff --git a/qa/067 b/qa/067
new file mode 100755
index 0000000..0a02dec
--- /dev/null
+++ b/qa/067
@@ -0,0 +1,194 @@
+#! /bin/sh
+# PCP QA Test No. 067
+# Test PMCD's ability to detect and cleanup agents it didn't create when they
+# terminate
+#
+# 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
+
+trap "rm -f $tmp.*; exit" 0 1 2 3 15
+
+# real QA test starts here
+
+signal=$PCP_BINADM_DIR/pmsignal
+config=$PCP_PMCDCONF_PATH
+oconfig=$tmp.pmcd.config
+log=$PCP_PMCDLOG_PATH
+LOCALHOST=`hostname`
+
+_filter_log()
+{
+ sleep 1
+ _filter_pmcd_log <$log \
+ | sed \
+ -e '/^$/d' \
+ -e 's/ *$//' \
+ -e 's/^$//' \
+ -e '/^->/d' \
+ -e '/^00[08]:/d' \
+ -e '/^sample/s/.*/sample agent.../' \
+ -e 's/fd=[0-9][0-9]*/fd=<n>/g' \
+ -e 's/^ ok [0-9]*/ ok <n>/g' \
+ -e '/^test/s/ *[0-9][0-9]* *[0-9][0-9]* ... bin/ <n> <n> <n> bin/' \
+ -e '/Resource busy/d' \
+ -e 's/0x[^ ]*\([^ ][^ ][^ ]\)/ADDR...\1/' \
+ -e '/client connection from/,/^$/d' \
+ -e '/Cleanup/d' \
+ -e '/Info: spindle_stats_init/d' \
+ -e '/UNIX_DOMAIN_SOCKET/d'
+}
+
+_filter_pmda_log()
+{
+ sed \
+ -e 's/^\(Log for pmda[^ ]* on\) .*/\1 HOST .../' \
+ -e 's/^\(Log finished\) .*/\1 .../'
+}
+
+interrupt()
+{
+ echo "Interrupted"
+ exit
+}
+
+if [ -d $PCP_LOG_DIR/pmlogger ]
+then
+ LOGGING_DIR=$PCP_LOG_DIR/pmlogger
+else
+ LOGGING_DIR=$PCP_LOG_DIR
+fi
+
+cleanup()
+{
+ if [ -f $oconfig ]
+ then
+ $sudo mv $oconfig $config
+ fi
+ pmafm $LOGGING_DIR/$LOCALHOST/Latest remove >$tmp.cmd 2>&1 \
+ && $sudo sh $tmp.cmd
+ echo "Restarting pmcd"
+ $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+ _wait_for_pmcd
+ _wait_for_pmlogger
+ rm -f $tmp.*
+}
+
+trap interrupt 1 2 3 15
+trap cleanup 0
+
+domain=246
+if [ $PCP_PLATFORM = linux ]
+then
+ cat >$tmp <<End-of-file
+linux 60 dso linux_init $PCP_PMDAS_DIR/linux/pmda_linux.so
+pmcd 2 dso pmcd_init $PCP_PMDAS_DIR/pmcd/pmda_pmcd.so
+test $domain socket inet 2222
+End-of-file
+elif [ $PCP_PLATFORM = darwin ]
+then
+ cat >$tmp <<End-of-file
+darwin 78 dso darwin_init $PCP_PMDAS_DIR/darwin/pmda_darwin.dylib
+pmcd 2 dso pmcd_init $PCP_PMDAS_DIR/pmcd/pmda_pmcd.dylib
+test $domain socket inet 2222
+End-of-file
+elif [ $PCP_PLATFORM = solaris ]
+then
+ cat >>$tmp <<End-of-File
+solaris 75 dso solaris_init $PCP_PMDAS_DIR/solaris/pmda_solaris.so
+pmcd 2 dso pmcd_init $PCP_PMDAS_DIR/pmcd/pmda_pmcd.so
+test $domain socket inet 2222
+End-of-File
+else
+ echo "Error - need pmcd.conf setup for $PCP_PLATFORM"
+ exit 1
+fi
+
+# netstat -an formats
+#
+# Redhat 7.3 and 9
+# tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN
+#
+# Mac OS X 10.6
+# tcp4 0 0 *.2222 *.* LISTEN
+#
+# openindiana
+# *.2222 *.* 0 0 128000 0 LISTEN
+#
+
+$sudo $signal -a pmgadgets pmchart pmview pmie >/dev/null 2>&1
+src/pmdashutdown -i 2222 -d $domain -l $tmp.pmdalog &
+pid=$!
+echo "pmdashutdown pid: $pid" >$seq.full
+sleep 1
+echo
+echo "port 2222 should be listening"
+netstat -an \
+| tee -a $seq.full \
+| grep '[.:]2222 ' \
+| sed \
+ -e 's/127\.0\.0\.1/*/g' \
+ -e 's/0\.0\.0\.0/*/g' \
+ -e 's/:/./g' \
+ -e 's/.*\(\*.2222\).*\(LISTEN\).*/... \1 ... \2/'
+echo
+
+cp $config $oconfig
+$sudo mv $tmp $config
+pmafm $LOGGING_DIR/$LOCALHOST/Latest remove >$tmp.cmd 2>&1 \
+&& $sudo sh $tmp.cmd
+$sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+_wait_for_pmcd
+# echo "config:"
+# cat $config | sed -e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;"
+echo
+
+# wait for pmdashutdown to finish
+#
+for t in 1 2 3 4 5 6
+do
+ echo >>$seq.full
+ echo "wait for pmdashutdown to finish ... cycle $t" >>$seq.full
+ if ps $PCP_PS_ALL_FLAGS | tee -a $seq.full | cut -f1 | grep $pid >/dev/null 2>&1
+ then
+ sleep 2
+ else
+ break
+ fi
+done
+
+echo >>$seq.full
+cat $tmp.pmdalog >>$seq.full
+echo
+echo "pmda log (should have terminated):"
+_filter_pmda_log <$tmp.pmdalog
+echo
+
+$sudo $signal -a -s HUP pmcd
+
+# wait for PMCD to finish writing log (or 5 seconds)
+for t in 1 2 3 4 5
+do
+ if egrep '^Cleanup "test" agent' $log >/dev/null 2>&1
+ then
+ break
+ fi
+ sleep 1
+done
+
+_filter_log