summaryrefslogtreecommitdiff
path: root/qa/255
diff options
context:
space:
mode:
Diffstat (limited to 'qa/255')
-rwxr-xr-xqa/255383
1 files changed, 383 insertions, 0 deletions
diff --git a/qa/255 b/qa/255
new file mode 100755
index 0000000..bd12ba0
--- /dev/null
+++ b/qa/255
@@ -0,0 +1,383 @@
+#! /bin/sh
+# PCP QA Test No. 255
+# exercise pmcd <-> pmda version exchange
+# Bug #508731
+#
+# 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
+
+signal=$PCP_BINADM_DIR/pmsignal
+status=1 # failure is the default!
+errlist=''
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+$sudo rm -f $seq.full $tmp.*
+echo "=== I am PID $$" >>$seq.full
+echo "=== /tmp files" >>$seq.full
+$sudo ls -l /tmp/[0-9][0-9]*.* >>$seq.full 2>&1
+echo "=== config files" >>$seq.full
+ls -l $PCP_PMCDCONF_PATH $PCP_PMCDOPTIONS_PATH >>$seq.full
+
+unset ROOT MAKEFLAGS
+
+simple_domain=253
+broken_domain=249
+num_warn=0
+
+# pmcd may be quite some distance away
+#
+PMCD_CONNECT_TIMEOUT=30
+PMCD_REQUEST_TIMEOUT=30
+export PMCD_CONNECT_TIMEOUT PMCD_REQUEST_TIMEOUT
+
+_filter_ins()
+{
+ sed \
+ -e '/^Installing .mchart view*/d' \
+ -e 's/.* \(hash table entries\)/ NNN \1/' \
+ -e 's/.* \(non-leaf nodes\)/ NNN \1/' \
+ -e 's/.* \(leaf nodes\)/ NNN \1/' \
+ -e 's/.* \(bytes of symbol table\)/ NNN \1/'
+}
+
+_filter_pmcd()
+{
+ _filter_pmcd_log \
+ | sed \
+ -e "/^simple.*bin/s/$simple_domain[ ]*[0-9]*[ ]*[0-9]*[ ]*[0-9]*/SIMPLE PID FD FD/" \
+ -e "/^simple.*dso/s/$simple_domain/SIMPLE/" \
+ -e "/^broken.*bin/s/$broken_domain[ ]*[0-9]*[ ]*[0-9]*[ ]*[0-9]*/BROKEN PID FD FD/" \
+ -e "s/[1-2][ ]dso.*irix_init/LIBIRIXPMDA DSO/" \
+ -e "s/[1-2][ ]dso.*linux_init/LINUX DSO/" \
+ -e "s;$PCP_PMDAS_DIR;PCP_PMDAS_DIR;g" \
+ -e "s/ISA\.//g" \
+ -e "s/ \[(nil)]//g" \
+ -e "s/cmd=.*pmdas\/broken./cmd=/" \
+ -e "s/ fd=[0-9]*/ fd=FD/" \
+ -e "s/\.$DSO_SUFFIX/.\$DSO_SUFFIX/g" \
+ -e '/UNIX_DOMAIN_SOCKET/d' \
+ | $PCP_AWK_PROG '
+BEGIN { skip = 0 }
+/client connection from/ { print; print "..."; skip=1; next }
+skip == 1 && NF == 0 { skip = 0 }
+skip == 1 { next }
+ { print }'
+}
+
+_filter_init()
+{
+ sed \
+ -e "s/$$/PID/g" \
+ | _filter_pcp_start
+}
+
+# Remove the PMDA and restore pmcd.conf
+#
+_cleanup()
+{
+ echo ""
+ echo "=== Removing broken_pmda namespace ==="
+ cd $here/pmdas/broken
+ $sudo ./broken_Remove -N
+ cd $here
+ sleep 4
+ _wait_for_pmcd
+
+ if [ -f $tmp.conf ]
+ then
+ echo "=== Resetting pmcd.conf back to original state ==="
+ $sudo cp $tmp.conf $PCP_PMCDCONF_PATH
+ fi
+ if [ -f $tmp.options ]
+ then
+ echo "=== Resetting pmcd.options back to original state ==="
+ echo '=== $PCP_PMCDOPTIONS_PATH before cp' >>$seq.full
+ cat $PCP_PMCDOPTIONS_PATH >>$seq.full
+ echo '=== $tmp.options before cp' >>$seq.full
+ cat $tmp.options >>$seq.full
+ $sudo cp $tmp.options $PCP_PMCDOPTIONS_PATH
+ fi
+ if [ -f $tmp.conf -o -f $tmp.options ]
+ then
+ echo "=== Restart PMCD ==="
+ echo '=== $PCP_PMCDCONF_PATH before init.d/pcp/start' >>$seq.full
+ cat $PCP_PMCDCONF_PATH >>$seq.full
+ echo '=== $PCP_PMCDOPTIONS_PATH before init.d/pcp/start' >>$seq.full
+ cat $PCP_PMCDOPTIONS_PATH >>$seq.full
+ $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+ _wait_for_pmcd
+ fi
+ if [ -f $tmp.log ]
+ then
+ echo "=== Filter pmcd.log ==="
+ cat $tmp.log | _filter_pmcd
+ echo '=== pmcd log' >>$seq.full
+ cat $tmp.log >>$seq.full
+ fi
+ if [ -f $tmp.cron ]
+ then
+ echo "=== Restoring crontab ==="
+ _restore_cron $tmp.cron $sudo
+ fi
+ [ -f $PCP_PMDAS_DIR/simple/simple.conf.$seq ] && $sudo mv $PCP_PMDAS_DIR/simple/simple.conf.$seq $PCP_PMDAS_DIR/simple/simple.conf
+
+ echo "=== /tmp files" >>$seq.full
+ $sudo ls -l /tmp/[0-9][0-9]*.* >>$seq.full 2>&1
+ echo "=== config files" >>$seq.full
+ ls -l $PCP_PMCDCONF_PATH $PCP_PMCDOPTIONS_PATH >>$seq.full
+
+ $sudo rm -rf $tmp.*
+ _wait_for_pmlogger
+}
+
+# Removing cron entries that may collide
+#
+echo "=== Removing potential cron conflicts ==="
+_remove_cron $tmp.cron $sudo
+
+# Install broken pmda namespace
+#
+echo "=== Install broken namespace ==="
+cd $here/pmdas/broken
+$sudo ./broken_Install -N < /dev/null | _filter_ins 2>&1
+cd $here
+echo "=== Broken PMNS ==="
+if pminfo broken
+then
+ :
+else
+ echo "Unable to install broken namespace, exiting"
+ exit
+fi
+
+# Build simple agent
+#
+echo "=== Building simple agent ==="
+cd $PCP_PMDAS_DIR/simple
+
+# get rid of warnings from simple if no config exists
+#
+[ -f simple.conf ] && $sudo mv simple.conf simple.conf.$seq
+echo "sec,min,hour" >$tmp.simple.conf
+$sudo cp $tmp.simple.conf simple.conf
+
+# Install the simple namespace, I don't bother to remove it again
+#
+$sudo ./Install -N < /dev/null | _filter_ins 2>&1
+echo "Namespace installed"
+
+# if $sudo smake -f Makefile > $tmp.make 2>&1
+if $sudo make > $tmp.make 2>&1
+then
+ echo "PMDA built"
+else
+ echo "Unable to build the simple PMDA:"
+ cat $tmp.make
+ exit
+fi
+sed -e "/^@ SIMPLE/s/SIMPLE/$simple_domain/" < help \
+| $sudo $PCP_BINADM_DIR/newhelp -v 2 -o help
+echo "Help generated"
+cd $here
+
+# Replace pmcd.options
+#
+echo "=== Replacing pmcd.options ==="
+$sudo cp $PCP_PMCDOPTIONS_PATH $tmp.options
+cat << end-of-file > $tmp.newoptions
+# New pmcd.options file created by QA 255
+#
+-t 10
+-l $tmp.log
+-T 0
+end-of-file
+
+$sudo cp $tmp.newoptions $PCP_PMCDOPTIONS_PATH
+# Do not restart pmcd here, do it after changing pmcd.conf later
+
+_renew_pmcd()
+{
+ echo "=== Restarting PMCD with minimal PMDAs ==="
+ if [ -f $tmp.newconf ]
+ then
+ $sudo cp $tmp.newconf $PCP_PMCDCONF_PATH
+ $sudo $signal -a -s HUP pmcd >/dev/null 2>&1
+ sleep 4
+ _wait_for_pmcd
+ else
+ echo caller - $1 - has not created $tmp.newconf !!!
+ fi
+}
+
+# Install a standard pmda, but do not mess with the namespace
+#
+_agent_install()
+{
+ agent=$1
+ domain=$2
+ daemon=$3
+ path=$PCP_PMDAS_DIR/$agent
+
+ echo "=== Installing $agent ==="
+ cp $tmp.newconf $tmp.latest
+ if $daemon
+ then
+ cat << end-of-file >> $tmp.latest
+$agent $domain pipe binary $path/pmda$agent -d $domain
+end-of-file
+ else
+ prefix=
+ [ $PCP_PLATFORM = irix ] && prefix=`pmobjstyle`.
+ cat << end-of-file >> $tmp.latest
+$agent $domain dso ${agent}_init $path/${prefix}pmda_$agent.$DSO_SUFFIX
+end-of-file
+ fi
+
+ $sudo cp $tmp.latest $PCP_PMCDCONF_PATH
+ # after non-root pmcd changes, the log files may be owned by
+ # root.root or pcp.pcp depending on the pattern of installs and
+ # pmcd restarts ... to be sure we can write the log files, remove
+ # any old ones before signalling pmcd
+ #
+ $sudo rm -f $PCP_LOG_DIR/pmcd/simple.log* $PCP_LOG_DIR/pmcd/broken.log*
+ $sudo $signal -a -s HUP pmcd >/dev/null 2>&1
+ sleep 4
+ _wait_for_pmcd
+
+ if _check_agent $agent
+ then
+ echo "$agent is alive and well"
+ else
+ echo "Failed to install $agent"
+ exit
+ fi
+}
+
+# Remove a pmda
+#
+_agent_remove()
+{
+ agent=$1
+
+ echo "=== Removing $agent ==="
+ _renew_pmcd _agent_remove
+
+ if _check_agent $agent
+ then
+ echo "Failed to remove $agent"
+ exit
+ else
+ echo "$agent was removed"
+ fi
+}
+
+# Install broken pmda
+#
+_broken_install()
+{
+ agent=$1
+ ver=$2
+
+ echo "=== Installing $agent ==="
+ cp $tmp.newconf $tmp.latest
+ cat << end-of-file >> $tmp.latest
+broken $broken_domain pipe binary $here/pmdas/broken/$agent -d $broken_domain
+end-of-file
+
+ $sudo cp $tmp.latest $PCP_PMCDCONF_PATH
+ $sudo $signal -a -s HUP pmcd >/dev/null 2>&1
+ sleep 4
+ _wait_for_pmcd
+
+ if _check_agent broken
+ then
+ echo "$agent is alive and well...hang on there should be some warnings"
+ pminfo -f broken
+ exit
+ elif [ "$num_warn" -ne 5 ]
+ then
+ echo "Failed to properly install $agent, expected 4 warnings"
+ exit
+ else
+ echo "$agent is alive and as well as can be expected"
+ fi
+}
+
+# Copy and replace pmcd.conf
+#
+cp $PCP_PMCDCONF_PATH $tmp.conf
+cat << end-of-file > $tmp.newconf
+# pmcd.conf generated by QA 255
+#
+end-of-file
+
+if [ $PCP_PLATFORM = irix ]
+then
+ cat >>$tmp.newconf <<End-of-File
+# from qa/$seq
+irix 1 dso irix_init libirixpmda.so
+pmcd 2 dso pmcd_init pmda_pmcd.so
+End-of-File
+elif [ $PCP_PLATFORM = linux ]
+then
+ cat >>$tmp.newconf <<End-of-File
+# from qa/$seq
+linux 60 dso linux_init $PCP_PMDAS_DIR/linux/pmda_linux.so
+pmcd 2 dso pmcd_init $PCP_PMDAS_DIR/pmcd/pmda_pmcd.so
+End-of-File
+elif [ $PCP_PLATFORM = darwin ]
+then
+ cat >>$tmp.newconf <<End-of-File
+# from qa/$seq
+darwin 78 dso darwin_init $PCP_PMDAS_DIR/darwin/pmda_darwin.dylib
+pmcd 2 dso pmcd_init $PCP_PMDAS_DIR/pmcd/pmda_pmcd.dylib
+End-of-File
+elif [ $PCP_PLATFORM = solaris ]
+then
+ cat >>$tmp.newconf <<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
+End-of-File
+else
+ echo "Arrgh ... need pmcd.conf for $PCP_PLATFORM"
+ exit 1
+fi
+
+_renew_pmcd main
+
+# Start with a fresh pmcd log
+#
+$sudo $signal -a pmgadgets pmchart pmview >/dev/null 2>&1
+$sudo $PCP_RC_DIR/pcp restart | _filter_init 2>&1
+_wait_for_pmcd
+
+# Test 2.0 PMDA first
+#
+_agent_install simple $simple_domain true
+_agent_remove simple
+_agent_install simple $simple_domain false
+_agent_remove simple
+
+# Test 2.0 broken PMDA
+#
+_broken_install broken_pmda_2_0 2
+_agent_remove broken
+
+status=0
+exit