/var/lib/pcp/testsuite/667 is in pcp-testsuite 3.10.8build1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | #! /bin/sh
# PCP QA Test No. 667
# checks basic pcp2graphite functionality
#
# Copyright (c) 2015 Red Hat, Inc.
#
seq=`basename $0`
echo "QA output created by $seq"
. ./common.python
$python -c "from pcp import pmapi" >/dev/null 2>&1
[ $? -eq 0 ] || _notrun "python pcp pmapi module not installed"
which socat >/dev/null 2>&1 || _notrun "socat binary not installed"
which pcp2graphite >$seq.full 2>&1 || _notrun "pcp2graphite not installed"
port_pickled=2004
port_text=2003
echo | $PCP_BINADM_DIR/telnet-probe localhost $port_pickled \
&& _notrun "Someone already listening on graphite pickled port $port_pickled"
echo | $PCP_BINADM_DIR/telnet-probe localhost $port_text \
&& _notrun "Someone already listening on graphite text port $port_text"
$sudo rm -rf $seq.full $tmp.*
signal=$PCP_BINADM_DIR/pmsignal
status=1 # failure is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
# handle differences like ...
# (S'pcp.sample.byte_rate' vs (Vpcp.sample.byte_rate
# (I1192055500 vs (L1192055490L
# ?(lp0 vs <(lp0
# F222.0 vs F222
#
_filter_strings()
{
sed \
-e '/^(/{
s/(S'"'"'/\(/
s/'"'"'$//
s/(V/\(/
s/(L\(.*\)L$/(I\1/
}' \
-e 's/^.(lp0/?(lp0/' \
-e 's/^F\([0-9][0-9]*\)\.0$/F\1/' \
# end
}
_full_stash()
{
echo "--- pcpgraphite stdout --" >>$seq.full
cat $tmp.p2g.out >>$seq.full
echo "--- pcpgraphite stderr --" >>$seq.full
cat $tmp.p2g.err >>$seq.full
echo "--- socket cat stdout --" >>$seq.full
cat $tmp.socat.out >>$seq.full
echo "--- socket cat stderr --" >>$seq.full
cat $tmp.socat.err >>$seq.full
}
scale=10
ncpu=`pmprobe -v hinv.ncpu | awk '{print $3*'$scale'".0"}'`
pcp2graphite="$python `which pcp2graphite`"
echo | tee -a $seq.full
echo "=== 1. pcp2graphite one-shot pickle ===" | tee -a $seq.full
socat tcp-listen:$port_pickled,reuseaddr - >$tmp.socat.out 2>$tmp.socat.err &
pid=$!
sleep 2
$pcp2graphite -t 1 hinv.ncpu hinv.ncpu >$tmp.p2g.out 2>$tmp.p2g.err & # will error out after socket cat dies
p2gpid=$!
sleep 3
$signal $pid $p2gpid 2>/dev/null
wait
# python pickle-format 1+ is binary, and python version dependent to boot.
# but pcp2graphite now uses ascii pickle-format 0 for maximum compatibility
fgrep -q pcp.hinv.ncpu $tmp.socat.out
[ $? -eq 0 ] && echo "Found pcp.hinv.ncpu in pickled output"
_full_stash
echo "=== 2. pcp2graphite text, 2-second aligned ===" | tee -a $seq.full
rm -f $tmp.socat.out $tmp.socat.err
socat tcp-listen:$port_text,reuseaddr,fork - >>$tmp.socat.out 2>>$tmp.socat.err &
pid=$!
sleep 2
$pcp2graphite -t 2 -P $port_text -u "/$scale" -m foobar. hinv.ncpu sample.datasize >$tmp.p2g.out 2>$tmp.p2g.err &
p2gpid=$!
sleep 8 # enough for at least 2 messages
$signal $pid $p2gpid 2>/dev/null
wait
head -2 $tmp.socat.out |
sed -e "s,\.ncpu $ncpu ,.ncpu NCPUS ," | # confirm ncpus value
sed -r -e 's, [0-9]+[02468]$, TIMESTAMP2,' # confirm time alignment
grep 'Excluding' $tmp.p2g.err
_full_stash
echo "=== 2a. pcp2graphite text, 2-second aligned, local ===" | tee -a $seq.full
rm -f $tmp.socat.out $tmp.socat.err
socat tcp-listen:$port_text,reuseaddr,fork - >>$tmp.socat.out 2>>$tmp.socat.err &
pid=$!
sleep 2
$pcp2graphite -L -t 2 -P $port_text -u "/$scale" -m foobar. hinv.ncpu sample.datasize >$tmp.p2g.out 2>$tmp.p2g.err &
p2gpid=$!
sleep 8 # enough for at least 2 messages
$signal $pid $p2gpid 2>/dev/null
wait
head -2 $tmp.socat.out |
sed -e "s,\.ncpu $ncpu ,.ncpu NCPUS ," | # confirm ncpus value
sed -r -e 's, [0-9]+[02468]$, TIMESTAMP2,' # confirm time alignment
grep 'Excluding' $tmp.p2g.err
_full_stash
echo "=== 3. pcp2graphite bad-instance tolerance ===" | tee -a $seq.full
rm -f $tmp.socat.out $tmp.socat.err
socat tcp-listen:$port_text,reuseaddr,fork - >>$tmp.socat.out 2>>$tmp.socat.err &
pid=$!
sleep 2
$pcp2graphite -t 2 -P $port_text sample.bogus_bin sample.aggregate.null sample.string.hullo NoSuchMetric sample.bad >$tmp.p2g.out 2>$tmp.p2g.err &
p2gpid=$!
sleep 8 # enough for at least 2 messages
$signal $pid $p2gpid 2>/dev/null
wait
# confirm time alignment
head -10 $tmp.socat.out \
| sed -r -e 's, [0-9]+[02468]$, TIMESTAMP2,' \
| LC_COLLATE=POSIX sort
grep 'Excluding' $tmp.p2g.err
_full_stash
echo "=== 4. pcp2graphite count-limited archive transcription ===" | tee -a $seq.full
rm -f $tmp.socat.out $tmp.socat.err
socat tcp-listen:$port_text,reuseaddr,fork - >>$tmp.socat.out 2>>$tmp.socat.err &
pid=$!
sleep 2
# TZ=UTC here to constrain pcp2graphite's -DAPPL0 stdout logging of time.ctime()
TZ=UTC $pcp2graphite -DAPPL0 -t 1 -s 30 -P $port_text -a archives/chartqa1.meta sample.byte_rate >$tmp.p2g.out 2>$tmp.p2g.err
$signal $pid 2>/dev/null
wait
cat $tmp.socat.out
echo
cat $tmp.p2g.out
_full_stash
echo "=== 5. pcp2graphite time-limited archive transcription ===" | tee -a $seq.full
rm -f $tmp.socat.out $tmp.socat.err
socat tcp-listen:$port_pickled,reuseaddr,fork - >>$tmp.socat.out 2>>$tmp.socat.err &
pid=$!
sleep 2
TZ=UTC $pcp2graphite -DAPPL0 -t 1 -O '2007-10-10 22:31:30 GMT' -T '2007-10-10 22:31:40 GMT' -p $port_pickled -a archives/chartqa1.meta sample.byte_rate >$tmp.p2g.out 2>$tmp.p2g.err
$signal $pid 2>/dev/null
wait
# while pickle format 0 is ascii, it's wrapped in a struct.pack that
# puts some non-ascii goo in; we don't want that literally included in
# the .out file ... strings(1) is our friend
#
strings $tmp.socat.out | _filter_strings
echo
cat $tmp.p2g.out
_full_stash
status=0
exit
|