aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/tests/support.py
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2017-02-17 11:18:56 +0000
committerJustus Winter <[email protected]>2017-02-17 11:18:56 +0000
commitde8494b16bc50c60a8438f2cae1f8c88e8949f7a (patch)
tree3fae3b3fd43eb9e860fc446415dccd0d6358044c /lang/python/tests/support.py
parentpython: Fix using strings as commands in the assuan protocol. (diff)
downloadgpgme-de8494b16bc50c60a8438f2cae1f8c88e8949f7a.tar.gz
gpgme-de8494b16bc50c60a8438f2cae1f8c88e8949f7a.zip
python: Fix teardown of ephemeral contexts.
* lang/python/tests/support.py (EphemeralContext): New function. * lang/python/tests/t-quick-key-creation.py: Use the new function to manage ephemeral contexts. * lang/python/tests/t-quick-key-manipulation.py: Likewise. * lang/python/tests/t-quick-subkey-creation.py: Likewise. -- Previously, there was a problem with cleaning up ephemeral home directories. shutil.rmtree deleted the agents main socket, gpg-agent detected that, and deleted the other sockets as well, racing shutil.rmtree which did not cope will with that. Fix this by asking the agent nicely to shut down. Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'lang/python/tests/support.py')
-rw-r--r--lang/python/tests/support.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/lang/python/tests/support.py b/lang/python/tests/support.py
index ed5bf615..a381270d 100644
--- a/lang/python/tests/support.py
+++ b/lang/python/tests/support.py
@@ -18,9 +18,12 @@
from __future__ import absolute_import, print_function, unicode_literals
del absolute_import, print_function, unicode_literals
+import contextlib
+import shutil
import sys
import os
import tempfile
+import time
import gpg
# known keys
@@ -85,5 +88,24 @@ else:
self.path = tempfile.mkdtemp()
return self.path
def __exit__(self, *args):
- import shutil
shutil.rmtree(self.path)
+
+def EphemeralContext():
+ with TemporaryDirectory() as tmp:
+ home = os.environ['GNUPGHOME']
+ shutil.copy(os.path.join(home, "gpg.conf"), tmp)
+ shutil.copy(os.path.join(home, "gpg-agent.conf"), tmp)
+
+ with gpg.Context(home_dir=tmp) as ctx:
+ yield ctx
+
+ # Ask the agent to quit.
+ agent_socket = os.path.join(tmp, "S.gpg-agent")
+ ctx.protocol = gpg.constants.protocol.ASSUAN
+ ctx.set_engine_info(ctx.protocol, file_name=agent_socket)
+ ctx.assuan_transact(["KILLAGENT"])
+
+ # Block until it is really gone.
+ while os.path.exists(agent_socket):
+ time.sleep(.01)