summaryrefslogtreecommitdiff
path: root/qa/457
diff options
context:
space:
mode:
Diffstat (limited to 'qa/457')
-rwxr-xr-xqa/457176
1 files changed, 176 insertions, 0 deletions
diff --git a/qa/457 b/qa/457
new file mode 100755
index 0000000..026d58e
--- /dev/null
+++ b/qa/457
@@ -0,0 +1,176 @@
+#! /bin/sh
+# PCP QA Test No. 457
+# checks basic pmdalogger functionality
+#
+# Copyright (c) 2011 Aconex. All Rights Reserved.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.product
+. ./common.filter
+. ./common.check
+. ./localconfig
+
+[ -d $PCP_PMDAS_DIR/logger ] || _notrun "No pmdalogger installed"
+
+_cleanup()
+{
+ if $_needclean
+ then
+ _restore_pmda_install logger
+ if $install_on_cleanup
+ then
+ ( cd $PCP_PMDAS_DIR/logger; $sudo ./Install <$tmp.input >/dev/null 2>&1 )
+ else
+ ( cd $PCP_PMDAS_DIR/logger; $sudo ./Remove </dev/null >/dev/null 2>&1 )
+ fi
+ _needclean=false
+ fi
+ $sudo rm -fr $tmp.dir
+ $sudo rm -f $tmp.*
+ exit $status
+}
+
+_testdata()
+{
+ # generate data in a single write, for pmda determinism
+ echo \
+"TeSt DaTa ... TeSt DaTa ...
+TeSt2 DaTa2 ... TeSt2 DaTa2"
+}
+
+_filter()
+{
+ sed \
+ -e "s,$tmp,TMPFILE,g" \
+ -e "s,$PCP_VAR_DIR,PCP_VAR_DIR,g" \
+ -e 's/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\.[0-9][0-9][0-9]/TIMESTAMP/g'
+}
+
+_filter_dir()
+{
+ # size is filesystem and blocksize dependent
+ _filter | sed '/^logger\.perfile\.dir\.size$/ {
+N
+s:[0-9][0-9]*:SIZE:
+}'
+}
+
+$sudo rm -fr $tmp.dir
+$sudo rm -f $tmp.*
+
+# setup pmdalogger configuration file
+echo "
+# from PCP QA $seq
+reg n $tmp.reg
+fifo n $tmp.fifo
+none n $tmp.none
+empty n $tmp.empty
+dir n $tmp.dir
+pipe n $tmp.pipe|
+" >$tmp.conf
+
+# and PMDA Install script
+cat >$tmp.input <<End-of-File
+b
+1
+End-of-File
+
+install_on_cleanup=false
+pminfo logger >/dev/null 2>&1 && install_on_cleanup=true
+
+status=1 # failure is the default!
+_needclean=true
+trap "_cleanup" 0 1 2 3 15
+
+# real QA test starts here
+_prepare_pmda_install logger
+
+# prepare test case files (see below)
+_testdata > $tmp.reg
+mkdir $tmp.dir
+mkfifo $tmp.fifo
+touch $tmp.empty
+$PCP_ECHO_PROG $PCP_ECHO_N "#!/bin/sh
+echo \$\$ > $tmp.pipe.pid
+trap \"echo child\" USR1
+read book
+""$PCP_ECHO_C" > $tmp.pipe # i.e. print something when sigusr1 delivered
+chmod 755 $tmp.pipe
+
+[ -d $PCP_VAR_DIR/config/logger ] || $sudo mkdir -p $PCP_VAR_DIR/config/logger
+$sudo cp $tmp.conf $PCP_VAR_DIR/config/logger/logger.conf
+
+# install PMDA accepting the defaults (esp config file)
+$sudo ./Remove < /dev/null >/dev/null 2>&1
+$sudo ./Install < /dev/null >$tmp.out 2>&1
+cat $tmp.out | _filter_pmda_install | _filter
+
+echo
+echo "=== 1. simple working case ==="
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking initial data:""$PCP_ECHO_C"
+pminfo -f logger.perfile.reg | _filter
+_testdata >> $tmp.reg
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking appended data:""$PCP_ECHO_C"
+pminfo -f logger.perfile.reg | _filter
+
+echo
+echo "=== 2. named pipe (fifo) ==="
+$PCP_ECHO_PROG $PCP_ECHO_N "Check initial pipe""$PCP_ECHO_C"
+pminfo -f logger.perfile.fifo | _filter
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking new pipe data""$PCP_ECHO_C"
+_testdata >> $tmp.fifo
+pminfo -f logger.perfile.fifo | _filter
+$PCP_ECHO_PROG $PCP_ECHO_N "Unlink the fifo""$PCP_ECHO_C"
+rm -f $tmp.fifo
+pminfo -f logger.perfile.fifo | _filter
+
+echo
+echo "=== 3. log file rotation ==="
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking removed file""$PCP_ECHO_C"
+rm -f $tmp.reg
+sleep 3 # pmda interval timer is 2 seconds
+pminfo -f logger.perfile.reg | _filter
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking new log file""$PCP_ECHO_C"
+_testdata >> $tmp.reg
+sleep 3 # pmda interval timer is 2 seconds
+pminfo -f logger.perfile.reg | _filter
+
+echo
+echo "=== 4. non-existant file ==="
+$PCP_ECHO_PROG $PCP_ECHO_N "Check a missing file""$PCP_ECHO_C"
+pminfo -f logger.perfile.none | _filter
+_testdata >> $tmp.none
+sleep 3 # pmda interval timer is 2 seconds
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking new log file""$PCP_ECHO_C"
+pminfo -f logger.perfile.none | _filter
+
+echo
+echo "=== 5. empty file ==="
+$PCP_ECHO_PROG $PCP_ECHO_N "Check an empty file""$PCP_ECHO_C"
+pminfo -f logger.perfile.empty | _filter
+_testdata >> $tmp.empty
+sleep 3 # pmda interval timer is 2 seconds
+$PCP_ECHO_PROG $PCP_ECHO_N "Checking new log file""$PCP_ECHO_C"
+pminfo -f logger.perfile.empty | _filter
+
+echo
+echo "=== 6. directory ==="
+$PCP_ECHO_PROG $PCP_ECHO_N "Check a directory""$PCP_ECHO_C"
+pminfo -f logger.perfile.dir | _filter_dir
+
+echo
+echo "=== 7. command pipe ==="
+[ -f $tmp.pipe.pid ] || _fail "PID file from command pipe not found"
+pid=`cat $tmp.pipe.pid`
+$PCP_ECHO_PROG $PCP_ECHO_N "Check a piped command""$PCP_ECHO_C"
+pminfo -f logger.perfile.pipe | _filter
+$PCP_ECHO_PROG $PCP_ECHO_N "Signal the command""$PCP_ECHO_C"
+pmsignal -s USR1 $pid >/dev/null 2>&1
+sleep 3 # some time for it to be delivered
+pminfo -f logger.perfile.pipe | _filter
+
+status=0
+exit