summaryrefslogtreecommitdiff
path: root/qa/653
diff options
context:
space:
mode:
Diffstat (limited to 'qa/653')
-rwxr-xr-xqa/653103
1 files changed, 103 insertions, 0 deletions
diff --git a/qa/653 b/qa/653
new file mode 100755
index 0000000..12b5ca6
--- /dev/null
+++ b/qa/653
@@ -0,0 +1,103 @@
+#! /bin/sh
+# PCP QA Test No. 653
+# checks __pmSetProcessIdentity function in libpcp
+#
+# Copyright (c) 2012 Red Hat, Inc. 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
+
+[ $PCP_VER -ge 3611 ] || _notrun "Needs a more recent libpcp version"
+
+_cleanup()
+{
+ $sudo rm -f $tmp.*
+ exit $status
+}
+
+_filter_err()
+{
+ pid=$1
+
+ # [Fri Nov 23 11:04:47] username(6802)
+ sed \
+ -e 's/\[.* [0-9 ][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\]/[TIMESTAMP]/g' \
+ -e "s/$pid/PID/g"
+}
+
+_filter_out()
+{
+ uid=$1
+
+ sed \
+ -e "s,$here/src,src,g" \
+ -e "s/$uid/as local user/g"
+}
+
+_filter_ps()
+{
+ pid=$1
+ uid=$2
+
+ tee -a $seq.full | \
+ $PCP_AWK_PROG '
+NR == 1 { if ($2 != "PID") {
+ print "PID not in field 2 of ps output!"
+ exit(1)
+ }
+ if ($1 != "UID") {
+ print "UID not in field 1 of ps output!"
+ exit(1)
+ }
+ if ($8 == "CMD")
+ # Linux
+ cmd = 8
+ else if ($11 == "COMMAND")
+ # Darwin
+ cmd = 11
+ else {
+ print "CMD (or COMMAND) not in field 8 (or 11) of ps output!"
+ print
+ exit(1)
+ }
+ next
+ }
+$1 == "'$uid'" && $2 == '$pid' {
+ print "found:",$cmd,$(cmd+1),$(cmd+2),$(cmd+3),$(cmd+4)
+ exit(0)
+ }
+END { exit(1) }'
+}
+
+status=1 # failure is the default!
+username=`id -u -n` # me, myself & I
+trap "_cleanup" 0 1 2 3 15
+$sudo rm -f $tmp.* $seq.full
+
+# real QA test starts here
+echo "== failing case, should error out" | tee -a $seq.full
+$here/src/username nosuchuser >$tmp.err 2>&1 &
+pid=$!
+sleep 1 # give it a chance to start
+ps $PCP_PS_ALL_FLAGS | _filter_ps $pid nosuchuser
+$sudo $PCP_BINADM_DIR/pmsignal -a username
+wait $pid
+[ -s $tmp.err ] && cat $tmp.err | _filter_err $pid
+
+echo "== passing case, should be local user" | tee -a $seq.full
+$here/src/username $username &
+pid=$!
+sleep 1 # give it a chance to start
+ps $PCP_PS_ALL_FLAGS | _filter_ps $pid $username >$tmp.out
+$sudo $PCP_BINADM_DIR/pmsignal -a username
+wait $pid
+[ -s $tmp.out ] && cat $tmp.out | _filter_out $username
+
+status=0
+exit