tests: Fix setup of ephemeral home directories.
authorJustus Winter <justus@g10code.com>
Tue, 4 Apr 2017 12:32:04 +0000 (14:32 +0200)
committerJustus Winter <justus@g10code.com>
Tue, 4 Apr 2017 16:52:06 +0000 (18:52 +0200)
* tests/openpgp/defs.scm (with-ephemeral-home-directory): Create
configuration files when we enter the context.
* tests/openpgp/setup.scm: Do not use an ephemeral home directory.
Tests should always use the cwd.
* tests/gpgsm/setup.scm: Likewise.
* tests/gpgsm/export.scm: Add explicit constructor function.
* tests/openpgp/decrypt-session-key.scm: Likewise.
* tests/openpgp/decrypt-unwrap-verify.scm: Likewise.
--

Previously, ephemeral homedirectories lacked a configuration, hence
GnuPG tried to start backend daemons using their installed locations.
Fix this by explicitly creating a suitable configuration.

GnuPG-bug-id: 3047
Signed-off-by: Justus Winter <justus@g10code.com>
tests/gpgsm/export.scm
tests/gpgsm/setup.scm
tests/openpgp/decrypt-session-key.scm
tests/openpgp/decrypt-unwrap-verify.scm
tests/openpgp/defs.scm
tests/openpgp/setup.scm

index 1ee91e4..47fb06e 100644 (file)
@@ -25,7 +25,7 @@
  (lambda (cert)
    (lettmp (exported)
      (call-check `(,@gpgsm --output ,exported --export ,cert::uid::CN))
-     (with-ephemeral-home-directory
+     (with-ephemeral-home-directory setup-gpgsm-environment
       (call-check `(,@gpgsm --import ,exported))
       (assert (sm-have-public-key? cert)))))
  (lambda (cert) cert::uid::CN)
index 91821a0..aa1ab41 100644 (file)
@@ -23,8 +23,6 @@
 (unless (and tarball (not (null? tarball)))
        (error "Usage: setup.scm --create-tarball <file> ..."))
 
-(with-ephemeral-home-directory
- (chdir (getenv "GNUPGHOME"))
- (create-gpgsmhome)
- (stop-agent)
- (call-check `(,(tool 'gpgtar) --create --output ,(car tarball) ".")))
+(setenv "GNUPGHOME" (getcwd) #t)
+(create-gpgsmhome)
+(call-check `(,(tool 'gpgtar) --create --output ,(car tarball) "."))
index 771b53d..989ce30 100755 (executable)
@@ -37,7 +37,7 @@
  (lambda (name)
    (let* ((source (in-srcdir (string-append name ".asc")))
          (key (get-session-key source)))
-     (with-ephemeral-home-directory
+     (with-ephemeral-home-directory setup-environment
       (tr:do
        (tr:open source)
        (tr:gpg "" `(--yes --decrypt --override-session-key ,key))
index 97a72e4..ef9a99a 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
+       (with-ephemeral-home-directory setup-environment
        (call-check `(,@gpg --import ,steve's-key))
        (call-check `(,@gpg --verify ,unwrapped)))))
   '("encsig-2-keys-3" "encsig-2-keys-4")))
index e8d06c0..4271ba0 100644 (file)
 
 ;; Evaluate a sequence of expressions with an ephemeral home
 ;; directory.
-(define-macro (with-ephemeral-home-directory . expressions)
+(define-macro (with-ephemeral-home-directory setup-fn . expressions)
   (let ((original-home-directory (gensym))
-       (ephemeral-home-directory (gensym)))
+       (ephemeral-home-directory (gensym))
+       (setup (gensym)))
     `(let ((,original-home-directory (getenv "GNUPGHOME"))
-          (,ephemeral-home-directory (mkdtemp)))
+          (,ephemeral-home-directory (mkdtemp))
+          (,setup (delay (,setup-fn))))
        (finally (unlink-recursively ,ephemeral-home-directory)
         (dynamic-wind
-            (lambda () (setenv "GNUPGHOME" ,ephemeral-home-directory #t))
+            (lambda ()
+              (force ,setup)
+              (setenv "GNUPGHOME" ,ephemeral-home-directory #t))
             (lambda () ,@expressions)
             (lambda () (setenv "GNUPGHOME" ,original-home-directory #t)))))))
 
index 4b3bfcb..a7d14e7 100755 (executable)
        '(gpgconf gpg gpg-agent scdaemon gpgsm dirmngr gpg-connect-agent
                 gpg-preset-passphrase gpgtar pinentry)))
 
-(with-ephemeral-home-directory
- (chdir (getenv "GNUPGHOME"))
- (create-gpghome)
- (start-agent)
- (create-legacy-gpghome)
- (stop-agent)
- (call-check `(,(tool 'gpgtar) --create --output ,(cadr *args*) ".")))
+(setenv "GNUPGHOME" (getcwd) #t)
+(create-gpghome)
+(start-agent)
+(create-legacy-gpghome)
+(stop-agent)
+(call-check `(,(tool 'gpgtar) --create --output ,(cadr *args*) "."))