From ac4849953860547b06a167ca9612c4de369d02b6 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 14 Mar 2017 11:08:08 +0100 Subject: [PATCH] python: Make tests more robust. * lang/python/tests/support.py (TemporaryDirectory): Always use our own version even if 'tempfile.TemporaryDirectory' is provided, because we need to use 'shutil.rmtree(..., ignore_errors=True)' to avoid it tripping over gpg-agent deleting its own sockets. Signed-off-by: Justus Winter --- lang/python/tests/support.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lang/python/tests/support.py b/lang/python/tests/support.py index a381270d..69aa7a40 100644 --- a/lang/python/tests/support.py +++ b/lang/python/tests/support.py @@ -78,17 +78,16 @@ def mark_key_trusted(ctx, key): ctx.op_edit(key, Editor().edit, sink, sink) -# Python2/3 compatibility -if hasattr(tempfile, "TemporaryDirectory"): - # Python3.2 and up - TemporaryDirectory = tempfile.TemporaryDirectory -else: - class TemporaryDirectory(object): - def __enter__(self): - self.path = tempfile.mkdtemp() - return self.path - def __exit__(self, *args): - shutil.rmtree(self.path) +# Python3.2 and up has tempfile.TemporaryDirectory, but we cannot use +# that, because there shutil.rmtree is used without +# ignore_errors=True, and that races against gpg-agent deleting its +# sockets. +class TemporaryDirectory(object): + def __enter__(self): + self.path = tempfile.mkdtemp() + return self.path + def __exit__(self, *args): + shutil.rmtree(self.path, ignore_errors=True) @contextlib.contextmanager def EphemeralContext():