aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>.
;;;
;;; 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 lightdm)
  #:use-module (gnu bootloader)
  #:use-module (gnu bootloader grub)
  #:use-module (gnu packages)
  #:use-module (gnu packages ocr)
  #:use-module (gnu packages ratpoison)
  #:use-module (gnu packages vnc)
  #:use-module (gnu packages xorg)
  #:use-module (gnu services)
  #:use-module (gnu services base)
  #:use-module (gnu services dbus)
  #:use-module (gnu services desktop)
  #:use-module (gnu services networking)
  #:use-module (gnu services lightdm)
  #:use-module (gnu services ssh)
  #:use-module (gnu services xorg)
  #:use-module (gnu system)
  #:use-module (gnu system file-systems)
  #:use-module (gnu system keyboard)
  #:use-module (gnu system shadow)
  #:use-module (gnu system vm)
  #:use-module (gnu tests)
  #:use-module (guix gexp)
  #:use-module (guix modules)
  #:use-module (srfi srfi-1)
  #:export (%test-lightdm))

(define minimal-desktop-services
  (list polkit-wheel-service
        (service upower-service-type)
        (service accountsservice-service-type)
        (service polkit-service-type)
        (service elogind-service-type)
        (service dbus-root-service-type)
        (service x11-socket-directory-service-type)))

