tests: test-with-fake-dists: clean up *just* the pycryptopp-0.5.24 eggs when exiting
authorZooko O'Whielacronx <zooko@zooko.com>
Thu, 18 Nov 2010 06:31:09 +0000 (22:31 -0800)
committerZooko O'Whielacronx <zooko@zooko.com>
Thu, 18 Nov 2010 06:31:09 +0000 (22:31 -0800)
also don't set the PATH and PYTHONPATH, which is unnecessary for this test
also wrap the behavior in a couple of functions, just for tidiness

misc/build_helpers/test-with-fake-dists.py

index 86742b432c2e951d86b30a46fe13c17a854dc7fc..d78df97481bf54dfa7df083f074e6d7206f015ca 100644 (file)
@@ -1,70 +1,75 @@
 #!/usr/bin/env python
 
-# We put a fake "pycryptopp-0.5.24.egg" package and a fake
-# "pycryptopp-9.9.99.tar.gz" into a directory, but the latter is
-# booby-trapped so it will raise an exception when you try to build
-# it.
+import StringIO, glob, os, platform, shutil, subprocess, sys, tarfile, zipfile
+import pkg_resources
 
-# Then we run "python setup.py test -s
-# buildtest.test_with_fake_dist", which imports pycryptopp
-# and passes if pycryptopp.__version__ == '0.5.24'.
+def test():
+    # We put a fake "pycryptopp-0.5.24.egg" package and a fake
+    # "pycryptopp-9.9.99.tar.gz" into a directory, but the latter is
+    # booby-trapped so it will raise an exception when you try to build
+    # it.
 
-# (If building succeeded -- meaning that you didn't try to build the
-# booby-trapped 9.9.99 -- but pycryptopp.__version__ != '0.5.24' then
-# that means a different version of pycryptopp was already installed
-# so neither of the two fake pycryptopp packages were needed. In that
-# case this test should be treated as a "skip" -- the functionality
-# under test can't be exercised on the current system.)
+    # Then we run "python setup.py test -s
+    # buildtest.test_with_fake_dist", which imports pycryptopp
+    # and passes if pycryptopp.__version__ == '0.5.24'.
 
-# The goal is to turn red if the build system tries to build the
-# source dist when it could have used the binary dist.
+    # (If building succeeded -- meaning that you didn't try to build the
+    # booby-trapped 9.9.99 -- but pycryptopp.__version__ != '0.5.24' then
+    # that means a different version of pycryptopp was already installed
+    # so neither of the two fake pycryptopp packages were needed. In that
+    # case this test should be treated as a "skip" -- the functionality
+    # under test can't be exercised on the current system.)
 
-# (Note that for this test to make sense, tahoe-lafs needs to be
-# asking for a version of pycryptopp which can be satisfied by either
-# 0.5.24 or 0.5.25. At the time of this writing it requires >= 0.5.20
-# on x86 and >= 0.5.14 on other architectures.)
+    # The goal is to turn red if the build system tries to build the
+    # source dist when it could have used the binary dist.
 
-import StringIO, glob, os, platform, shutil, subprocess, sys, tarfile, zipfile
-import pkg_resources
+    # (Note that for this test to make sense, tahoe-lafs needs to be
+    # asking for a version of pycryptopp which can be satisfied by either
+    # 0.5.24 or 0.5.25. At the time of this writing it requires >= 0.5.20
+    # on x86 and >= 0.5.14 on other architectures.)
+
+    fake_distdir = 'tahoe-deps'
+    fake_distname = "pycryptopp"
+    fake_sdistversion = "9.9.99"
+    fake_bdistversion = "0.5.24"
+    sdist_setup = "raise Exception('Aha I caught you trying to build me. I am a fake pycryptopp 9.9.99 sdist and you should be satisfied with a bdist.')"
+
+    testsuite = "buildtest.test_build_with_fake_dist"
 
