[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Rearrange installation integ tests
commit 7ec72f1fdaedcd791fc98904b0ad4f7cdb0c22b6
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Wed Feb 8 13:28:48 2017 -0800
Rearrange installation integ tests
Rearranging our installation tests to be based around the two setup.py commands
we run (install and sdist). We were hiding a substantial chunk of runtime by
doing the bulk of our work in a setUpClass clause. This is unnessary and reads
better this way.
---
test/integ/installation.py | 157 +++++++++++++++++++++------------------------
1 file changed, 73 insertions(+), 84 deletions(-)
diff --git a/test/integ/installation.py b/test/integ/installation.py
index 43ba3d8..d1a1eb8 100644
--- a/test/integ/installation.py
+++ b/test/integ/installation.py
@@ -14,61 +14,93 @@ import test.util
INSTALL_MISMATCH_MSG = "Running 'python setup.py sdist' doesn't match our git contents in the following way. The manifest in our setup.py may need to be updated...\n\n"
-class TestInstallation(unittest.TestCase):
- # TODO: remove when dropping support for python 2.6
- skip_reason = 'setUpClass() unsupported in python 2.6'
+def _install(path):
+ """
+ Installs to the given location.
+
+ :param str path: location to install ourselves to
- @classmethod
- def setUpClass(self):
- self.site_packages_path = None
- self.skip_reason = None
- self.installation_error = None
+ :returns: **str** where our site packages are located
- if not os.path.exists(os.path.join(test.util.STEM_BASE, 'setup.py')):
- self.skip_reason = '(only for git checkout)'
+ :raises: **AssertionError** if installation is unsuccessful
+ """
- original_cwd = os.getcwd()
+ original_cwd = os.getcwd()
- try:
- os.chdir(test.util.STEM_BASE)
- stem.util.system.call(sys.executable + ' setup.py install --prefix /tmp/stem_test')
- stem.util.system.call(sys.executable + ' setup.py clean --all') # tidy up the build directory
- site_packages_paths = glob.glob('/tmp/stem_test/lib*/*/site-packages')
+ try:
+ os.chdir(test.util.STEM_BASE)
+ stem.util.system.call('%s setup.py install --prefix %s' % (sys.executable, path))
+ stem.util.system.call('%s setup.py clean --all' % sys.executable) # tidy up the build directory
+ site_packages_paths = glob.glob('%s/lib*/*/site-packages' % path)
- if len(site_packages_paths) != 1:
- self.installation_error = 'We should only have a single site-packages directory, but instead had: %s' % site_packages_paths
+ if len(site_packages_paths) != 1:
+ raise AssertionError('We should only have a single site-packages directory, but instead had: %s' % site_packages_paths)
- self.site_packages_path = site_packages_paths[0]
- except Exception as exc:
- self.installation_error = 'Unable to download the man page: %s' % exc
- finally:
- os.chdir(original_cwd)
+ return site_packages_paths[0]
+ except Exception as exc:
+ raise AssertionError("Unable to install with 'python setup.py install': %s" % exc)
+ finally:
+ os.chdir(original_cwd)
+
+
+def _assert_has_all_files(path):
+ """
+ Check that all the files in the stem directory are present in the
+ installation. This is a very common gotcha since our setup.py
+ requires us to remember to add new modules and non-source files.
+
+ :raises: **AssertionError** files don't match our content
+ """
+
+ expected, installed = set(), set()
+
+ for root, dirnames, filenames in os.walk(os.path.join(test.util.STEM_BASE, 'stem')):
+ for filename in filenames:
+ file_format = filename.split('.')[-1]
- @classmethod
- def tearDownClass(self):
- if os.path.exists('/tmp/stem_test'):
- shutil.rmtree('/tmp/stem_test')
+ if file_format not in test.util.IGNORED_FILE_TYPES:
+ expected.add(os.path.join(root, filename)[len(test.util.STEM_BASE) + 1:])
- def requires_installation(self):
- if self.skip_reason:
- test.runner.skip(self, self.skip_reason)
- return True
- elif self.installation_error:
- self.fail(self.installation_error)
+ for root, dirnames, filenames in os.walk(path):
+ for filename in filenames:
+ if not filename.endswith('.pyc') and not filename.endswith('egg-info'):
+ installed.add(os.path.join(root, filename)[len(path) + 1:])
- return False
+ missing = expected.difference(installed)
+ extra = installed.difference(expected)
+ if missing:
+ raise AssertionError("The following files were expected to be in our installation but weren't. Maybe our setup.py needs to be updated?\n\n%s" % '\n'.join(missing))
+ elif extra:
+ raise AssertionError("The following files weren't expected to be in our installation.\n\n%s" % '\n'.join(extra))
+
+
+class TestInstallation(unittest.TestCase):
@test.runner.only_run_once
- def test_sdist_matches_git(self):
+ def test_install(self):
"""
- Check the source distribution tarball we make for releases matches the
- contents of 'git archive'. This primarily is meant to test that our
- MANIFEST.in is up to date.
+ Installs with 'python setup.py install' and checks we can use what we
+ install.
"""
- if self.requires_installation():
- return
- elif not stem.util.system.is_available('git'):
+ try:
+ site_packages_path = _install('/tmp/stem_test')
+
+ self.assertEqual(stem.__version__, stem.util.system.call([sys.executable, '-c', "import sys;sys.path.insert(0, '%s');import stem;print(stem.__version__)" % site_packages_path])[0])
+ _assert_has_all_files(site_packages_path)
+ finally:
+ if os.path.exists('/tmp/stem_test'):
+ shutil.rmtree('/tmp/stem_test')
+
+ @test.runner.only_run_once
+ def test_sdist(self):
+ """
+ Creates a source distribution tarball with 'python setup.py sdist' and
+ checks that it matches the content of our git repository. This primarily is
+ meant to test that our MANIFEST.in is up to date.
+ """
+
+ if not stem.util.system.is_available('git'):
test.runner.skip(self, '(git unavailable)')
return
@@ -102,46 +134,3 @@ class TestInstallation(unittest.TestCase):
if issues:
self.fail(INSTALL_MISMATCH_MSG + '\n'.join(issues))
-
- @test.runner.only_run_once
- def test_installing_stem(self):
- """
- Attempt to use the package we install.
- """
-
- if self.requires_installation():
- return
-
- self.assertEqual(stem.__version__, stem.util.system.call([sys.executable, '-c', "import sys;sys.path.insert(0, '%s');import stem;print(stem.__version__)" % self.site_packages_path])[0])
-
- def test_installs_all_files(self):
- """
- Check that all the files in the stem directory are present in the
- installation. This is a very common gotcha since our setup.py
- requires us to remember to add new modules and non-source files.
- """
-
- if self.requires_installation():
- return
-
- expected, installed = set(), set()
-
- for root, dirnames, filenames in os.walk(os.path.join(test.util.STEM_BASE, 'stem')):
- for filename in filenames:
- file_format = filename.split('.')[-1]
-
- if file_format not in test.util.IGNORED_FILE_TYPES:
- expected.add(os.path.join(root, filename)[len(test.util.STEM_BASE) + 1:])
-
- for root, dirnames, filenames in os.walk(self.site_packages_path):
- for filename in filenames:
- if not filename.endswith('.pyc') and not filename.endswith('egg-info'):
- installed.add(os.path.join(root, filename)[len(self.site_packages_path) + 1:])
-
- missing = expected.difference(installed)
- extra = installed.difference(expected)
-
- if missing:
- self.fail("The following files were expected to be in our installation but weren't. Maybe our setup.py needs to be updated?\n\n%s" % '\n'.join(missing))
- elif extra:
- self.fail("The following files weren't expected to be in our installation.\n\n%s" % '\n'.join(extra))
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits