python: Make tests more robust.
authorJustus Winter <justus@g10code.com>
Tue, 14 Mar 2017 10:08:08 +0000 (11:08 +0100)
committerJustus Winter <justus@g10code.com>
Tue, 14 Mar 2017 11:20:24 +0000 (12:20 +0100)
* 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 <justus@g10code.com>
lang/python/tests/support.py

index a381270..69aa7a4 100644 (file)
@@ -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():