diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/src/test_webapi.python | |
download | pcp-47e6e7c84f008a53061e661f31ae96629bc694ef.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/src/test_webapi.python')
-rw-r--r-- | qa/src/test_webapi.python | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/qa/src/test_webapi.python b/qa/src/test_webapi.python new file mode 100644 index 0000000..3ffdd4e --- /dev/null +++ b/qa/src/test_webapi.python @@ -0,0 +1,131 @@ +""" Test creation of a PCP web daemon via the requests module """ +# +# Copyright (C) 2013-2014 Red Hat. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +import requests, argparse, subprocess, os + +parser = argparse.ArgumentParser(description='test_webapi.py pmwebapi check') +parser.add_argument('--version', action='version', version='1') +parser.add_argument('--host', required=True) +parser.add_argument('--port', default=44323) +args = parser.parse_args() + +url = 'http://' + args.host + ':' + str(args.port) + '/' +devnull = os.open(os.devnull, os.O_RDWR) +os.unsetenv('http_proxy') +os.unsetenv('HTTP_PROXY') + +# ------------------------------------------------------------------------ + +# test - create contexts +req = requests.get(url=url + 'pmapi/context?local=foo') +resp = req.json() +ctx_local = resp['context'] +print('Received PM_CONTEXT_LOCAL #' + str(ctx_local)) + +req = requests.get(url=url + 'pmapi/context?hostname=' + args.host) +resp = req.json() +ctx_host = resp['context'] +print('Received PM_CONTEXT_HOST #' + str(ctx_host)) + +# ------------------------------------------------------------------------ + +# all these should get an error +req = requests.get(url=url + 'pmapi/context?archivefile=/dev/null') +print('bad archive /dev/null response code ' + str(req.status_code)) + +req = requests.get(url=url + 'pmapi/context?archivefile=../etc/passwd') +print('bad archive ../etc/passwd response code ' + str(req.status_code)) + +req = requests.get(url=url + 'pmapi/context?archivefile=../../etc/shadow') +print('bad archive ../../etc/shadow response code ' + str(req.status_code)) + +req = requests.get(url=url + 'pmapi/NOSUCHAPI') +print('command NOSUCHAPI response code ' + str(req.status_code)) + +req = requests.get(url=url + 'pmapi/NOSUCHCONTEXT/_metric') +print('context NOSUCHCONTEXT response code ' + str(req.status_code)) + +req = requests.get(url=url + 'pmapi/0/_metric') +print('context 0 response code ' + str(req.status_code)) + +req = requests.get(url=url + 'random_nonpmwebapi_url') +print('non-pmwebapi response code ' + str(req.status_code)) + +# ------------------------------------------------------------------------ + +def test_metric_enumeration(ctx, prefix): + ctxurl = url + 'pmapi/' + str(ctx) + '/' + if (ctx == ctx_local): + procargs = ['pminfo', '-L', '-t'] + dbg = 'local' + else: + procargs = ['pminfo', '-h', args.host, '-t'] + dbg = 'host' + if (prefix != ''): + procargs.append(prefix) + dbg = dbg + '-' + prefix + proc = subprocess.Popen(procargs, + stdout=subprocess.PIPE, + stderr=devnull) + num_metrics = 0 + # f = open('/tmp/pmcd-' + dbg, 'w') + while True: + line = proc.stdout.readline() + if (line == ''): + break # eof + if line.strip() == '': + continue # blank line pminfo sometimes does that + if line.find('Error: No PMCD agent') == -1 and \ + line.find('Not known to the PMDA') == -1: + num_metrics = num_metrics + 1 + # f.write(line) + # f.write('Total ' + str(num_metrics) + ' metrics\n') + # f.close() + + testprefix='test #'+str(ctx)+' metric '+prefix+'.*' + print(testprefix + ' enumeration with pminfo #'+str(num_metrics)) + + req = requests.get(url=ctxurl + '_metric' + \ + ('?prefix='+prefix if prefix != '' else '')) + resp = req.json() + print(testprefix + ' enumeration with pmwebinfo #'+str(len(resp['metrics']))) + + # web_metrics = 0 + # f = open('/tmp/webd-' + dbg, 'w') + # for metric in resp['metrics']: + # web_metrics = web_metrics + 1 + # f.write(metric['name'] + '\n') + # f.write('Total ' + str(web_metrics) + ' metrics\n') + # f.close() + + if (abs(len(resp['metrics']) - num_metrics) < 10): # allow some variation + print(testprefix + ' enumeration match count PASS') + else: + print(testprefix + ' enumeration match count FAIL') + + +test_metric_enumeration(ctx_local,'') +test_metric_enumeration(ctx_host,'') +test_metric_enumeration(ctx_local,'kernel') +test_metric_enumeration(ctx_host,'kernel') + +# ------------------------------------------------------------------------ + +# empty _fetch should get an error +req = requests.get(url=url + 'pmapi/'+str(ctx_host)+'/_fetch') +print('context #'+str(ctx_host)+' response code ' + str(req.status_code)) + +# ------------------------------------------------------------------------ + |