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
|
#!/bin/sh
# PCP QA Test No. 1697
# Valgrind pmproxy REST API testing.
# Based on 1601 and 1696
# check-group-exclude: pcp-uptime
# Copyright (c) 2022 Red Hat.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
. ./common.python
_check_valgrind
_check_series
_check_key_server_version_offline
_cleanup()
{
cd $here
[ -n "$options" ] && $keys_cli $options shutdown
$sudo rm -rf $tmp $tmp.*
}
status=1 # failure is the default!
username=`id -u -n`
trap "_cleanup; exit \$status" 0 1 2 3 15
# create a pmproxy configuration
cat <<EOF > $tmp.conf
[pmproxy]
pcp.enabled = true
http.enabled = true
[pmseries]
enabled = true
EOF
_filter_source()
{
sed \
-e "s,$here,PATH,g" \
-e "s,$hostname,QAHOST,g" \
#end
}
_filter_proxyport()
{
sed \
-e "s/ FD $proxyport / FD PORT /g" \
-e '/PORT ipv6 /d' \
# end
}
# real QA test starts here
echo "Start test key server ..."
key_server_port=`_find_free_port`
options="-p $key_server_port"
$key_server --port $key_server_port --save "" > $tmp.keys 2>&1 &
_check_key_server_ping $key_server_port
_check_key_server $key_server_port
echo
_check_key_server_version $key_server_port
# import some well-known test data into the key server
pmseries $options --load "$here/archives/proc" | _filter_source
# start pmproxy
mkdir -p $tmp.pmproxy/pmproxy
PCP_RUN_DIR=$tmp.pmproxy; export PCP_RUN_DIR
PCP_TMP_DIR=$tmp.pmproxy; export PCP_TMP_DIR
proxyport=`_find_free_port`
$valgrind_clean_assert pmproxy -f -p $proxyport -r $key_server_port -U $username -l- -c $tmp.conf >$tmp.valout 2>$tmp.valerr &
pid=$!
# valgrind takes awhile to fire up
i=0
while [ $i -lt 40 ]
do
$PCP_BINADM_DIR/telnet-probe -c localhost $proxyport && break
sleep 1
i=`expr $i + 1`
done
if $PCP_BINADM_DIR/telnet-probe -c localhost $proxyport
then
echo "Startup took $i secs" >>$seq_full
else
echo "Arrgh: valgrind failed start pmproxy and get port $proxyport ready after 30 secs"
exit
fi
series1=`pmseries $options disk.all.read`
[ -z "$series1" ] && _fail "Cannot find any timeseries matching disk.all.read"
echo "Using series $series1 for disk.all.read"
series2=`pmseries $options disk.dev.read`
[ -z "$series2" ] && _fail "Cannot find any timeseries matching disk.dev.read"
echo "Using series $series2 for disk.dev.read"
series3=`pmseries $options kernel.all.uptime`
[ -z "$series3" ] && _fail "Cannot find any timeseries matching kernel.all.uptime"
echo "Using series $series3 for kernel.all.uptime"
echo "== verify metric descs" | tee -a $seq_full
curl --silent "http://localhost:$proxyport/series/descs" -d "series=$series1,$series2,$series3" | tee -a $seq_full | pmjson -n
echo "== verify metric names" | tee -a $seq_full
curl --silent "http://localhost:$proxyport/series/metrics" -d "series=$series1,$series2,$series3" | tee -a $seq_full | pmjson -n
echo "== verify metric labels" | tee -a $seq_full
curl --silent "http://localhost:$proxyport/series/labels" -d "series=$series1,$series3" | tee -a $seq_full | pmjson -n
echo "== verify metric insts" | tee -a $seq_full
curl --silent "http://localhost:$proxyport/series/instances" -d "series=$series2" | tee -a $seq_full | pmjson -n
# valgrind takes awhile to shutdown too
pmsignal $pid
pmsleep 3.5
echo "=== valgrind stdout ===" | tee -a $seq_full
cat $tmp.valout | _filter_valgrind
echo "=== valgrind stderr ===" | tee -a $seq_full
cat $tmp.valerr | _filter_pmproxy_log | grep -v "Cannot connect to key server" | _filter_proxyport
# success, all done
status=0
exit
|