diff options
Diffstat (limited to 'nova/tests')
4 files changed, 202 insertions, 0 deletions
diff --git a/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py b/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py new file mode 100644 index 000000000..e7d00e68a --- /dev/null +++ b/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py @@ -0,0 +1,190 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 IBM +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License + +import os.path +import telnetlib + +from coverage import coverage +import webob + +from nova.api.openstack.compute.contrib import coverage_ext +from nova import context +from nova import exception +from nova.openstack.common import jsonutils +from nova import test +from nova.tests.api.openstack import fakes + + +def fake_telnet(self, data): + return + + +def fake_check_coverage(self): + return False + + +def fake_xml_report(self, outfile): + return + + +def fake_report(self, file): + return + + +class CoverageExtensionTest(test.TestCase): + + def setUp(self): + super(CoverageExtensionTest, self).setUp() + self.stubs.Set(telnetlib.Telnet, 'write', fake_telnet) + self.stubs.Set(telnetlib.Telnet, 'expect', fake_telnet) + self.stubs.Set(coverage, 'report', fake_report) + self.stubs.Set(coverage, 'xml_report', fake_xml_report) + self.admin_context = context.RequestContext('fakeadmin_0', + 'fake', + is_admin=True) + self.user_context = context.RequestContext('fakeadmin_0', + 'fake', + is_admin=False) + + def test_not_admin(self): + body = {'start': {}} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.user_context)) + self.assertEqual(res.status_int, 403) + + def test_start_coverage_action(self): + body = {'start': {}} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 200) + + def test_stop_coverage_action(self): + self.stubs.Set(coverage_ext.CoverageController, + '_check_coverage', fake_check_coverage) + body = {'stop': {}} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 200) + + def test_report_coverage_action_file(self): + self.stubs.Set(coverage_ext.CoverageController, + '_check_coverage', fake_check_coverage) + self.test_start_coverage_action() + body = { + 'report': { + 'file': 'coverage-unit-test.report', + }, + } + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 200) + resp_dict = jsonutils.loads(res.body) + self.assertTrue('path' in resp_dict) + self.assertTrue('coverage-unit-test.report' in resp_dict['path']) + + def test_report_coverage_action_xml_file(self): + self.stubs.Set(coverage_ext.CoverageController, + '_check_coverage', fake_check_coverage) + body = { + 'report': { + 'file': 'coverage-xml-unit-test.report', + 'xml': 'True', + }, + } + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 200) + resp_dict = jsonutils.loads(res.body) + self.assertTrue('path' in resp_dict) + self.assertTrue('coverage-xml-unit-test.report' in resp_dict['path']) + + def test_report_coverage_action_nofile(self): + self.stubs.Set(coverage_ext.CoverageController, + '_check_coverage', fake_check_coverage) + body = {'report': {}} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 400) + + def test_coverage_bad_body(self): + body = {} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 400) + + def test_coverage_report_bad_path(self): + self.stubs.Set(coverage_ext.CoverageController, + '_check_coverage', fake_check_coverage) + body = { + 'report': { + 'file': '/tmp/coverage-xml-unit-test.report', + } + } + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 400) + + def test_stop_coverage_action_nostart(self): + body = {'stop': {}} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 404) + + def test_report_coverage_action_nostart(self): + body = {'stop': {}} + req = webob.Request.blank('/v2/fake/os-coverage/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app( + fake_auth_context=self.admin_context)) + self.assertEqual(res.status_int, 404) diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py index b3ae0fa17..ae0383fe0 100644 --- a/nova/tests/fake_policy.py +++ b/nova/tests/fake_policy.py @@ -109,6 +109,7 @@ policy_data = """ "compute_extension:config_drive": "", "compute_extension:console_output": "", "compute_extension:consoles": "", + "compute_extension:coverage_ext": "is_admin:True", "compute_extension:createserverext": "", "compute_extension:deferred_delete": "", "compute_extension:disk_config": "", diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl index 65cbb4889..09131ffb0 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl @@ -129,6 +129,14 @@ "updated": "%(timestamp)s" }, { + "alias": "os-coverage", + "description": "%(text)s", + "links": [], + "name": "Coverage", + "namespace": "http://docs.openstack.org/compute/ext/coverage/api/v2", + "updated": "%(timestamp)s" + }, + { "alias": "os-create-server-ext", "description": "%(text)s", "links": [], diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl index bdef0266c..8241a1792 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl @@ -48,6 +48,9 @@ <extension alias="os-consoles" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/os-consoles/api/v2" name="Consoles"> <description>%(text)s</description> </extension> + <extension alias="os-coverage" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/coverage/api/v2" name="Coverage"> + <description>%(text)s</description> + </extension> <extension alias="os-create-server-ext" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/createserverext/api/v1.1" name="Createserverext"> <description>%(text)s</description> </extension> |