(define %lightdm-os
  (operating-system
    (inherit %simple-os)
    (packages (cons* ocrad ratpoison xterm %base-packages))
    (services
     (cons* (set-xorg-configuration (xorg-configuration
                                     (keyboard-layout (keyboard-layout "us")))
                                    lightdm-service-type)

            (service lightdm-service-type
                     (lightdm-configuration
                      (allow-empty-passwords? #t)
                      (debug? #t)
                      (xdmcp? #t)
                      (vnc-server? #t)
                      (vnc-server-command
                       (file-append tigervnc-server "/bin/Xvnc"
                                    "  -SecurityTypes None"))
                      (greeters (list (lightdm-gtk-greeter-configuration
                                       (allow-debugging? #t))))
                      (seats (list (lightdm-seat-configuration
                                    (name "*")
                                    (user-session "ratpoison"))))))

            ;; For debugging.
            (service dhcp-client-service-type)
            (service openssh-service-type
                     (openssh-configuration
                      (permit-root-login #t)
                      (allow-empty-passwords? #t)))
            (append minimal-desktop-services
                    (remove (lambda (service)
                              (eq? (service-kind service) guix-service-type))
                            %base-services))))))

(define (run-lightdm-test)
  "Run tests in %LIGHTDM-OS."

  (define os (marionette-operating-system
              %lightdm-os
              #:imported-modules (source-module-closure
                                  '((gnu services herd)))))

  (define vm (virtual-machine os))

  (define test
    (with-imported-modules (source-module-closure
                            '((gnu build marionette)))
      #~(begin
          (use-modules (gnu build marionette)
                       (srfi srfi-26)
                       (srfi srfi-64))

          (let ((marionette (make-marionette (list #$vm))))

            (test-runner-current (system-test-runner #$output))
            (test-begin "lightdm")

            (test-assert "service is running"
              (marionette-eval
               '(begin
                  (use-modules (gnu services herd))
                  (start-service 'lightdm))
               marionette))

            (test-assert "service can be stopped"
              (marionette-eval
               '(begin
                  (use-modules (gnu services herd))
                  (stop-service 'lightdm))
               marionette))

            (test-assert "service can be restarted"
              (marionette-eval
               '(begin
                  (use-modules (gnu services herd))
                  (restart-service 'lightdm))
               marionette))

            (test-assert "login screen is displayed"
              ;; GNU Ocrad fails to recognize the "Log In" button text, so use
              ;; Tesseract.
              (wait-for-screen-text marionette
                                    (cut string-contains <> "Log In")
                                    #:ocr #$(file-append tesseract-ocr
                                                         "/bin/tesseract")
                                    #:timeout 60)) ;for slow systems

            (test-assert "can connect to TCP port 5900 on IPv4"
              (wait-for-tcp-port 5900 marionette))

            (test-assert "can connect to TCP port 5900 on IPv6"
              (wait-for-tcp-port 5900 marionette
                                 #:address
                                 `(make-socket-address
                                   AF_INET6
                                   (inet-pton AF_INET6 "::1")
                                   5900)))

            (test-end)))))

  (gexp->derivation "lightdm-test" test))

(define %test-lightdm
  (system-test
   (name "lightdm")
   (description "Basic tests for the LightDM service.")
   (value (run-lightdm-test))))
>2020-05-05gnu: Add rust-capnp-rpc-0.10.Hartmut Goebel * gnu/packages/crates-io.scm (rust-capnp-rpc-0.10): New variable. 2020-05-05gnu: Add rust-capnp-futures-0.10.Hartmut Goebel * gnu/packages/crates-io.scm (rust-capnp-futures-0.10): New variable. 2020-05-05gnu: Add rust-capnpc-0.10.Hartmut Goebel * gnu/packages/crates-io.scm (rust-capnpc-0.10): New variable. 2020-05-05gnu: Add rust-capnp-0.10.Hartmut Goebel * gnu/packages/crates-io.scm (rust-capnp-0.10): New variable. 2020-05-05gnu: Add rust-bytes-0.5.Hartmut Goebel * gnu/packages/crates-io.scm (rust-bytes-0.5): New variable. (rust-bytes-0.4): Inherit from it. 2020-05-05gnu: Add rust-bitflags-0.5Hartmut Goebel * gnu/packages/crates-io.scm (rust-bitflags-0.5): New variable. 2020-05-05gnu: Add rust-bindgen-0.49.Hartmut Goebel * gnu/packages/crates-io.scm (rust-bindgen-0.49): New variable. 2020-05-05gnu: Add rust-base64-0.9.Hartmut Goebel * gnu/packages/crates-io.scm (rust-base64-0.9): New variable. 2020-05-05gnu: Add rust-assert-cli-0.6.Hartmut Goebel * gnu/packages/crates-io.scm (rust-assert-cli-0.6): New variable. 2020-05-05gnu: Add rust-ascii-canvas-2.Hartmut Goebel * gnu/packages/crates-io.scm (rust-ascii-canvas-2): New variable. 2020-05-05gnu: Update rust-wasm-bindgen-test-0.2 to 0.2.50.Hartmut Goebel * gnu/packages/crates-io.scm (rust-wasm-bindgen-test-0.2): Update to 0.2.50. 2020-05-05gnu: Update rust-wasm-bindgen-futures-0.3 to 0.3.27.Hartmut Goebel * gnu/packages/crates-io.scm (rust-wasm-bindgen-futures-0.3): Update to 0.3.27. 2020-05-05gnu: Update rust-unicode-normalization-0.1 to 0.1.9.Hartmut Goebel * gnu/packages/crates-io.scm (rust-unicode-normalization-0.1): Update to 0.1.9. 2020-05-05gnu: Add grocsvs.Efraim Flashner * gnu/packages/bioinformatics.scm (grocsvs): New variable. * gnu/packages/patches/grocsvs-dont-use-admiral.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. 2020-05-04gnu: Add lesspipe.Michael Rohleder * gnu/packages/less.scm (lesspipe): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2020-05-04gnu: Add purple-mattermost.Ludovic Courtès * gnu/packages/messaging.scm (purple-mattermost): New variable. 2020-05-04doc: Remove prompt from X.509 examples.Ludovic Courtès * doc/guix.texi (X.509 Certificates): Remove leading "$". 2020-05-04gnu: Add collectdLars-Dominik Braun * gnu/packages/monitoring.scm (collectd): New variable * gnu/local.mk (dist_patch_DATA): Add new patch * gnu/packages/patches/collectd-5.11.0-noinstallvar.patch: New file Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2020-05-04gnu: Add j4-dmenu-desktop.Alex McGrath * gnu/packages/xdisorg.scm (j4-dmenu-desktop): New variable. Signed-off-by: Marius Bakke <mbakke@fastmail.com> 2020-05-04gnu: leptonica: Add giflib reference in Libtool- and pkg-config files.Marius Bakke * gnu/packages/image.scm (leptonica)[arguments]: Add phase "provide-absolute-giflib-reference". 2020-05-04gnu: leptonica: Do not propagate any inputs.Marius Bakke * gnu/packages/image.scm (leptonica)[propagated-inputs]: Move OPENJPEG and LIBWEBP ... [inputs]: ... here. 2020-05-04gnu: python-dulwich: Update to 0.19.16.Marius Bakke * gnu/packages/python-xyz.scm (python-dulwich): Update to 0.19.16. [propagated-inputs]: Add PYTHON-URLLIB3. 2020-05-04git-authenticate: Add missing import.Ludovic Courtès * build-aux/git-authenticate.scm: Import (guix utils), used by the cache handling code and inadvertently removed in 041dc3a9c0694ada41b86115b9774a23c9d50f73. 2020-05-04openpgp: Add missing type predicate for '&openpgp-invalid-signature-error'.Ludovic Courtès Reported by brendyyn on #guix. The mistake led to a macro expansion error on Guile 2.2 but not on 3.0.2. * guix/openpgp.scm (&openpgp-invalid-signature-error): Add missing type predicate. 2020-05-04doc: Add "Packages for C Development" section.Ludovic Courtès Suggested by Bruno Haible <bruno@clisp.org> in <https://bugs.gnu.org/41038>. * doc/guix.texi (Packages for C Development): New node. (Application Setup)[The GCC toolchain]: Empty and refer to it. 2020-05-04.guix-authorizations: Add bricewge to the committers.Ludovic Courtès * .guix-authorizations: Add fingerprint for bricewge. 2020-05-04gnu: Add gromacs.Vincent Legoll * gnu/packages/chemistry.scm (gromacs): New variable. * gnu/packages/patches/gromacs-tinyxml2.patch: New file... * gnu/local.mk (dist_patch_DATA): ...add it here. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2020-05-04gnu: Add lmfit.Vincent Legoll * gnu/packages/algebra.scm (lmfit): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2020-05-04gnu: Add tng.Vincent Legoll * gnu/packages/chemistry.scm (tng): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2020-05-04doc: Recommend against SHA1 OpenPGP signatures.Ludovic Courtès * doc/contributing.texi (Commit Access): Recommend against SHA1 signatures. 2020-05-04doc: Document committer authorization.Ludovic Courtès * doc/contributing.texi (Commit Access): Add instructions for authorizing committers. 2020-05-04openpgp: Raise error conditions instead of calling 'error'.Ludovic Courtès * guix/openpgp.scm (&openpgp-error, &openpgp-unrecognized-packet-error) (&openpgp-invalid-signature-error): New error conditions. (openpgp-hash-algorithm): Add 'signature-port' parameter. Raise an error condition instead of calling 'error'. (parse-subpackets): Likewise. (get-data): Raise instead of calling 'error'. (get-openpgp-detached-signature/ascii): Likewise. (get-signature): Likewise. 2020-05-04git-authenticate: Load the keyring from the repository.Ludovic Courtès * build-aux/git-authenticate.scm (load-keyring-from-blob) (load-keyring-from-reference): New procedures. (authenticate-commits): Add #:keyring-reference and use 'load-keyring-from-reference'. 2020-05-04git-authenticate: Load the list of authorized keys from the tree.Ludovic Courtès * build-aux/git-authenticate.scm (read-authorizations) (commit-authorized-keys): New procedures. (authenticate-commit): Use it instead of %AUTHORIZED-SIGNING-KEYS.