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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
#!/bin/sh
# PCP QA Test No. 1601
# Exercise pmseries REST API endpoints using curl(1).
#
# Copyright (c) 2019-2020 Red Hat.
#
# check-group-exclude: pcp-uptime
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
. ./common.keys
_check_series
_cleanup()
{
cd $here
[ -n "$pmproxy_pid" ] && $signal -s TERM $pmproxy_pid
[ -n "$options" ] && $keys_cli $options shutdown
if $need_restore
then
need_restore=false
_restore_config $PCP_SYSCONF_DIR/pmproxy
_restore_config $PCP_SYSCONF_DIR/pmseries
fi
$sudo rm -rf $tmp $tmp.*
}
status=1 # failure is the default!
signal=$PCP_BINADM_DIR/pmsignal
userid=`id -u`
username=`id -u -n`
hostname=`hostname`
machineid=`_machine_id`
domainname=`_domain_name`
need_restore=false
trap "_cleanup; exit \$status" 0 1 2 3 15
_filter_error()
{
_webapi_response_filter
}
_filter_source()
{
sed \
-e "s,$here,PATH,g" \
-e "s,$hostname,QAHOST,g" \
#end
}
_filter_archive()
{
pmjson | \
sed \
-e "s,bozo-laptop,QALOGHOST,g" \
#end
}
# real QA test starts here
_save_config $PCP_SYSCONF_DIR/pmproxy
_save_config $PCP_SYSCONF_DIR/pmseries
$sudo rm -f $PCP_SYSCONF_DIR/pmseries/*
$sudo rm -f $PCP_SYSCONF_DIR/pmproxy/*
need_restore=true
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
proxyport=`_find_free_port`
proxyopts="-p $proxyport -r $key_server_port -t" # -Dseries,http,af
pmproxy -f -U $username -x $seq_full -l $tmp.pmproxy.log $proxyopts &
pmproxy_pid=$!
# check pmproxy has started and is available for requests
pmcd_wait -h localhost@localhost:$proxyport -v -t 5sec
$PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mproxy( |$)' >> $seq_full
$keys_cli $options keys pcp:* >> $seq_full
cat $tmp.pmproxy.log >> $seq_full
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 series query" | tee -a $seq_full
url="http://localhost:$proxyport/series/query?expr=disk.all.read*"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify bad series query" | tee -a $seq_full
url="http://localhost:$proxyport/series/query?expr=(disk.all.re"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify missing series query" | tee -a $seq_full
url="http://localhost:$proxyport/series/query?expr="
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | _filter_error
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | _filter_error
echo "== verify metric descs" | tee -a $seq_full
url="http://localhost:$proxyport/series/descs?series=$series1"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify metric names" | tee -a $seq_full
url="http://localhost:$proxyport/series/metrics?series=$series1"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify metric name match" | tee -a $seq_full
url="http://localhost:$proxyport/series/metrics?match=kernel.all.n*"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify metric insts" | tee -a $seq_full
url="http://localhost:$proxyport/series/instances?series=$series2"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify metric labels" | tee -a $seq_full
url="http://localhost:$proxyport/series/labels?series=$series3"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify all label names" | tee -a $seq_full
url="http://localhost:$proxyport/series/labels"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify all label values" | tee -a $seq_full
url="http://localhost:$proxyport/series/labels?names=hostname"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | _filter_archive
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | _filter_archive
echo "== verify metric values" | tee -a $seq_full
url="http://localhost:$proxyport/series/values?series=$series2&samples=2"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify metric values by query" | tee -a $seq_full
# URL encoding: [ == %5B, ] == %5D, : == %3A
url="http://localhost:$proxyport/series/query?expr=disk.dev.read%5Bsamples%3A2%5D"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url&client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== verify ping response" | tee -a $seq_full
url="http://localhost:$proxyport/series/ping"
echo "$url" >> $seq_full
curl --get --silent "$url" | tee -a $seq_full | pmjson
curl --get --silent "$url?client=pcp-qa-$seq" | tee -a $seq_full | pmjson
echo "== all done" | tee -a $seq_full
status=0
exit
|