guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Plan for a release!


From: Mathieu Othacehe
Subject: Re: Plan for a release!
Date: Fri, 20 Mar 2020 11:52:21 +0100
User-agent: mu4e 1.2.0; emacs 26.3

Hey,

>> Done, but it’d be nice to add more test of the installer!
>
> I can help on that. Maybe adding:
>
> * More partitioning patterns
> * More DE & services

Turns out, when selecting GNOME in choose-services call of (gnu tests
install), it triggers downloads during "guix system init ..." call.

I guess it's normal because the installer image does not contain those
packages. However, as there's no connection, it fails.

Not sure, we can go further?

In the meantime, here's a patch that helps dealing with installation
failures.

Thanks,

Mathieu
>From 11193c030fa64cc3e2f6505062b7aa4fa9b2a2f4 Mon Sep 17 00:00:00 2001
From: Mathieu Othacehe <address@hidden>
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 <address@hidden>
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <address@hidden>
+;;; Copyright © 2020 Mathieu Othacehe <address@hidden>
 ;;;
 ;;; 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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]