diff options
-rw-r--r-- | nova/api/openstack/compute/contrib/coverage_ext.py | 21 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/contrib/test_coverage_ext.py | 26 | ||||
-rw-r--r-- | nova/tests/integrated/test_api_samples.py | 3 | ||||
-rwxr-xr-x | run_tests.sh | 4 |
4 files changed, 35 insertions, 19 deletions
diff --git a/nova/api/openstack/compute/contrib/coverage_ext.py b/nova/api/openstack/compute/contrib/coverage_ext.py index 6edf9244f..6eeb363f2 100644 --- a/nova/api/openstack/compute/contrib/coverage_ext.py +++ b/nova/api/openstack/compute/contrib/coverage_ext.py @@ -45,7 +45,6 @@ class CoverageController(object): """The Coverage report API controller for the OpenStack API.""" def __init__(self): self.data_path = tempfile.mkdtemp(prefix='nova-coverage_') - data_out = os.path.join(self.data_path, '.nova-coverage') self.compute_api = compute_api.API() self.network_api = network_api.API() self.conductor_api = conductor_api.API() @@ -55,14 +54,20 @@ class CoverageController(object): self.cert_api = cert_api.CertAPI() self.services = [] self.combine = False - try: - import coverage - self.coverInst = coverage.coverage(data_file=data_out) - self.has_coverage = True - except ImportError: - self.has_coverage = False + self._cover_inst = None super(CoverageController, self).__init__() + @property + def coverInst(self): + if not self._cover_inst: + try: + import coverage + data_out = os.path.join(self.data_path, '.nova-coverage') + self._cover_inst = coverage.coverage(data_file=data_out) + except ImportError: + pass + return self._cover_inst + def _find_services(self, req): """Returns a list of services.""" context = req.environ['nova.context'] @@ -242,7 +247,7 @@ class CoverageController(object): 'report': self._report_coverage, } authorize(req.environ['nova.context']) - if not self.has_coverage: + if not self.coverInst: msg = _("Python coverage module is not installed.") raise exc.HTTPServiceUnavailable(explanation=msg) for action, data in body.iteritems(): diff --git a/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py b/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py index 66a8a8f82..3c37fe10b 100644 --- a/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py +++ b/nova/tests/api/openstack/compute/contrib/test_coverage_ext.py @@ -34,12 +34,27 @@ def fake_check_coverage(self): return False -def fake_xml_report(self, outfile): - return +class FakeCoverage(object): + def __init__(self, data_file=None): + self.started = False + return super(FakeCoverage, self).__init__() + def save(self): + pass -def fake_report(self, file): - return + def start(self): + self.started = True + + def stop(self): + if not self.started: + raise AssertionError + self.started = False + + def report(self, file): + pass + + def xml_report(self, outfile): + pass class CoverageExtensionTest(test.TestCase): @@ -48,8 +63,7 @@ class CoverageExtensionTest(test.TestCase): super(CoverageExtensionTest, self).setUp() self.stubs.Set(telnetlib.Telnet, 'write', fake_telnet) self.stubs.Set(telnetlib.Telnet, 'expect', fake_telnet) - self.stubs.Set(coverage.coverage, 'report', fake_report) - self.stubs.Set(coverage.coverage, 'xml_report', fake_xml_report) + self.stubs.Set(coverage, 'coverage', FakeCoverage) self.admin_context = context.RequestContext('fakeadmin_0', 'fake', is_admin=True) diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index aaf22ff9d..a7f7b6d91 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -46,6 +46,7 @@ import nova.quota from nova.scheduler import driver from nova.servicegroup import api as service_group_api from nova import test +from nova.tests.api.openstack.compute.contrib import test_coverage_ext from nova.tests.api.openstack.compute.contrib import test_fping from nova.tests.api.openstack.compute.contrib import test_networks from nova.tests.api.openstack.compute.contrib import test_services @@ -760,7 +761,7 @@ class CoverageExtJsonTests(ApiSampleTestBase): self.stubs.Set(coverage_ext.CoverageController, '_check_coverage', _fake_check_coverage) - self.stubs.Set(coverage.coverage, 'xml_report', _fake_xml_report) + self.stubs.Set(coverage, 'coverage', test_coverage_ext.FakeCoverage) def test_start_coverage(self): # Start coverage data collection. diff --git a/run_tests.sh b/run_tests.sh index 2b6eda900..29e723c7f 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -127,10 +127,6 @@ function run_tests { fi if [ $coverage -eq 1 ]; then - # Do not test test_coverage_ext when gathering coverage. - if [ "x$testrargs" = "x" ]; then - testrargs="^(?!.*test.*coverage).*$" - fi TESTRTESTS="$TESTRTESTS --coverage" else TESTRTESTS="$TESTRTESTS --slowest" |