diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2018-04-04 13:27:08 +0200 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2018-04-04 13:27:08 +0200 |
commit | 83529e1bd14a6d39f2a8ecab9fb6aa4c1f344c73 (patch) | |
tree | 7a8a1e7c8367547880106c65cf5cac33e677e31e | |
parent | scd: Writing KDF resets auth state. (diff) | |
download | gnupg2-83529e1bd14a6d39f2a8ecab9fb6aa4c1f344c73.tar.xz gnupg2-83529e1bd14a6d39f2a8ecab9fb6aa4c1f344c73.zip |
tests: Fix no gpg-agent upon removal of GNUPGHOME.
* 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>
-rw-r--r-- | tests/gpgscm/gnupg.scm | 13 | ||||
-rw-r--r-- | tests/gpgsm/export.scm | 2 | ||||
-rw-r--r-- | tests/gpgsm/gpgsm-defs.scm | 6 | ||||
-rw-r--r-- | tests/migrations/common.scm | 2 | ||||
-rwxr-xr-x | tests/openpgp/decrypt-session-key.scm | 2 | ||||
-rwxr-xr-x | tests/openpgp/decrypt-unwrap-verify.scm | 2 | ||||
-rw-r--r-- | tests/openpgp/defs.scm | 14 |
7 files changed, 28 insertions, 13 deletions
diff --git a/tests/gpgscm/gnupg.scm b/tests/gpgscm/gnupg.scm index 5fcf9fd21..77bf479ef 100644 --- a/tests/gpgscm/gnupg.scm +++ b/tests/gpgscm/gnupg.scm @@ -28,17 +28,22 @@ ;; 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))))))) diff --git a/tests/gpgsm/export.scm b/tests/gpgsm/export.scm index d29b6cc48..4a8108bd3 100644 --- a/tests/gpgsm/export.scm +++ b/tests/gpgsm/export.scm @@ -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) diff --git a/tests/gpgsm/gpgsm-defs.scm b/tests/gpgsm/gpgsm-defs.scm index c78a12797..f11864201 100644 --- a/tests/gpgsm/gpgsm-defs.scm +++ b/tests/gpgsm/gpgsm-defs.scm @@ -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)) diff --git a/tests/migrations/common.scm b/tests/migrations/common.scm index 54d33b987..cabfdff80 100644 --- a/tests/migrations/common.scm +++ b/tests/migrations/common.scm @@ -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)) diff --git a/tests/openpgp/decrypt-session-key.scm b/tests/openpgp/decrypt-session-key.scm index 35aa7f36b..c3294e0c6 100755 --- a/tests/openpgp/decrypt-session-key.scm +++ b/tests/openpgp/decrypt-session-key.scm @@ -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)) diff --git a/tests/openpgp/decrypt-unwrap-verify.scm b/tests/openpgp/decrypt-unwrap-verify.scm index bf7d14d41..addc2daac 100755 --- a/tests/openpgp/decrypt-unwrap-verify.scm +++ b/tests/openpgp/decrypt-unwrap-verify.scm @@ -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"))) diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm index a6347fe1f..95376521d 100644 --- a/tests/openpgp/defs.scm +++ b/tests/openpgp/defs.scm @@ -201,7 +201,7 @@ (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)) @@ -365,6 +365,10 @@ (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 @@ -448,12 +452,12 @@ (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 |