aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022⁠–⁠2023 Bruno Victal <mirai@makinata.eu>.
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix 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 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu tests gdm)
  #:use-module (gnu tests)
  #:use-module (gnu packages freedesktop)
  #:use-module (gnu packages ocr)
  #:use-module (gnu services)
  #:use-module (gnu services desktop)
  #:use-module (gnu services xorg)
  #:use-module (gnu system)
  #:use-module (gnu system vm)
  #:use-module (guix gexp)
  #:use-module (ice-9 format)
  #:export (%test-gdm-x11
            %test-gdm-wayland))

(define* (make-os #:key wayland?)
  (operating-system
    (inherit %simple-os)
    (services
     (modify-services %desktop-services
       (gdm-service-type config => (gdm-configuration
                                    (inherit config)
                                    (wayland? wayland?)))))))

(define* (run-gdm-test #:key wayland?)
  "Run tests in a vm which has gdm running."
  (define os
    (marionette-operating-system
     (make-os #:wayland? wayland?)
     #:imported-modules '((gnu services herd))))

  (define vm
    (virtual-machine
     (operating-system os)
     (memory-size 1024)))

  (define name (format #f "gdm-~:[x11~;wayland~]" wayland?))

  (define test
    (with-imported-modules '((gnu build marionette))
      #~(begin
          (use-modules (gnu build marionette)
                       (ice-9 format)
                       (srfi srfi-26)
                       (srfi srfi-64))

          (let ((marionette (make-marionette (list #$vm)))
                (expected-session-type #$(if wayland? "wayland" "x11")))

            (test-runner-current (system-test-runner #$output))
            (test-begin #$name)

            ;; service for gdm is called xorg-server
            (test-assert "service is running"
              (marionette-eval
               '(begin
                  (use-modules (gnu services herd))
                  (start-service 'xorg-server))
               marionette))

            (test-group "gdm ready"
              (test-assert "PID file present"
                (wait-for-file "/var/run/gdm/gdm.pid" marionette))

              ;; Waiting for gdm.pid is not enough, tests may still sporadically
              ;; fail; ensure that the login screen is up.
              ;; XXX: GNU Ocrad works but with '--invert' only.
              (test-assert "login screen up"
                (wait-for-screen-text marionette
                                      (cut string-contains <> "Guix")
                                      #:ocr #$(file-append ocrad "/bin/ocrad")
                                      #:ocr-arguments '("--invert")
                                      #:timeout 120))) ;for slow systems

            (test-equal (string-append "session-type is " expected-session-type)
              expected-session-type
              (marionette-eval
               '(begin
                  (use-modules (ice-9 popen)
                               (ice-9 rdelim))

                  (let* ((loginctl #$(file-append elogind "/bin/loginctl"))
                         (get-session-cmd (string-join `(,loginctl "show-user" "gdm"
                                                                   "--property Display" "--value")))
                         (session (call-with-port (open-input-pipe get-session-cmd) read-line))
                         (get-type-cmd (string-join `(,loginctl "show-session" ,session
                                                                "--property Type" "--value")))
                         (type (call-with-port (open-input-pipe get-type-cmd) read-line)))
                    type))
               marionette))

            (test-end)))))

  (gexp->derivation (string-append name "-test") test))

(define %test-gdm-x11
  (system-test
   (name "gdm-x11")
   (description "Basic tests for the GDM service. (X11)")
   (value (run-gdm-test))))

(define %test-gdm-wayland
  (system-test
   (name "gdm-wayland")
   (description "Basic tests for the GDM service. (Wayland)")
   (value (run-gdm-test #:wayland? #t))))
: configuration: simplify alist? procedure....* gnu/services/configuration.scm (alist?): simplify procedure. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Bruno Victal 2023-02-08services: configuration: Format a list of packages by their names....* gnu/services/configuration.scm (generate-documentation): Format a list of packages by their names. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Bruno Victal 2022-12-14services: configuration: Remove orphan reference to example....'generic-serialize-alist' refers to (gnu home services version-control) for usage examples but there's no such module. * gnu/services/configuration.scm (generic-serialize-alist): Adjust docstring. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2022-12-08services: configuration: Rewrite 'alist?' procedure....* gnu/services/configuration.scm (alist?): Rewrite. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2022-12-02services: configuration: Rename location accessor to "source-location"....Fixes <https://issues.guix.gnu.org/59423>. * gnu/services/configuration.scm (define-configuration-helper): Rename the accessor of the %location field from "NAME-location" to "NAME-source-location". Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Reported-by: Pierre Langlois <pierre.langlois@gmx.com> Maxim Cournoyer 2022-11-17Revert "services: configuration: Revert to a working ‘guix home’."...This reverts commit 39e4e00f75be8055300cb0afffb8bd4b4d35f2cc, with fixes for the guix home issues reported and another one found while reconfiguring berlin in the subsequent commit. Maxim Cournoyer 2022-11-13services: configuration: Revert to a working ‘guix home’....This reverts commit 543d971ed2a1d9eb934af1f51930741d7cc4e7ef, and its dependent commit 9b21cd2e9a614f1937769caf3917a791b151d841, which appear to have triggered a recent wave of ‘guix home’ regressions involving (services (list (service home-bash-service-type))): In gnu/home/services/shells.scm: 504:7 3 (home-bash-extensions #<<home-bash-configuration> package: #<package bash@5.1.8 gnu/packages/ba…> …) In unknown file: 2 (append #<<location> file: "…" line: 14 column: 12> ()) In ice-9/boot-9.scm: 1685:16 1 (raise-exception _ #:continuable? _) 1685:16 0 (raise-exception _ #:continuable? _) ice-9/boot-9.scm:1685:16: In procedure raise-exception: In procedure append: Wrong type argument in position 1 (expecting empty list): #<<location> file: "…" line: 14 column: 12> I should love to dive in & fix this rather than revert, but urgently need sleep. Tobias Geerinckx-Rice 2022-11-15services: configuration: Re-order generated record fields....This is so that the first field of the generated record matches the first one declared, which makes 'define-configuration' record API compatible with define-record-type* ones. * gnu/services/configuration.scm (define-configuration-helper): Move the %location field below the ones declared by the user. * gnu/services/monitoring.scm (zabbix-front-end-config): Adjust match pattern accordingly. Maxim Cournoyer 2022-09-23services: configuration: Fix typo....* gnu/services/configuration.scm (interpose): Fix typo in doc. (text-config?): Add a newline following definition. Maxim Cournoyer 2022-08-25services: configuration: Change the value of the unset marker....The new value of %unset-value sticks out more when something goes wrong, and is also more unique; i.e. easier to search for. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Attila Lendvai 2022-08-24services: configuration: Add maybe-value exported procedure....* gnu/services/configuration.scm (maybe-value): New procedure. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Attila Lendvai 2022-08-24services: configuration: Add %unset-value exported variable....* gnu/services/configuration.scm (%unset-value): New variable. (normalize-field-type+def): Use it. (maybe-value-unset?): Use it. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Attila Lendvai 2022-08-24services: configuration: Add a 'maybe-value-set?' procedure....* gnu/services/configuration.scm (maybe-value-set?): New procedure. * doc/guix.texi (Complex Configurations): Document it. Remove comment showing usage of 'maybe-string' with a default value, which doesn't make sense. Co-authored-by: Attila Lendvai <attila@lendvai.name> Maxim Cournoyer 2022-08-01services: configuration: Step back from *unspecified*....Fixes <https://issues.guix.gnu.org/56799>. This partially reverts 8cb1a49a3998c39f315a4199b7d4a121a6d66449. Rationale: *unspecified* cannot be serialized thus used as a G-Expression input, which is problematic/inconvenient when using deeply nested records. As an example, jami-service-type was broken when using partially defined <jami-account> records. * gnu/services/configuration.scm (define-maybe-helper): Check against the 'unset symbol. (normalize-field-type+def): Adjust value to 'unset. (define-configuration-helper): Use 'unset as the default value thunk. * gnu/services/file-sharing.scm (serialize-maybe-string): Check against the 'unset symbol. (serialize-maybe-file-object): Likewise. * gnu/services/messaging.scm (define-all-configurations): Use 'unset as value. (raw-content?): Check against 'unset symbol. (prosody-configuration)[http-max-content-size]: Default to 'unset. [http-external-url]: Likewise. [mod-muc]: Likewise. [raw-content]: Likewise. * gnu/services/networking.scm (opendht-configuration): Adjust documentation. * gnu/services/telephony.scm (jami-shepherd-services): Replace *undefined* with the 'unset symbol. * tests/services/configuration.scm ("maybe type, no default"): Check against the 'unset symbol. * doc/guix.texi: Regenerate the opendht-configuration, openvpn-client-configuration and openvpn-server-configuration documentation. Maxim Cournoyer