group.add_argument('--junit-xml', dest='xmlpath', metavar='FILENAME',
help='writes JUnit-style XML results to the specified '
'file')
- group.add_argument('--tempdir', dest='tempdir', metavar='PATH',
+ group.add_argument('--tempdir', metavar='PATH',
help='override the working directory for the test run')
+ group.add_argument('--cleanup', action='store_true',
+ help='remove old test_python_* directories')
return parser
# Strip .py extensions.
removepy(ns.args)
- return ns
+ if ns.huntrleaks:
+ warmup, repetitions, _ = ns.huntrleaks
+ if warmup < 1 or repetitions < 1:
+ msg = ("Invalid values for the --huntrleaks/-R parameters. The "
+ "number of warmups and repetitions must be at least 1 "
+ "each (1:1).")
+ print(msg, file=sys.stderr, flush=True)
+ sys.exit(2)
+
+ if ns.tempdir:
+ ns.tempdir = os.path.expanduser(ns.tempdir)
+
+ self.ns = ns
def find_tests(self, tests):
self.tests = tests
for s in ET.tostringlist(root):
f.write(s)
- def create_temp_dir(self):
+ def set_temp_dir(self):
if self.ns.tempdir:
self.tmp_dir = self.ns.tempdir
self.tmp_dir = tempfile.gettempdir()
self.tmp_dir = os.path.abspath(self.tmp_dir)
+
+ def create_temp_dir(self):
os.makedirs(self.tmp_dir, exist_ok=True)
# Define a writable temp dir that will be used as cwd while running
# testing (see the -j option).
pid = os.getpid()
if self.worker_test_name is not None:
- test_cwd = 'worker_{}'.format(pid)
+ test_cwd = 'test_python_worker_{}'.format(pid)
else:
test_cwd = 'test_python_{}'.format(pid)
test_cwd = os.path.join(self.tmp_dir, test_cwd)
return test_cwd
+ def cleanup(self):
+ import glob
+ import shutil
+
+ path = os.path.join(self.tmp_dir, 'test_python_*')
+ print("Cleanup %s directory" % self.tmp_dir)
+ for name in glob.glob(path):
+ print("Remove directory: %s" % name)
+ if os.path.isdir(name):
+ support.rmtree(name)
+ else:
+ print("Remove file: %s" % name)
+ support.unlink(name)
+
def main(self, tests=None, **kwargs):
- self.ns = self.parse_args(kwargs)
+ self.parse_args(kwargs)
+
+ self.set_temp_dir()
+
+ if self.ns.cleanup:
+ self.cleanup()
+ sys.exit(0)
test_cwd = self.create_temp_dir()
return None
def _main(self, tests, kwargs):
- if self.ns.huntrleaks:
- warmup, repetitions, _ = self.ns.huntrleaks
- if warmup < 1 or repetitions < 1:
- msg = ("Invalid values for the --huntrleaks/-R parameters. The "
- "number of warmups and repetitions must be at least 1 "
- "each (1:1).")
- print(msg, file=sys.stderr, flush=True)
- sys.exit(2)
-
if self.worker_test_name is not None:
from test.libregrtest.runtest_mp import run_tests_worker
run_tests_worker(self.ns, self.worker_test_name)
fail_env_changed=True)
self.assertIn("Warning -- Unraisable exception", output)
+ def test_cleanup(self):
+ dirname = os.path.join(self.tmptestdir, "test_python_123")
+ os.mkdir(dirname)
+ filename = os.path.join(self.tmptestdir, "test_python_456")
+ open(filename, "wb").close()
+ names = [dirname, filename]
+
+ cmdargs = ['-m', 'test',
+ '--tempdir=%s' % self.tmptestdir,
+ '--cleanup']
+ self.run_python(cmdargs)
+
+ for name in names:
+ self.assertFalse(os.path.exists(name), name)
+
class TestUtils(unittest.TestCase):
def test_format_duration(self):