diff options
Diffstat (limited to 'qa/660')
-rwxr-xr-x | qa/660 | 148 |
1 files changed, 148 insertions, 0 deletions
@@ -0,0 +1,148 @@ +#! /bin/sh +# PCP QA Test No. 660 +# checks basic pmwebd functionality +# +# Copyright (c) 2013-2014 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 + +which curl >/dev/null 2>&1 || _notrun "No curl binary installed" +echo curl ok +# nb: wget dispreferred because of its processing of .. relative links, +# so it's harder to stress pmwebd's base-directory-escaping logic + +pyscript=src/test_webapi.python +python $pyscript --version 2>/dev/null || _notrun "python/modules missing" +echo python ok + +$sudo rm -fr $tmp.dir +$sudo rm -f $tmp.* +rm -f $seq.full + +signal=$PCP_BINADM_DIR/pmsignal +status=1 # failure is the default! +username=`id -u -n` +trap "_cleanup" 0 1 2 3 15 + +_cleanup() +{ + $sudo rm -fr $tmp.dir + $sudo rm -f $tmp.* + $sudo $signal -a pmwebd >/dev/null 2>&1 + $sudo $PCP_RC_DIR/pmwebd restart >/dev/null 2>&1 + exit $status +} + +_filter() +{ + tee -a $seq.full \ + | sed -e 's,#[0-9]*,####,g' -e 's/PMWEBAPI error,.*/PMWEBAPI error, XXX/g' +} + + +unset http_proxy +unset HTTP_PROXY + +$sudo $PCP_RC_DIR/pmwebd stop >/dev/null 2>&1 +$sudo $signal -a pmwebd >/dev/null 2>&1 + +webargs="-U $username -f" + +echo | tee -a $seq.full +echo "=== 1. pmwebd default startup ===" | tee -a $seq.full +echo "$PCP_BINADM_DIR/pmwebd $webargs -l $tmp.out" >>$seq.full +$PCP_BINADM_DIR/pmwebd $webargs -l $tmp.out 2>&1 & +echo "pid=$!" >>$seq.full +sleep 2 # let it start up + +if [ -f $tmp.out ] +then + cat $tmp.out >>$seq.full +else + echo "Arrgh ... pmwebd failed to start, $tmp.out not created" + $PCP_PS_PROG $PCP_PS_ALL_FLAGS | egrep '[P]ID|[p]mwebd' + exit +fi +curl -s -S "http://localhost:44323/pmapi/context?local=ANYTHING" \ +| tee -a $seq.full \ +| awk '{print $2}' +echo >>$seq.full + +if [ ! -f /etc/hosts ] +then + echo "Arrgh ... cannot find /etc/hosts to determine IPv6 localhost name" + exit +fi +ipv6local='' +for sniff in localhost6 ip6-localhost +do + if sed -e '/^#/d' -e 's/$/ /' /etc/hosts | grep -q "[ ]$sniff " + then + ipv6local=$sniff + break + fi +done +if [ -z "$ipv6local" ] +then + echo "Arrgh ... cannot determine IPv6 localhost name from /etc/hosts" + exit +fi +echo "ipv6local=$ipv6local" >>$seq.full + +rm -f $seq.out +if grep -q IPv6 $tmp.out; then + curl -s -S "http://$ipv6local:44323/pmapi/context?local=ANYTHING" \ + | tee -a $seq.full \ + | awk '{print $2}' + echo >>$seq.full + # ipv6 + ipv4 + ln $seq.out.46 $seq.out +else + # ipv4 only + ln $seq.out.4 $seq.out +fi +# NB: we don't anticipate an ipv6-only host + +echo | tee -a $seq.full +echo "=== 2. pmwebd exercise via python ===" | tee -a $seq.full +# pmwebd still running in default mode +if grep -q IPv4 $tmp.out; then + python $pyscript --host localhost | _filter +fi +if grep -q IPv6 $tmp.out; then + python $pyscript --host "$ipv6local" | _filter +fi + +echo | tee -a $seq.full +echo "=== 3. pmwebd security constraints, file service ===" | tee -a $seq.full +$sudo $signal -a pmwebd >/dev/null 2>&1 +sleep 2 # let it shutdown + +$PCP_BINADM_DIR/pmwebd $webargs -R `pwd` -c 2222 -L -N 2>/dev/null & +sleep 2 # let it start up + +# should fail due to -N +curl -s -S "http://localhost:44323/pmapi/context?local=anything" | _filter +echo +# should fail due to nonexistent context# +curl -s -S "http://localhost:44323/pmapi/2223/_fetch" | _filter +echo +# should fail with a different error (insufficient elements; ie pmFetch failed) +curl -s -S "http://localhost:44323/pmapi/2222/_fetch" | _filter +echo +# should fail due to suspicious pmresapi path name +curl -s -S "http://localhost:44323/../../etc/passwd" | _filter +echo +# should pass, feed this very script +curl -s -S "http://localhost:44323/$seq" > $tmp.out +diff $tmp.out $0 && echo file service ok + +status=0 +sleep 2 +exit |