[Pkg-gnupg-commit] [gnupg2] 73/124: gpgscm: Make test cleanup more robust.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Wed Apr 5 15:55:34 UTC 2017
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch experimental
in repository gnupg2.
commit 178b6314ab2d2268873067314744c8af74dc331e
Author: Justus Winter <justus at g10code.com>
Date: Thu Mar 23 10:55:34 2017 +0100
gpgscm: Make test cleanup more robust.
* tests/gpgscm/tests.scm (mkdtemp-autoremove): New function that
cleans up at interpreter shutdown.
(run-tests-parallel): Use the new function.
(run-tests-sequential): Likewise.
(make-environment-cache): Execute setup with an temporary working
directory.
--
Make sure to remove all resources created in the filesystem even if
the test runner is interrupted. Make sure to remove anything that the
setup script creates.
Signed-off-by: Justus Winter <justus at g10code.com>
---
tests/gpgscm/tests.scm | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/tests/gpgscm/tests.scm b/tests/gpgscm/tests.scm
index a4339ca..592b36f 100644
--- a/tests/gpgscm/tests.scm
+++ b/tests/gpgscm/tests.scm
@@ -278,6 +278,15 @@
"-XXXXXX"))
(apply path-join components)))))
+;; Make a temporary directory and remove it at interpreter shutdown.
+;; Note that there are macros that limit the lifetime of temporary
+;; directories and files to a lexical scope. Use those if possible.
+;; Otherwise this works like mkdtemp.
+(define (mkdtemp-autoremove . components)
+ (let ((dir (apply mkdtemp components)))
+ (atexit (lambda () (unlink-recursively dir)))
+ dir))
+
(define-macro (with-temporary-working-directory . expressions)
(let ((tmp-sym (gensym)))
`(let* ((,tmp-sym (mkdtemp)))
@@ -621,12 +630,9 @@
(let loop ((pool (test-pool::new '())) (tests' tests))
(if (null? tests')
(let ((results (pool::wait)))
- (for-each (lambda (t)
- (catch (echo "Removing" t::directory "failed:" *error*)
- (unlink-recursively t::directory))
- (t::report)) (reverse results::procs))
+ (for-each (lambda (t) (t::report)) (reverse results::procs))
(exit (results::report)))
- (let* ((wd (mkdtemp))
+ (let* ((wd (mkdtemp-autoremove))
(test (car tests'))
(test' (test::set-directory wd)))
(loop (pool::add (test'::run-async))
@@ -638,12 +644,8 @@
(let loop ((pool (test-pool::new '())) (tests' tests))
(if (null? tests')
(let ((results (pool::wait)))
- (for-each (lambda (t)
- (catch (echo "Removing" t::directory "failed:" *error*)
- (unlink-recursively t::directory)))
- results::procs)
(exit (results::report)))
- (let* ((wd (mkdtemp))
+ (let* ((wd (mkdtemp-autoremove))
(test (car tests'))
(test' (test::set-directory wd)))
(loop (pool::add (test'::run-sync))
@@ -654,10 +656,11 @@
;; Returns a promise containing the arguments that must be passed to a
;; test implementing the consumer side of the cache protocol.
(define (make-environment-cache setup)
- (delay (let* ((tarball (make-temporary-file "environment-cache")))
- (atexit (lambda () (remove-temporary-file tarball)))
- (setup::run-sync '--create-tarball tarball)
- `(--unpack-tarball ,tarball))))
+ (delay (with-temporary-working-directory
+ (let ((tarball (make-temporary-file "environment-cache")))
+ (atexit (lambda () (remove-temporary-file tarball)))
+ (setup::run-sync '--create-tarball tarball)
+ `(--unpack-tarball ,tarball)))))
;; Command line flag handling. Returns the elements following KEY in
;; ARGUMENTS up to the next argument, or #f if KEY is not in
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git
More information about the Pkg-gnupg-commit
mailing list