summaryrefslogtreecommitdiff
blob: b5318ede0d875bf6c319976e038f37b7547983a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# HG changeset patch
# User Michał Górny <mgorny@gentoo.org>
# Date 1533916222 -7200
# Node ID 2c8991b1c9080adc61e63d00fe9415b88f3e6208
# Parent  9cb2a856677237b528ead6fff68de7d488dbfeec
Use private temporary GPG-homes for tests to fix race conditions.

Create unique temporary directories to use as GPG home in each test
instead of reusing a single hardcoded 'keys' directory.  This is
necessary to fix race conditions between directory operations
and gpg-agent in GnuPG 2.0+.

GnuPG 2.0 started using gpg-agent for all operations.  It is
automatically spawned when GPG is called to do something, and it stops
automatically when its homedir is removed (e.g. as part of rmtree()
call).  However, with the homedir being instantly recreated and next
test being run, it seems that gpg-agent sometimes failed to stop fully
before being started again and causes one of the tests to fail with
gpg-agent connection errors.

With this change, I am finally able to successfully run all tests
in a single batch.

diff --git a/test_gnupg.py b/test_gnupg.py
--- a/test_gnupg.py
+++ b/test_gnupg.py
@@ -173,11 +173,7 @@
 
 class GPGTestCase(unittest.TestCase):
     def setUp(self):
-        hd = os.path.join(os.getcwd(), 'keys')
-        if os.path.exists(hd):
-            self.assertTrue(os.path.isdir(hd),
-                            "Not a directory: %s" % hd)
-            shutil.rmtree(hd, ignore_errors=True)
+        hd = tempfile.mkdtemp()
         prepare_homedir(hd)
         self.homedir = hd
         self.gpg = gpg = gnupg.GPG(gnupghome=hd, gpgbinary=GPGBINARY)
@@ -193,6 +189,9 @@
             data_file.write(os.urandom(5120 * 1024))
             data_file.close()
 
+    def tearDown(self):
+        shutil.rmtree(self.homedir, ignore_errors=True)
+
     def test_environment(self):
         "Test the environment by ensuring that setup worked"
         hd = self.homedir
@@ -373,7 +372,7 @@
             # and the keyring file name has changed.
             pkn = 'pubring.kbx'
             skn = None
-        hd = os.path.join(os.getcwd(), 'keys')
+        hd = self.homedir
         if os.name == 'posix':
             pkn = os.path.join(hd, pkn)
             if skn: