diff options
author | Mike Frysinger <vapier@gentoo.org> | 2015-10-30 13:52:04 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2015-10-30 13:52:04 -0400 |
commit | 93a48621ae1117d831f3e3ec9ccc432a37f5e247 (patch) | |
tree | e22afcfbdf8d278a50fd0121c2a3bf71b3a5833e /runtests | |
parent | _argparse: punt the module (diff) | |
download | portage-93a48621ae1117d831f3e3ec9ccc432a37f5e247.tar.gz portage-93a48621ae1117d831f3e3ec9ccc432a37f5e247.tar.bz2 portage-93a48621ae1117d831f3e3ec9ccc432a37f5e247.zip |
runtests: create a global tempdir to hold subtest files
A lot of unittests currently leak content in /tmp when they run.
Rather than explicitly track down every failing test (which we can
do regardless of this), have the runtest runner create a global
tempdir and use that as a base for children tests. Then when the
runtest script finishes, it takes care of nuking everything.
Diffstat (limited to 'runtests')
-rwxr-xr-x | runtests | 48 |
1 files changed, 33 insertions, 15 deletions
@@ -15,8 +15,10 @@ from __future__ import print_function import argparse import os -import sys +import shutil import subprocess +import sys +import tempfile # These are the versions we fully support and require to pass tests. @@ -91,6 +93,8 @@ $ %(prog)s pym/portage/tests/xpak/test_decodeint.py description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, epilog=epilog) + parser.add_argument('--keep-temp', default=False, action='store_true', + help='Do not delete the temporary directory when exiting') parser.add_argument('--color', type=str, default=None, help='Whether to use colorized output (default is auto)') parser.add_argument('--python-versions', action='append', @@ -116,20 +120,34 @@ def main(argv): else: pyversions.extend(ver.split()) - # Actually test those versions now. - statuses = [] - for ver in pyversions: - prog = get_python_executable(ver) - cmd = [prog, '-b', '-Wd', 'pym/portage/tests/runTests.py'] + args - if os.access(prog, os.X_OK): - print('%sTesting with Python %s...%s' % - (colors.GOOD, ver, colors.NORMAL)) - statuses.append(subprocess.call(cmd)) - elif not ignore_missing: - print('%sCould not find requested Python %s%s' % - (colors.BAD, ver, colors.NORMAL)) - statuses.append(1) - print() + tempdir = None + try: + # Set up a single tempdir for all the tests to use. + # This way we know the tests won't leak things on us. + tempdir = tempfile.mkdtemp(prefix='portage.runtests.') + os.environ['TMPDIR'] = tempdir + + # Actually test those versions now. + statuses = [] + for ver in pyversions: + prog = get_python_executable(ver) + cmd = [prog, '-b', '-Wd', 'pym/portage/tests/runTests.py'] + args + if os.access(prog, os.X_OK): + print('%sTesting with Python %s...%s' % + (colors.GOOD, ver, colors.NORMAL)) + statuses.append(subprocess.call(cmd)) + elif not ignore_missing: + print('%sCould not find requested Python %s%s' % + (colors.BAD, ver, colors.NORMAL)) + statuses.append(1) + print() + finally: + if tempdir is not None: + if opts.keep_temp: + print('Temporary directory left behind:\n%s' % tempdir) + else: + # Nuke our tempdir and anything that might be under it. + shutil.rmtree(tempdir, True) # Then summarize it all. print('\nSummary:\n') |