From 11193c030fa64cc3e2f6505062b7aa4fa9b2a2f4 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Fri, 20 Mar 2020 11:36:33 +0100 Subject: [PATCH] tests: install: Abort when one installation step fails. When marionette-eval calls fail in gui-test-program, the installation continues which results in two scenarios: - hang forever at the next marionette-eval call, - keep going and start a broken installation, which is annoying because it clears the terminal and hides the error. Make sure that gui-test-program is exited with #f return code when one of the marionette-eval calls fail. * gnu/tests/install.scm (gui-test-program): Add a new macro "marionette-eval*". Use it to abort to prompt 'gui-test and return #f when one on the marionette-eval calls fail. --- gnu/tests/install.scm | 139 ++++++++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 61 deletions(-) diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 4f650ffb34..4453b15e89 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice +;;; Copyright © 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -946,70 +947,86 @@ build (current-guix) and then store a couple of full system images.") (marionette-control (string-append "screendump " file) #$marionette)) + (define-syntax-rule (marionette-eval* exp marionette) + (unless (marionette-eval exp marionette) + (abort-to-prompt 'gui-test))) + (setvbuf (current-output-port) 'none) (setvbuf (current-error-port) 'none) - (marionette-eval '(use-modules (gnu installer tests)) - #$marionette) - - ;; Arrange so that 'converse' prints debugging output to the console. - (marionette-eval '(let ((console (open-output-file "/dev/console"))) - (setvbuf console 'none) - (conversation-log-port console)) - #$marionette) - - ;; Tell the installer to not wait for the Connman "online" status. - (marionette-eval '(call-with-output-file "/tmp/installer-assume-online" - (const #t)) - #$marionette) - - ;; Run 'guix system init' with '--no-grafts', to cope with the lack of - ;; network access. - (marionette-eval '(call-with-output-file - "/tmp/installer-system-init-options" - (lambda (port) - (write '("--no-grafts" "--no-substitutes") - port))) - #$marionette) - - (marionette-eval '(define installer-socket - (open-installer-socket)) - #$marionette) - (screenshot "installer-start.ppm") - - (marionette-eval '(choose-locale+keyboard installer-socket) - #$marionette) - (screenshot "installer-locale.ppm") - - ;; Choose the host name that the "basic" test expects. - (marionette-eval '(enter-host-name+passwords installer-socket - #:host-name "liberigilo" - #:root-password - #$%root-password - #:users - '(("alice" "pass1") - ("bob" "pass2"))) - #$marionette) - (screenshot "installer-services.ppm") - - (marionette-eval '(choose-services installer-socket - #:desktop-environments '() - #:choose-network-service? - (const #f)) - #$marionette) - (screenshot "installer-partitioning.ppm") - - (marionette-eval '(choose-partitioning installer-socket - #:encrypted? #$encrypted? - #:passphrase #$%luks-passphrase) - #$marionette) - (screenshot "installer-run.ppm") - - (marionette-eval '(conclude-installation installer-socket) - #$marionette) - - (sync) - #t)) + (call-with-prompt 'gui-test + (lambda () + (marionette-eval* '(use-modules (gnu installer tests)) + #$marionette) + + ;; Arrange so that 'converse' prints debugging output to the + ;; console. + (marionette-eval* + '(let ((console (open-output-file "/dev/console"))) + (setvbuf console 'none) + (conversation-log-port console)) + #$marionette) + + ;; Tell the installer to not wait for the Connman "online" status. + (marionette-eval* + '(call-with-output-file "/tmp/installer-assume-online" + (const #t)) + #$marionette) + + ;; Run 'guix system init' with '--no-grafts', to cope with the lack + ;; of network access. + (marionette-eval* + '(call-with-output-file + "/tmp/installer-system-init-options" + (lambda (port) + (write '("--no-grafts" "--no-substitutes") + port))) + #$marionette) + + (marionette-eval* '(define installer-socket + (open-installer-socket)) + #$marionette) + (screenshot "installer-start.ppm") + + (marionette-eval* '(choose-locale+keyboard installer-socket) + #$marionette) + (screenshot "installer-locale.ppm") + + ;; Choose the host name that the "basic" test expects. + (marionette-eval* + '(enter-host-name+passwords installer-socket + #:host-name "liberigilo" + #:root-password + #$%root-password + #:users + '(("alice" "pass1") + ("bob" "pass2"))) + #$marionette) + (screenshot "installer-services.ppm") + + (marionette-eval* + '(choose-services installer-socket + #:desktop-environments + '("GNOME") + #:choose-network-service? + (const #f)) + #$marionette) + (screenshot "installer-partitioning.ppm") + + (marionette-eval* + '(choose-partitioning installer-socket + #:encrypted? #$encrypted? + #:passphrase #$%luks-passphrase) + #$marionette) + (screenshot "installer-run.ppm") + + (marionette-eval* '(conclude-installation installer-socket) + #$marionette) + + (sync) + #t) + (lambda _ + #f)))) (define %extra-packages ;; Packages needed when installing with an encrypted root. -- 2.25.1