Merge "Add html reports to report action in coverage extension."
This commit is contained in:
commit
b4d72616c1
3
doc/api_samples/os-coverage/coverage-stop-post-resp.json
Normal file
3
doc/api_samples/os-coverage/coverage-stop-post-resp.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"path": "/tmp/tmpua9HvB/nova-coverage_rs2CaS"
|
||||||
|
}
|
2
doc/api_samples/os-coverage/coverage-stop-post-resp.xml
Normal file
2
doc/api_samples/os-coverage/coverage-stop-post-resp.xml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<path>/tmp/tmpCLve38/nova-coverage_GJ4BZ_</path>
|
@ -82,7 +82,6 @@ class CoverageController(object):
|
|||||||
"cert": self.cert_api.get_backdoor_port,
|
"cert": self.cert_api.get_backdoor_port,
|
||||||
}
|
}
|
||||||
ports = []
|
ports = []
|
||||||
temp = {}
|
|
||||||
#TODO(mtreinish): Figure out how to bind the backdoor socket to 0.0.0.0
|
#TODO(mtreinish): Figure out how to bind the backdoor socket to 0.0.0.0
|
||||||
# Currently this will only work if the host is resolved as loopback on
|
# Currently this will only work if the host is resolved as loopback on
|
||||||
# the same host as api-server
|
# the same host as api-server
|
||||||
@ -121,7 +120,7 @@ class CoverageController(object):
|
|||||||
|
|
||||||
def _start_coverage(self, req, body):
|
def _start_coverage(self, req, body):
|
||||||
'''Begin recording coverage information.'''
|
'''Begin recording coverage information.'''
|
||||||
LOG.debug("Coverage begin")
|
LOG.debug(_("Coverage begin"))
|
||||||
body = body['start']
|
body = body['start']
|
||||||
self.combine = False
|
self.combine = False
|
||||||
if 'combine' in body.keys():
|
if 'combine' in body.keys():
|
||||||
@ -155,8 +154,9 @@ class CoverageController(object):
|
|||||||
for service in self.services:
|
for service in self.services:
|
||||||
self._stop_coverage_telnet(service['telnet'])
|
self._stop_coverage_telnet(service['telnet'])
|
||||||
if self._check_coverage():
|
if self._check_coverage():
|
||||||
msg = ("Coverage not running")
|
msg = _("Coverage not running")
|
||||||
raise exc.HTTPNotFound(explanation=msg)
|
raise exc.HTTPNotFound(explanation=msg)
|
||||||
|
return {'path': self.data_path}
|
||||||
|
|
||||||
def _report_coverage_telnet(self, tn, path, xml=False):
|
def _report_coverage_telnet(self, tn, path, xml=False):
|
||||||
if xml:
|
if xml:
|
||||||
@ -176,26 +176,34 @@ class CoverageController(object):
|
|||||||
def _report_coverage(self, req, body):
|
def _report_coverage(self, req, body):
|
||||||
self._stop_coverage(req)
|
self._stop_coverage(req)
|
||||||
xml = False
|
xml = False
|
||||||
|
html = False
|
||||||
path = None
|
path = None
|
||||||
|
|
||||||
body = body['report']
|
body = body['report']
|
||||||
if 'file' in body.keys():
|
if 'file' in body.keys():
|
||||||
path = body['file']
|
path = body['file']
|
||||||
if path != os.path.basename(path):
|
if path != os.path.basename(path):
|
||||||
msg = ("Invalid path")
|
msg = _("Invalid path")
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
path = os.path.join(self.data_path, path)
|
path = os.path.join(self.data_path, path)
|
||||||
else:
|
else:
|
||||||
msg = ("No path given for report file")
|
msg = _("No path given for report file")
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
|
|
||||||
if 'xml' in body.keys():
|
if 'xml' in body.keys():
|
||||||
xml = body['xml']
|
xml = body['xml']
|
||||||
|
elif 'html' in body.keys():
|
||||||
|
if not self.combine:
|
||||||
|
msg = _("You can't use html reports without combining")
|
||||||
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
|
html = body['html']
|
||||||
|
|
||||||
if self.combine:
|
if self.combine:
|
||||||
self.coverInst.combine()
|
self.coverInst.combine()
|
||||||
if xml:
|
if xml:
|
||||||
self.coverInst.xml_report(outfile=path)
|
self.coverInst.xml_report(outfile=path)
|
||||||
|
elif html:
|
||||||
|
self.coverInst.html_report(directory=path)
|
||||||
else:
|
else:
|
||||||
output = open(path, 'w')
|
output = open(path, 'w')
|
||||||
self.coverInst.report(file=output)
|
self.coverInst.report(file=output)
|
||||||
|
@ -88,6 +88,8 @@ class CoverageExtensionTest(test.TestCase):
|
|||||||
res = req.get_response(fakes.wsgi_app(
|
res = req.get_response(fakes.wsgi_app(
|
||||||
fake_auth_context=self.admin_context))
|
fake_auth_context=self.admin_context))
|
||||||
self.assertEqual(res.status_int, 200)
|
self.assertEqual(res.status_int, 200)
|
||||||
|
resp_dict = jsonutils.loads(res.body)
|
||||||
|
self.assertTrue('path' in resp_dict)
|
||||||
|
|
||||||
def test_report_coverage_action_file(self):
|
def test_report_coverage_action_file(self):
|
||||||
self.stubs.Set(coverage_ext.CoverageController,
|
self.stubs.Set(coverage_ext.CoverageController,
|
||||||
@ -178,7 +180,7 @@ class CoverageExtensionTest(test.TestCase):
|
|||||||
self.assertEqual(res.status_int, 404)
|
self.assertEqual(res.status_int, 404)
|
||||||
|
|
||||||
def test_report_coverage_action_nostart(self):
|
def test_report_coverage_action_nostart(self):
|
||||||
body = {'stop': {}}
|
body = {'report': {}}
|
||||||
req = webob.Request.blank('/v2/fake/os-coverage/action')
|
req = webob.Request.blank('/v2/fake/os-coverage/action')
|
||||||
req.method = "POST"
|
req.method = "POST"
|
||||||
req.body = jsonutils.dumps(body)
|
req.body = jsonutils.dumps(body)
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"path" : "%(path)s"
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<path>%(path)s</path>
|
@ -768,10 +768,15 @@ class CoverageExtJsonTests(ApiSampleTestBase):
|
|||||||
|
|
||||||
def test_stop_coverage(self):
|
def test_stop_coverage(self):
|
||||||
"""Stop coverage data collection"""
|
"""Stop coverage data collection"""
|
||||||
subs = {}
|
subs = {
|
||||||
|
'path': '/.*',
|
||||||
|
}
|
||||||
response = self._do_post('os-coverage/action',
|
response = self._do_post('os-coverage/action',
|
||||||
'coverage-stop-post-req', subs)
|
'coverage-stop-post-req', subs)
|
||||||
self.assertEqual(response.status, 200)
|
self.assertEqual(response.status, 200)
|
||||||
|
subs.update(self._get_regexes())
|
||||||
|
return self._verify_response('coverage-stop-post-resp',
|
||||||
|
subs, response)
|
||||||
|
|
||||||
def test_report_coverage(self):
|
def test_report_coverage(self):
|
||||||
"""Generate a coverage report"""
|
"""Generate a coverage report"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user