From 8dff555d197960cfae6627b3676bcd46eb7692a2 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Mon, 1 Apr 2013 12:39:19 -0400 Subject: [PATCH] Add more iterations to BuildDoc coverage. Using testscenarios, construct more combinations of test options for the autodoc_index_module option. Change-Id: I96b2816be2c652478b37c03cb5755a83dfeb0894 Reviewed-on: https://review.openstack.org/25825 Reviewed-by: James E. Blair Reviewed-by: Clark Boylan Approved: Monty Taylor Tested-by: Jenkins --- pbr/packaging.py | 3 ++ pbr/tests/__init__.py | 61 ++++++++++++++++++++++++++++++++------- pbr/tests/test_setup.py | 52 +++++++++++++++++++++++---------- pbr/tests/test_version.py | 4 +-- pbr/tests/utils.py | 45 ----------------------------- test-requirements.txt | 2 ++ 6 files changed, 95 insertions(+), 72 deletions(-) delete mode 100644 pbr/tests/utils.py diff --git a/pbr/packaging.py b/pbr/packaging.py index 21364a1e..c52a27d6 100644 --- a/pbr/packaging.py +++ b/pbr/packaging.py @@ -31,6 +31,7 @@ from distutils import log from setuptools.command import sdist log.set_verbosity(log.INFO) +TRUE_VALUES = ['true', '1', 'yes'] def _parse_mailmap(mailmap_info): @@ -315,6 +316,8 @@ try: def run(self): option_dict = self.distribution.get_option_dict('pbr') if ('autodoc_index_modules' in option_dict and + option_dict.get( + 'autodoc_index_modules').lower() in TRUE_VALUES and not os.getenv('SPHINX_DEBUG')): self.generate_autoindex() diff --git a/pbr/tests/__init__.py b/pbr/tests/__init__.py index f745a135..0dfd2e1c 100644 --- a/pbr/tests/__init__.py +++ b/pbr/tests/__init__.py @@ -1,14 +1,55 @@ -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2010-2011 OpenStack Foundation # -# 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 +# 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 +# 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. +# 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. + +"""Common utilities used in testing""" + +import os + +import fixtures +import testresources +import testtools + +from pbr import packaging +from pbr.tests import moxstubout + + +class BaseTestCase(testtools.TestCase, testresources.ResourcedTestCase): + + def setUp(self): + super(BaseTestCase, self).setUp() + test_timeout = os.environ.get('OS_TEST_TIMEOUT', 30) + try: + test_timeout = int(test_timeout) + except ValueError: + # If timeout value is invalid, fail hard. + print("OS_TEST_TIMEOUT set to invalid value" + " defaulting to no timeout") + test_timeout = 0 + if test_timeout > 0: + self.useFixture(fixtures.Timeout(test_timeout, gentle=True)) + + if os.environ.get('OS_STDOUT_CAPTURE') in packaging.TRUE_VALUES: + stdout = self.useFixture(fixtures.StringStream('stdout')).stream + self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout)) + if os.environ.get('OS_STDERR_CAPTURE') in packaging.TRUE_VALUES: + stderr = self.useFixture(fixtures.StringStream('stderr')).stream + self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr)) + self.log_fixture = self.useFixture( + fixtures.FakeLogger('pbr')) + + self.useFixture(fixtures.NestedTempfile()) + self.useFixture(fixtures.FakeLogger()) + self.stubs = self.useFixture(moxstubout.MoxStubout()).stubs diff --git a/pbr/tests/test_setup.py b/pbr/tests/test_setup.py index 21515c3f..f2778c71 100644 --- a/pbr/tests/test_setup.py +++ b/pbr/tests/test_setup.py @@ -22,9 +22,10 @@ import sys import tempfile import fixtures +import testscenarios from pbr import packaging -from pbr.tests import utils +from pbr import tests class DiveDir(fixtures.Fixture): @@ -43,7 +44,7 @@ class DiveDir(fixtures.Fixture): self.addCleanup(os.chdir, self.old_path) -class EmailTestCase(utils.BaseTestCase): +class EmailTestCase(tests.BaseTestCase): def test_str_dict_replace(self): string = 'Johnnie T. Hozer' @@ -52,7 +53,7 @@ class EmailTestCase(utils.BaseTestCase): packaging.canonicalize_emails(string, mapping)) -class MailmapTestCase(utils.BaseTestCase): +class MailmapTestCase(tests.BaseTestCase): def setUp(self): super(MailmapTestCase, self).setUp() @@ -79,7 +80,7 @@ class MailmapTestCase(utils.BaseTestCase): packaging.read_git_mailmap(self.git_dir)) -class GitLogsTest(utils.BaseTestCase): +class GitLogsTest(tests.BaseTestCase): def setUp(self): super(GitLogsTest, self).setUp() @@ -152,32 +153,49 @@ class GitLogsTest(utils.BaseTestCase): self.assertTrue(co_author in authors) -class BuildSphinxTest(utils.BaseTestCase): +class BuildSphinxTest(tests.BaseTestCase): - def test_build_sphinx(self): + scenarios = [ + ('true_autodoc_caps', + dict(has_opt=True, autodoc='True', has_autodoc=True)), + ('true_autodoc_lower', + dict(has_opt=True, autodoc='true', has_autodoc=True)), + ('false_autodoc', + dict(has_opt=True, autodoc='False', has_autodoc=False)), + ('no_autodoc', + dict(has_opt=False, autodoc='False', has_autodoc=False)), + ] + + def setUp(self): + super(BuildSphinxTest, self).setUp() self.useFixture(fixtures.MonkeyPatch( "sphinx.setup_command.BuildDoc.run", lambda self: None)) from distutils import dist - distr = dist.Distribution() - distr.packages = ("fake_package",) - distr.command_options["build_sphinx"] = {"source_dir": ["a", "."]} - distr.command_options["pbr"] = {"autodoc_index_modules": "True"} + self.distr = dist.Distribution() + self.distr.packages = ("fake_package",) + self.distr.command_options["build_sphinx"] = { + "source_dir": ["a", "."]} pkg_fixture = fixtures.PythonPackage( "fake_package", [("fake_module.py", "")]) self.useFixture(pkg_fixture) self.useFixture(DiveDir(pkg_fixture.base)) - build_doc = packaging.LocalBuildDoc(distr) + def test_build_doc(self): + if self.has_opt: + self.distr.command_options["pbr"] = { + "autodoc_index_modules": self.autodoc} + build_doc = packaging.LocalBuildDoc(self.distr) build_doc.run() self.assertTrue( - os.path.exists("api/autoindex.rst")) + os.path.exists("api/autoindex.rst") == self.has_autodoc) self.assertTrue( - os.path.exists("api/fake_package.fake_module.rst")) + os.path.exists( + "api/fake_package.fake_module.rst") == self.has_autodoc) -class ParseRequirementsTest(utils.BaseTestCase): +class ParseRequirementsTest(tests.BaseTestCase): def setUp(self): super(ParseRequirementsTest, self).setUp() @@ -218,7 +236,7 @@ class ParseRequirementsTest(utils.BaseTestCase): self.assertEqual([], actual) -class ParseDependencyLinksTest(utils.BaseTestCase): +class ParseDependencyLinksTest(tests.BaseTestCase): def setUp(self): super(ParseDependencyLinksTest, self).setUp() @@ -238,3 +256,7 @@ class ParseDependencyLinksTest(utils.BaseTestCase): self.assertEqual( ["git://foo.com/zipball#egg=bar"], packaging.parse_dependency_links([self.tmp_file])) + + +def load_tests(loader, in_tests, pattern): + return testscenarios.load_tests_apply_scenarios(loader, in_tests, pattern) diff --git a/pbr/tests/test_version.py b/pbr/tests/test_version.py index 4a66b6b7..38dd396b 100644 --- a/pbr/tests/test_version.py +++ b/pbr/tests/test_version.py @@ -20,11 +20,11 @@ import sys from oslo.config import cfg -from pbr.tests import utils +from pbr import tests from pbr import version -class DeferredVersionTestCase(utils.BaseTestCase): +class DeferredVersionTestCase(tests.BaseTestCase): def setUp(self): super(DeferredVersionTestCase, self).setUp() diff --git a/pbr/tests/utils.py b/pbr/tests/utils.py deleted file mode 100644 index 453d3ad5..00000000 --- a/pbr/tests/utils.py +++ /dev/null @@ -1,45 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# Copyright 2010-2011 OpenStack Foundation -# -# 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. - -"""Common utilities used in testing""" - -import os - -import fixtures -import testtools - -from pbr.tests import moxstubout - -_TRUE = ('True', '1') - - -class BaseTestCase(testtools.TestCase): - - def setUp(self): - super(BaseTestCase, self).setUp() - if os.environ.get('OS_STDOUT_CAPTURE') in _TRUE: - stdout = self.useFixture(fixtures.StringStream('stdout')).stream - self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout)) - if os.environ.get('OS_STDERR_CAPTURE') in _TRUE: - stderr = self.useFixture(fixtures.StringStream('stderr')).stream - self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr)) - self.log_fixture = self.useFixture( - fixtures.FakeLogger('pbr')) - - self.useFixture(fixtures.NestedTempfile()) - self.useFixture(fixtures.FakeLogger()) - self.useFixture(fixtures.Timeout(30, True)) - self.stubs = self.useFixture(moxstubout.MoxStubout()).stubs diff --git a/test-requirements.txt b/test-requirements.txt index d018d033..1bbf0389 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -7,4 +7,6 @@ oslo.config python-subunit sphinx>=1.1.2 testrepository>=0.0.13 +testresources +testscenarios testtools>=0.9.27