-fake_distdir = 'tahoe-deps'
-fake_distname = "pycryptopp"
-fake_sdistversion = "9.9.99"
-fake_bdistversion = "0.5.24"
-sdist_setup = "raise Exception('Aha I caught you trying to build me. I am a fake pycryptopp 9.9.99 sdist and you should be satisfied with a bdist.')"
+    dist_dirname = os.path.join(os.getcwd(), fake_distdir)
 
-testsuite = "buildtest.test_build_with_fake_dist"
+    try:
+        os.makedirs(dist_dirname)
+    except OSError:
+        # probably already exists
+        pass
 
-dist_dirname = os.path.join(os.getcwd(), fake_distdir)
+    bdist_egg_name = os.path.join(dist_dirname, '%s-%s-py%s.%s-%s.egg' % (fake_distname, fake_bdistversion, platform.python_version_tuple()[0], platform.python_version_tuple()[1], pkg_resources.get_supported_platform()))
+    try:
+        bdist_egg = zipfile.ZipFile(bdist_egg_name, 'w')
+        bdist_egg.writestr('pycryptopp/__init__.py', '__version__ = "%s"\n' % (fake_bdistversion,))
+        bdist_egg.close()
 
-try:
-    os.makedirs(dist_dirname)
-except OSError:
-    # probably already exists
-    pass
+        sdist_name = os.path.join(dist_dirname, '%s-%s.tar' % (fake_distname, fake_sdistversion))
+        sdist = tarfile.open(sdist_name, 'w:gz')
+        sdist.errorlevel =2
+        tarinfo = tarfile.TarInfo('setup.py')
+        tarinfo.errorlevel =2
+        tarinfo.size = len(sdist_setup)
+        sdist.addfile(tarinfo, StringIO.StringIO(sdist_setup))
+        sdist.close()
 
-bdist_egg_name = os.path.join(dist_dirname, '%s-%s-py%s.%s-%s.egg' % (fake_distname, fake_bdistversion, platform.python_version_tuple()[0], platform.python_version_tuple()[1], pkg_resources.get_supported_platform()))
-try:
-    bdist_egg = zipfile.ZipFile(bdist_egg_name, 'w')
-    bdist_egg.writestr('pycryptopp/__init__.py', '__version__ = "%s"\n' % (fake_bdistversion,))
-    bdist_egg.close()
+        sys.exit(subprocess.call([sys.executable, "setup.py", "-v", "test", "-s", testsuite], env=os.environ))
+    finally:
+        os.remove(bdist_egg_name)
+        os.remove(sdist_name)
+        cleanup()
 
-    sdist_name = os.path.join(dist_dirname, '%s-%s.tar' % (fake_distname, fake_sdistversion))
-    sdist = tarfile.open(sdist_name, 'w:gz')
-    sdist.errorlevel =2
-    tarinfo = tarfile.TarInfo('setup.py')
-    tarinfo.errorlevel =2
-    tarinfo.size = len(sdist_setup)
-    sdist.addfile(tarinfo, StringIO.StringIO(sdist_setup))
-    sdist.close()
+def cleanup():
+    for path, subdnames, fnames in os.walk('.'):
+        for fdname in subdnames + fnames:
+            if fdname.startswith('pycryptopp-0.5.24'):
+                shutil.rmtree(os.path.join(path, fdname))
 
-    setuppy="setup.py"
-    os.environ['PATH']=os.path.join(os.getcwd(), 'src')+os.pathsep+os.environ['PATH']
-    eggs = [os.path.realpath(p) for p in glob.glob(os.path.join('..', '*.egg')) if not 'pycryptopp' in p]
-    os.environ['PYTHONPATH']=os.pathsep+os.pathsep.join(eggs)+os.pathsep+os.environ.get('PYTHONPATH','')
-    sys.exit(subprocess.call([sys.executable, setuppy, "-v", "test", "-s", testsuite], env=os.environ))
-finally:
-    os.remove(bdist_egg_name)
-    os.remove(sdist_name)
-    shutil.rmtree('support')
-    [shutil.rmtree(p) for p in glob.glob('pycryptopp*.egg')]
+if __name__ == '__main__':
+    test()