Re: [gentoo-portage-dev] [PATCH] runtests: create a global tempdir to hold subtest files

2015-10-30 Thread Zac Medico
On 10/30/2015 11:52 AM, Zac Medico wrote:
> On 10/30/2015 11:00 AM, Mike Frysinger wrote:
> 
>> +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.')
> [snip]
>> +finally:
>> +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')
>>
> 
> This will raise NameError if mkdtemp for some reason. For absolute
> correctness, you need to call mkdtemp before try, or set tempdir = None
> before the try and check that it's not None before calling rmtree.
> 

I mean, "if mkdtemp fails for some reason." Other then that issue, the
patch looks good.
-- 
Thanks,
Zac



Re: [gentoo-portage-dev] [PATCH] runtests: create a global tempdir to hold subtest files

2015-10-30 Thread Zac Medico
On 10/30/2015 11:00 AM, Mike Frysinger wrote:

> + 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.')
[snip]
> + finally:
> + 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')
> 

This will raise NameError if mkdtemp for some reason. For absolute
correctness, you need to call mkdtemp before try, or set tempdir = None
before the try and check that it's not None before calling rmtree.
-- 
Thanks,
Zac



[gentoo-portage-dev] [PATCH] runtests: create a global tempdir to hold subtest files

2015-10-30 Thread Mike Frysinger
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.
---
 runtests | 46 +++---
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/runtests b/runtests
index 36243c6..fc6de0a 100755
--- a/runtests
+++ b/runtests
@@ -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,32 @@ 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()
+   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 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')
-- 
2.5.2