tests: Fix no gpg-agent upon removal of GNUPGHOME.
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 4 Apr 2018 11:27:08 +0000 (20:27 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 4 Apr 2018 11:27:08 +0000 (20:27 +0900)
* tests/gpgscm/gnupg.scm (with-ephemeral-home-directory): Add
teadown-fn.
* tests/gpgsm/export.scm: Use -no-atexit version and stop-agent.
* tests/openpgp/decrypt-session-key.scm: Likewise.
* tests/openpgp/decrypt-unwrap-verify.scm: Likewise.
* tests/openpgp/defs.scm (have-opt-always-trust): Likewise.
(setup-environment-no-atexit): New.
(start-agent): Support no use of atexit.
* tests/gpgsm/gpgsm-defs.scm (setup-gpgsm-environment-no-atexit): New.
* tests/migrations/common.scm (untar-armored): Follow the change
of with-ephemeral-home-directory.

--

When gpg-agent detects homedir removal, it will automatically exit.
Then, call of 'gpgconf --kill all' will fail.  So, stop-agent should
be called before the removal of homedir.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
tests/gpgscm/gnupg.scm
tests/gpgsm/export.scm
tests/gpgsm/gpgsm-defs.scm
tests/migrations/common.scm
tests/openpgp/decrypt-session-key.scm
tests/openpgp/decrypt-unwrap-verify.scm
tests/openpgp/defs.scm

index 5fcf9fd..77bf479 100644 (file)
 
 ;; Evaluate a sequence of expressions with an ephemeral home
 ;; directory.
-(define-macro (with-ephemeral-home-directory setup-fn . expressions)
+(define-macro (with-ephemeral-home-directory setup-fn teardown-fn . expressions)
   (let ((original-home-directory (gensym))
        (ephemeral-home-directory (gensym))
-       (setup (gensym)))
+       (setup (gensym))
+       (teardown (gensym)))
     `(let ((,original-home-directory (getenv "GNUPGHOME"))
           (,ephemeral-home-directory (mkdtemp))
-          (,setup (delay (,setup-fn))))
+          (,setup (delay (,setup-fn)))
+          (,teardown (delay (,teardown-fn))))
        (finally (unlink-recursively ,ephemeral-home-directory)
         (dynamic-wind
             (lambda ()
               (setenv "GNUPGHOME" ,ephemeral-home-directory #t)
               (with-working-directory ,ephemeral-home-directory (force ,setup)))
             (lambda () ,@expressions)
-            (lambda () (setenv "GNUPGHOME" ,original-home-directory #t)))))))
+            (lambda ()
+              (setenv "GNUPGHOME" ,ephemeral-home-directory #t)
+              (with-working-directory ,ephemeral-home-directory (force ,teardown))
+              (setenv "GNUPGHOME" ,original-home-directory #t)))))))
index d29b6cc..4a8108b 100644 (file)
@@ -25,7 +25,7 @@
  (lambda (cert)
    (lettmp (exported)
      (call-check `(,@gpgsm --output ,exported --export ,cert::uid::CN))
-     (with-ephemeral-home-directory setup-gpgsm-environment
+     (with-ephemeral-home-directory setup-gpgsm-environment-no-atexit stop-agent
       (call-check `(,@gpgsm --import ,exported))
       (assert (sm-have-public-key? cert)))))
  (lambda (cert) cert::uid::CN)
index c78a127..f118642 100644 (file)
@@ -99,3 +99,9 @@
       (call-check `(,(tool 'gpgtar) --extract --directory=. ,(cadr *args*)))
       (create-gpgsm-gpghome))
   (start-agent))
+
+(define (setup-gpgsm-environment-no-atexit)
+  (if (member "--unpack-tarball" *args*)
+      (call-check `(,(tool 'gpgtar) --extract --directory=. ,(cadr *args*)))
+      (create-gpgsm-gpghome))
+  (start-agent #t))
index 54d33b9..cabfdff 100644 (file)
@@ -39,7 +39,7 @@
 (define GPGTAR (path-join (getenv "objdir") "tools" (qualify "gpgtar")))
 
 (define (untar-armored source-name)
-  (with-ephemeral-home-directory (lambda ())
+  (with-ephemeral-home-directory (lambda ()) (lambda ())
     (pipe:do
      (pipe:open source-name (logior O_RDONLY O_BINARY))
      (pipe:spawn `(,@GPG --dearmor))
index 35aa7f3..c3294e0 100755 (executable)
@@ -37,7 +37,7 @@
  (lambda (name)
    (let* ((source (in-srcdir "tests" "openpgp" (string-append name ".asc")))
          (key (get-session-key source)))
-     (with-ephemeral-home-directory setup-environment
+     (with-ephemeral-home-directory setup-environment-no-atexit stop-agent
       (tr:do
        (tr:open source)
        (tr:gpg "" `(--yes --decrypt --override-session-key ,key))
index bf7d14d..addc2da 100755 (executable)
@@ -35,7 +35,7 @@
 
        ;; Then, verify the signature with a clean working directory
        ;; containing only Steve's public key.
-       (with-ephemeral-home-directory setup-environment
+       (with-ephemeral-home-directory setup-environment-no-atexit stop-agent
        (call-check `(,@gpg --import ,steve's-key))
        (call-check `(,@gpg --verify ,unwrapped)))))
   '("encsig-2-keys-3" "encsig-2-keys-4")))
index a6347fe..9537652 100644 (file)
 
 (define have-opt-always-trust
   (catch #f
-        (with-ephemeral-home-directory (lambda ())
+        (with-ephemeral-home-directory (lambda ()) (lambda ())
           (call-check `(,(tool 'gpg) --gpgconf-test --always-trust)))
         #t))
 
   (create-gpghome)
   (start-agent))
 
+(define (setup-environment-no-atexit)
+  (create-gpghome)
+  (start-agent #t))
+
 (define (create-sample-files)
   (log "Creating sample data files")
   (for-each
   (preset-passphrases))
 
 ;; Create the socket dir and start the agent.
-(define (start-agent)
+(define (start-agent . args)
   (log "Starting gpg-agent...")
   (let ((gnupghome (getenv "GNUPGHOME")))
-    (atexit (lambda ()
-             (with-home-directory gnupghome
-                                  (stop-agent)))))
+    (if (null? args)
+       (atexit (lambda ()
+                 (with-home-directory gnupghome (stop-agent))))))
   (catch (log "Warning: Creating socket directory failed:" (car *error*))
         (gpg-conf '--create-socketdir))
   (call-check `(,(tool 'gpg-connect-agent) --verbose