summaryrefslogtreecommitdiff
path: root/qa/340
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-10-26 12:33:50 +0400
committerIgor Pashev <pashev.igor@gmail.com>2014-10-26 12:33:50 +0400
commit47e6e7c84f008a53061e661f31ae96629bc694ef (patch)
tree648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/340
downloadpcp-debian.tar.gz
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/340')
-rwxr-xr-xqa/340270
1 files changed, 270 insertions, 0 deletions
diff --git a/qa/340 b/qa/340
new file mode 100755
index 0000000..4c3501e
--- /dev/null
+++ b/qa/340
@@ -0,0 +1,270 @@
+#! /bin/sh
+# PCP QA Test No. 340
+# PMCD denies all access?
+#
+# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard filters
+. ./common.filter
+. ./common.product
+. ./common.check
+
+perl -e "use PCP::PMDA" >/dev/null 2>&1
+test $? -eq 0 || _notrun "PCP::PMDA perl module is not installed"
+
+status=1 # failure is the default!
+
+[ -z "$PCP_PMLOGGERCONTROL_PATH" ] && \
+ PCP_PMLOGGERCONTROL_PATH="$PCP_SYSCONF_DIR/pmlogger/control"
+
+_filter_pminfo()
+{
+ sed \
+ -e 's/Connection reset by peer/No permission to perform requested operation/'
+}
+
+# real QA test starts here
+
+config=$PCP_PMCDCONF_PATH
+oconfig=$tmp.oconfig
+me=`_get_fqdn`
+_needclean=true
+
+cleanup()
+{
+ if $_needclean
+ then
+ _needclean=false
+ [ -f $oconfig ] && $sudo cp $oconfig $config
+ _change_config pmlogger on
+ $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+ _wait_for_pmcd
+ _wait_for_pmlogger
+ fi
+
+ if $_chkconfig_pmlogger_on
+ then
+ [ -f $tmp.control ] && \
+ $sudo cp $tmp.control $PCP_PMLOGGERCONTROL_PATH
+ $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+ _wait_for_pmcd
+ _wait_for_pmlogger
+ _chkconfig_pmlogger_on=false
+ fi
+
+ $sudo rm -f $tmp.*
+ exit $status
+}
+
+trap "cleanup; exit \$status" 0 1 2 3 15
+
+rm -f $seq.full
+
+# real QA test starts here
+dov1hosts=true
+
+# disable all pmloggers ...
+_chkconfig_pmlogger_on=true
+$sudo cp $PCP_PMLOGGERCONTROL_PATH $tmp.control
+cat <<End-of-File >$tmp.tmp
+# dummy file created by qa/$seq on `date`
+# the goal here is to have a controlled primary logger that does
+# not make requests to pmcd!
+\$version=1.1
+LOCALHOSTNAME y n $PCP_LOG_DIR/pmlogger/LOCALHOSTNAME -c /dev/null
+End-of-File
+$sudo cp $tmp.tmp $PCP_PMLOGGERCONTROL_PATH
+#_change_config pmlogger off
+
+$sudo cp $config $oconfig
+
+other1=bogus
+other2=bogus
+
+other1=`./getpmcdhosts -n 1 -L -v 'pcp=1' 2>$tmp.err`
+if [ -z "$other1" ]
+then
+ echo "[test configuration only for v2 hosts]"
+ dov1hosts=false
+ rm -f $seq.out ; ln $seq-v2.out $seq.out
+else
+ rm -f $seq.out ; ln $seq-v1v2.out $seq.out
+fi
+
+other2=`./getpmcdhosts -n 1 -L -v 'pcp>=2' 2>$tmp.err`
+if [ -z "$other2" ]
+then
+ # Unable to find remote PCP 2.x host
+ cat $tmp.err >$seq.notrun
+ exit
+fi
+
+echo "other1=$other1" >>$seq.full
+echo "other2=$other2" >>$seq.full
+
+list1=
+if $dov1hosts
+then
+ list1=`_all_hostnames $other1`
+ if [ -z "$list1" ]
+ then
+ echo "Error: failed to expand hostnames for other1=\"$other1\""
+ exit
+ fi
+ echo "V1 list1=$list1" >>$seq.full
+ list2=`_all_hostnames $other2`
+ if [ -z "$list2" ]
+ then
+ echo "Error: failed to expand hostnames for other2=\"$other2\""
+ exit
+ fi
+ echo "V1 list2=$list2" >>$seq.full
+
+ cat >$tmp.access <<End-Of-File
+
+[access]
+disallow $list1 : all;
+disallow $list2 : all;
+allow * : all;
+End-Of-File
+else
+ list2=`_all_hostnames $other2`
+ if [ -z "$list2" ]
+ then
+ echo "Error: failed to expand hostnames for other2=\"$other2\""
+ exit
+ fi
+ echo "V2 list2=$list2" >>$seq.full
+
+ cat >$tmp.access <<End-Of-File
+
+[access]
+disallow $list2 : all;
+allow * : all;
+End-Of-File
+fi
+sed -e '/\[access]/q' $oconfig \
+| sed -e '/\[access]/d' >$tmp.config
+cat $tmp.access >>$tmp.config
+$sudo cp $tmp.config $config
+
+echo >>$seq.full
+echo "---- start pmcd.conf ----" >>$seq.full
+cat $config >>$seq.full
+echo "---- end pmcd.conf ----" >>$seq.full
+
+$sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+_wait_for_pmcd
+
+echo " checking default access for this host ..."
+pminfo -f sample.long.million \
+| _filter_pminfo
+pmstore sample.write_me 111
+
+if $dov1hosts
+then
+ echo
+ echo " checking access for list1 (should fail)"
+ ssh -q pcpqa@$other1 pminfo -h $me -f pmcd.numclients 2>&1 \
+ | sed -e 's/"'$me'"/"HOST"/g'
+fi
+echo
+echo " checking access for list2 (should fail)"
+ssh -q pcpqa@$other2 pminfo -h $me -f pmcd.numclients 2>&1 \
+ | sed -e 's/"'$me'"/"HOST"/g'
+
+echo "pmcd.log:======="
+sed -n <$PCP_PMCDLOG_PATH -e '/endclient/{
+s/\[[0-9]*]/[M]/
+s/(fd [0-9]*)/(fd N)/
+p
+}'
+echo "================"
+
+iplist1=
+if $dov1hosts
+then
+ iplist1=`_all_ipaddrs $other1`
+ if [ -z "$iplist1" ]
+ then
+ echo "Error: failed to expand ip addrs for other1=\"$other1\""
+ exit
+ fi
+ echo "V1 iplist1=$iplist1" >>$seq.full
+ iplist2=`_all_ipaddrs $other2`
+ if [ -z "$iplist2" ]
+ then
+ echo "Error: failed to expand ip addrs for other2=\"$other2\""
+ exit
+ fi
+ echo "V1 iplist2=$iplist2" >>$seq.full
+
+ cat >$tmp.access <<End-Of-File
+
+[access]
+disallow $iplist1 : all;
+disallow $iplist2 : all;
+allow * : all;
+End-Of-File
+else
+ iplist2=`_all_ipaddrs $other2`
+ if [ -z "$iplist2" ]
+ then
+ echo "Error: failed to expand ip addrs for other2=\"$other2\""
+ exit
+ fi
+ echo "V2 iplist2=$iplist2" >>$seq.full
+
+ cat >$tmp.access <<End-Of-File
+
+[access]
+disallow $iplist2 : all;
+allow * : all;
+End-Of-File
+fi
+
+sed -e '/\[access]/q' $oconfig \
+| sed -e '/\[access]/d' >$tmp.config
+cat $tmp.access >>$tmp.config
+$sudo cp $tmp.config $config
+
+echo >>$seq.full
+echo "---- start pmcd.conf ----" >>$seq.full
+cat $config >>$seq.full
+echo "---- end pmcd.conf ----" >>$seq.full
+
+$sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start
+_wait_for_pmcd
+
+echo " checking default access for this host ..."
+pminfo -f sample.long.million
+pmstore sample.write_me 444
+
+if $dov1hosts
+then
+ echo
+ echo " checking access for iplist1 (should fail)"
+ ssh -q pcpqa@$other1 pminfo -h $me -f pmcd.numclients 2>&1 \
+ | sed -e 's/"'$me'"/"HOST"/g'
+fi
+
+echo
+echo " checking access for iplist2 (should fail)"
+ssh -q pcpqa@$other2 pminfo -h $me -f pmcd.numclients 2>&1 \
+ | sed -e 's/"'$me'"/"HOST"/g'
+
+echo "pmcd.log:======="
+sed -n <$PCP_PMCDLOG_PATH -e '/endclient/{
+s/\[[0-9]*]/[M]/
+s/(fd [0-9]*)/(fd N)/
+p
+}'
+echo "================"
+
+# success, all done
+status=0
+exit