[PATCH consfigurator v2 5/6] add gnupg scaffolding for test suite
David Bremner
david at tethera.net
Thu Mar 10 00:28:59 GMT 2022
This is ported from the bash function add_gpg_home in the notmuch test suite.
Provide a new entry point #'runner to run tests with setup and teardown of
whatever is needed (and too inconvenient or expensive to do on a per-test
basis).
---
consfigurator.asd | 4 ++-
tests/gnupg-secret-key.asc | 58 +++++++++++++++++++++++++++++++++++
tests/gnupg.lisp | 63 ++++++++++++++++++++++++++++++++++++++
tests/package.lisp | 2 +-
tests/runner.lisp | 9 ++++++
5 files changed, 134 insertions(+), 2 deletions(-)
create mode 100644 tests/gnupg-secret-key.asc
create mode 100644 tests/gnupg.lisp
create mode 100644 tests/runner.lisp
diff --git a/consfigurator.asd b/consfigurator.asd
index e9e9ee4..5a275a0 100644
--- a/consfigurator.asd
+++ b/consfigurator.asd
@@ -110,7 +110,9 @@
(:feature :sbcl (:require #:sb-rt))
(:feature (:not :sbcl) #:rt))
:components ((:file "tests/package")
+ (:file "tests/gnupg")
+ (:file "tests/runner")
(:file "tests/data/util")
(:file "tests/util")
(:file "tests/property/file"))
- :perform (test-op (o c) (symbol-call :consfigurator/tests '#:do-tests)))
+ :perform (test-op (o c) (symbol-call :consfigurator/tests '#:runner)))
diff --git a/tests/gnupg-secret-key.asc b/tests/gnupg-secret-key.asc
new file mode 100644
index 0000000..744361b
--- /dev/null
+++ b/tests/gnupg-secret-key.asc
@@ -0,0 +1,58 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+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
+Jp5jqHK84FMH3+g=
+=24jV
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/gnupg.lisp b/tests/gnupg.lisp
new file mode 100644
index 0000000..9ed9eed
--- /dev/null
+++ b/tests/gnupg.lisp
@@ -0,0 +1,63 @@
+;;; Consfigurator -- Lisp declarative configuration management system
+
+;;; Copyright (C) 2022 David Bremner <david at tethera.net>
+
+;;; This file is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3, or (at your option)
+;;; any later version.
+
+;;; This file is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+(in-package :consfigurator/tests)
+(named-readtables:in-readtable :consfigurator)
+
+(defvar *gnupghome* nil
+ "Home directory for gnupg tests. Because gnupg uses Unix domain sockets
+ internally, this path should be short enough to avoid the 108 chars limit on
+ socket paths.")
+
+(define-constant +keyfile+
+ (asdf:system-relative-pathname 'consfigurator/tests
+ "tests/gnupg-secret-key.asc")
+ :test #'equal)
+
+;; this needs to be kept in sync with the shipped key
+(define-constant +gpg-fingerprint+ "F6B568B783D69267DA6FBE4B2C52E016026B271C"
+ :test #'equal)
+
+(defmacro with-gnupghome (&rest body)
+ "Run BODY with GNUPGHOME to test suite value set in environment"
+ `(let ((val nil))
+ (setf (osicat:environment-variable "GNUPGHOME") (namestring *gnupghome*))
+ (setq val (progn , at body))
+ (osicat:makunbound-environment-variable "GNUPGHOME")
+ val))
+
+(defun gpg (args &key input)
+ "run gpg on the test suite gnupg home directory"
+ (run-program `("gpg" "--homedir" ,(namestring *gnupghome*) , at args)
+ :input input
+ :output :string :error-output :output))
+
+(defun gpg-setup (test-home)
+ "Set up gnupg homedir for test suite in TEST-HOME."
+ (setf *gnupghome* (ensure-directory-pathname #?"${test-home}/gnupg"))
+ (ensure-directories-exist *gnupghome* :mode #o700)
+ (gpg '("--no-tty" "--import") :input +keyfile+)
+ (with-open-file (stream #?"${*gnupghome*}/gpg.conf" :direction :output)
+ (format stream "debug-quick-random~%no-emit-version~%"))
+ (let ((str (format nil "~a:6:~%" +gpg-fingerprint+)))
+ (gpg '("--quiet" "--batch" "--no-tty" "--import-ownertrust")
+ :input (make-string-input-stream str))))
+
+(defun gpg-cleanup ()
+ "Clean up any test suite gnupg related processes. Caller is responsible for
+actually removing the *GNUPGHOME* directory"
+ (run-program "gpgconf" "--homedir" *gnupghome* "--kill" "all"))
diff --git a/tests/package.lisp b/tests/package.lisp
index 161bad7..4487d67 100644
--- a/tests/package.lisp
+++ b/tests/package.lisp
@@ -1,6 +1,6 @@
(in-package :cl-user)
(defpackage :consfigurator/tests
- (:use #:cl #:consfigurator #+sbcl :sb-rt #-sbcl :rtest)
+ (:use #:cl #:consfigurator #:alexandria #+sbcl :sb-rt #-sbcl :rtest)
(:local-nicknames (#:file #:consfigurator.property.file)
(#:data-util #:consfigurator.data.util)))
diff --git a/tests/runner.lisp b/tests/runner.lisp
new file mode 100644
index 0000000..a4d720d
--- /dev/null
+++ b/tests/runner.lisp
@@ -0,0 +1,9 @@
+(in-package :consfigurator/tests)
+(named-readtables:in-readtable :consfigurator)
+
+(defun runner ()
+ "Run tests via (sb-)rt, with setup and teardown"
+ (with-local-temporary-directory (test-home)
+ (gpg-setup test-home)
+ (do-tests)
+ (gpg-cleanup)))
--
2.34.1
More information about the sgo-software-discuss
mailing list