From 3332f4365bf329c361d650c70e53b8a74ad923bd Mon Sep 17 00:00:00 2001 From: Maxime Devos Date: Tue, 30 Mar 2021 12:40:14 +0200 Subject: [PATCH] tests: Support package extensions in the backdoor REPL. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/tests.scm (): Add 'extensions' field. (marionette-shepherd-service): Honour the field. (with-import-modules-and-extensions): Define a combination of 'with-import-modules' and 'with-extensions'. Signed-off-by: Ludovic Courtès --- gnu/tests.scm | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/gnu/tests.scm b/gnu/tests.scm index 3b10a6d5ac..eb636873a2 100644 --- a/gnu/tests.scm +++ b/gnu/tests.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2017 Tobias Geerinckx-Rice +;;; Copyright © 2021 Maxime Devos ;;; ;;; This file is part of GNU Guix. ;;; @@ -74,13 +75,24 @@ (define-record-type* (default "/dev/virtio-ports/org.gnu.guix.port.0")) (imported-modules marionette-configuration-imported-modules (default '())) + (extensions marionette-configuration-extensions + (default '())) ; list of packages (requirements marionette-configuration-requirements ;list of symbols (default '()))) +;; Hack: avoid indenting code beyond column 80 in marionette-shepherd-service. +(define-syntax-rule (with-imported-modules-and-extensions imported-modules + extensions + gexp) + (with-imported-modules imported-modules + (with-extensions extensions + gexp))) + (define (marionette-shepherd-service config) "Return the Shepherd service for the marionette REPL" (match config - (($ device imported-modules requirement) + (($ device imported-modules extensions + requirement) (list (shepherd-service (provision '(marionette)) @@ -90,7 +102,7 @@ (define (marionette-shepherd-service config) (modules '((ice-9 match) (srfi srfi-9 gnu))) (start - (with-imported-modules imported-modules + (with-imported-modules-and-extensions imported-modules extensions #~(lambda () (define (self-quoting? x) (letrec-syntax ((one-of (syntax-rules () @@ -154,11 +166,13 @@ (define marionette-service-type (define* (marionette-operating-system os #:key (imported-modules '()) + (extensions '()) (requirements '())) "Return a marionetteed variant of OS such that OS can be used as a marionette in a virtual machine--i.e., controlled from the host system. The marionette service in the guest is started after the Shepherd services listed -in REQUIREMENTS." +in REQUIREMENTS. The packages in the list EXTENSIONS are made available from +the backdoor REPL." (operating-system (inherit os) ;; Make sure the guest dies on error. @@ -172,6 +186,7 @@ (define* (marionette-operating-system os (services (cons (service marionette-service-type (marionette-configuration (requirements requirements) + (extensions extensions) (imported-modules imported-modules))) (operating-system-user-services os))))) @@ -281,4 +296,9 @@ (define (all-system-tests) "Return the list of system tests." (reverse (fold-system-tests cons '()))) + +;; Local Variables: +;; eval: (put 'with-imported-modules-and-extensions 'scheme-indent-function 2) +;; End: + ;;; tests.scm ends here