diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2021-04-16 14:39:48 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2021-04-16 14:39:48 +0300 |
commit | fcc39864dba82e14895afbe841091091366c96bc (patch) | |
tree | 6e0f05495fd6512051224dc85fd3ab495cbf1a24 /gnu/tests | |
parent | 76fc36d0a7215979bb74c05840f5a4de4ab5ea93 (diff) | |
parent | 44f9432705d04c069a8acf9e37e3ad856ac0bf82 (diff) | |
download | guix-fcc39864dba82e14895afbe841091091366c96bc.tar.gz |
Merge remote-tracking branch 'origin/master' into core-updates
Conflicts: gnu/local.mk gnu/packages/boost.scm gnu/packages/chez.scm gnu/packages/compression.scm gnu/packages/crates-io.scm gnu/packages/docbook.scm gnu/packages/engineering.scm gnu/packages/gcc.scm gnu/packages/gl.scm gnu/packages/gtk.scm gnu/packages/nettle.scm gnu/packages/python-check.scm gnu/packages/python-xyz.scm gnu/packages/radio.scm gnu/packages/rust.scm gnu/packages/sqlite.scm guix/build-system/node.scm
Diffstat (limited to 'gnu/tests')
-rw-r--r-- | gnu/tests/base.scm | 4 | ||||
-rw-r--r-- | gnu/tests/ci.scm | 128 | ||||
-rw-r--r-- | gnu/tests/databases.scm | 2 | ||||
-rw-r--r-- | gnu/tests/docker.scm | 3 | ||||
-rw-r--r-- | gnu/tests/file-sharing.scm | 271 | ||||
-rw-r--r-- | gnu/tests/guix.scm | 5 | ||||
-rw-r--r-- | gnu/tests/monitoring.scm | 7 | ||||
-rw-r--r-- | gnu/tests/networking.scm | 92 | ||||
-rw-r--r-- | gnu/tests/nfs.scm | 2 | ||||
-rw-r--r-- | gnu/tests/virtualization.scm | 11 | ||||
-rw-r--r-- | gnu/tests/web.scm | 7 |
11 files changed, 508 insertions, 24 deletions
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index e5f9b87b1d..9429a10b75 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -555,10 +555,6 @@ functionality tests.") (start-service 'term-tty1)) marionette) (marionette-type "root\n" marionette) - (wait-for-screen-text marionette - (lambda (text) - (string-contains text "root@komputilo")) - #:ocrad ocrad) ;; Start tmux and wait for it to be ready. (marionette-type "tmux new-session 'echo 1 > /ready; bash'\n" diff --git a/gnu/tests/ci.scm b/gnu/tests/ci.scm new file mode 100644 index 0000000000..a8b39fcd01 --- /dev/null +++ b/gnu/tests/ci.scm @@ -0,0 +1,128 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2017, 2018, 2019, 2020, 2021 Christopher Baines <mail@cbaines.net> +;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> +;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.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 ci) + #:use-module (gnu tests) + #:use-module (gnu system) + #:use-module (gnu system file-systems) + #:use-module (gnu system shadow) + #:use-module (gnu system vm) + #:use-module (gnu services) + #:use-module (gnu services ci) + #:use-module (gnu services web) + #:use-module (gnu services networking) + #:use-module (guix gexp) + #:use-module (guix store) + #:export (%test-laminar)) + + +(define %laminar-os + ;; Operating system under test. + (simple-operating-system + (service dhcp-client-service-type) + (service laminar-service-type))) + +(define* (run-laminar-test #:optional (http-port 8080)) + "Run tests in %LAMINAR-OS, which has laminar running and listening on +HTTP-PORT." + (define os + (marionette-operating-system + %laminar-os + #:imported-modules '((gnu services herd) + (guix combinators)))) + + (define vm + (virtual-machine + (operating-system os) + (port-forwardings `((,http-port . 8080))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-11) (srfi srfi-64) + (ice-9 match) + (gnu build marionette) + (web uri) + (web client) + (web response)) + + (define marionette + ;; Forward the guest's HTTP-PORT, where laminar is listening, to + ;; port 8080 in the host. + (make-marionette (list #$vm))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "laminar") + + (test-assert "service running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'laminar)) + marionette)) + + (define* (retry-on-error f #:key times delay) + (let loop ((attempt 1)) + (match (catch + #t + (lambda () + (cons #t + (f))) + (lambda args + (cons #f + args))) + ((#t . return-value) + return-value) + ((#f . error-args) + (if (>= attempt times) + error-args + (begin + (sleep delay) + (loop (+ 1 attempt)))))))) + + (test-equal "http-get" + 200 + (retry-on-error + (lambda () + (let-values (((response text) + (http-get #$(format + #f + "http://localhost:~A/" + http-port) + ;; TODO: Why does decoding fail? + #:decode-body? #f))) + (response-code response))) + #:times 10 + #:delay 5)) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "laminar-test" test)) + +(define %test-laminar + (system-test + (name "laminar") + (description "Connect to a running Laminar server.") + (value (run-laminar-test)))) diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm index 4bfe4ee282..c8d11e10c0 100644 --- a/gnu/tests/databases.scm +++ b/gnu/tests/databases.scm @@ -233,7 +233,7 @@ (let* ((port (open-pipe* OPEN_READ #$(file-append postgresql "/bin/psql") - "-tAh" "/var/run/postgresql" + "-tAh" "/tmp" "-c" "SELECT 1 FROM pg_database WHERE datname='root'")) (output (get-string-all port))) diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm index cbb856b016..92611b0a8d 100644 --- a/gnu/tests/docker.scm +++ b/gnu/tests/docker.scm @@ -303,5 +303,6 @@ docker-image} inside Docker.") (inherit (simple-operating-system)) ;; Use locales for a single libc to ;; reduce space requirements. - (locale-libcs (list glibc)))) + (locale-libcs (list glibc))) + #:memory-size 1024) run-docker-system-test))))) diff --git a/gnu/tests/file-sharing.scm b/gnu/tests/file-sharing.scm new file mode 100644 index 0000000000..9a8ee6a593 --- /dev/null +++ b/gnu/tests/file-sharing.scm @@ -0,0 +1,271 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2021 Simon South <simon@simonsouth.net> +;;; +;;; 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/>. + +;;; +;;; The Transmission Daemon service. +;;; + +(define-module (gnu tests file-sharing) + #:use-module (gnu packages bittorrent) + #:use-module (gnu services) + #:use-module (gnu services file-sharing) + #:use-module (gnu services networking) + #:use-module (gnu system vm) + #:use-module (gnu tests) + #:use-module (guix gexp) + #:export (%test-transmission-daemon)) + +(define %transmission-daemon-user "transmission") +(define %transmission-daemon-group "transmission") + +(define %transmission-daemon-config-dir "/var/lib/transmission-daemon") +(define %transmission-daemon-watch-dir + (string-append %transmission-daemon-config-dir "/watch")) +(define %transmission-daemon-incomplete-dir + (string-append %transmission-daemon-config-dir "/incomplete")) + +(define %transmission-daemon-settings-file + (string-append %transmission-daemon-config-dir "/settings.json")) + +(define %transmission-daemon-peer-port 51000) ; default is 51413 + +(define %transmission-daemon-rpc-port 9999) ; default is 9091 +(define %transmission-daemon-rpc-username "test-username") +(define %transmission-daemon-rpc-password "test-password") + +(define %transmission-daemon-test-configuration + (transmission-daemon-configuration + (incomplete-dir-enabled? #t) + (incomplete-dir %transmission-daemon-incomplete-dir) + + (watch-dir-enabled? #t) + (watch-dir %transmission-daemon-watch-dir) + + (peer-port-random-on-start? #f) + (peer-port %transmission-daemon-peer-port) + + (rpc-enabled? #t) + (rpc-port %transmission-daemon-rpc-port) + (rpc-whitelist-enabled? #f) + (rpc-authentication-required? #t) + (rpc-username %transmission-daemon-rpc-username) + (rpc-password (transmission-password-hash %transmission-daemon-rpc-password + "yEK0q3.X")))) + +(define (run-transmission-daemon-test) + (define os + (marionette-operating-system + (simple-operating-system + (service dhcp-client-service-type) + (service transmission-daemon-service-type + %transmission-daemon-test-configuration)) + #:imported-modules '((gnu services herd) + (json parser)) + #:requirements '(transmission-daemon))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (srfi srfi-64)) + + (define marionette + (make-marionette + (list #$(virtual-machine + (operating-system os) + (port-forwardings + `((9091 . ,%transmission-daemon-rpc-port))))))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "transmission-daemon") + + ;; Make sure the "transmission" user and group have been created. + (test-assert "\"transmission\" user exists" + (marionette-eval + '(begin + (getpwnam #$%transmission-daemon-user) + #t) + marionette)) + (test-assert "\"transmission\" group exists" + (marionette-eval + '(begin + (getgrnam #$%transmission-daemon-group) + #t) + marionette)) + + ;; Make sure Transmission Daemon's configuration directory has been + ;; created with the correct ownership and permissions. + (test-assert "configuration directory exists" + (marionette-eval + '(eq? (stat:type (stat #$%transmission-daemon-config-dir)) + 'directory) + marionette)) + (test-assert "configuration directory has correct ownership" + (marionette-eval + '(let ((config-dir (stat #$%transmission-daemon-config-dir)) + (transmission-user (getpwnam #$%transmission-daemon-user))) + (and (eqv? (stat:uid config-dir) + (passwd:uid transmission-user)) + (eqv? (stat:gid config-dir) + (passwd:gid transmission-user)))) + marionette)) + (test-assert "configuration directory has expected permissions" + (marionette-eval + '(eqv? (stat:perms (stat #$%transmission-daemon-config-dir)) + #o750) + marionette)) + + ;; Make sure the incomplete-downloads and watch directories have been + ;; created with the correct ownership and permissions. + (test-assert "incomplete-downloads directory exists" + (marionette-eval + '(eq? (stat:type (stat #$%transmission-daemon-incomplete-dir)) + 'directory) + marionette)) + (test-assert "incomplete-downloads directory has correct ownership" + (marionette-eval + '(let ((incomplete-dir + (stat #$%transmission-daemon-incomplete-dir)) + (transmission-user + (getpwnam #$%transmission-daemon-user))) + (and (eqv? (stat:uid incomplete-dir) + (passwd:uid transmission-user)) + (eqv? (stat:gid incomplete-dir) + (passwd:gid transmission-user)))) + marionette)) + (test-assert + "incomplete-downloads directory has expected permissions" + (marionette-eval + '(eqv? (stat:perms (stat #$%transmission-daemon-incomplete-dir)) + #o750) + marionette)) + + (test-assert "watch directory exists" + (marionette-eval + '(eq? (stat:type (stat #$%transmission-daemon-watch-dir)) + 'directory) + marionette)) + (test-assert "watch directory has correct ownership" + (marionette-eval + '(let ((watch-dir (stat #$%transmission-daemon-watch-dir)) + (transmission-user (getpwnam #$%transmission-daemon-user))) + (and (eqv? (stat:uid watch-dir) + (passwd:uid transmission-user)) + (eqv? (stat:gid watch-dir) + (passwd:gid transmission-user)))) + marionette)) + (test-assert "watch directory has expected permissions" + (marionette-eval + '(eqv? (stat:perms (stat #$%transmission-daemon-watch-dir)) + #o770) + marionette)) + + ;; Make sure the settings file has been created and appears valid. + (test-assert "settings file exists" + (marionette-eval + '(file-exists? #$%transmission-daemon-settings-file) + marionette)) + (test-assert "settings file is valid JSON" + (marionette-eval + '(begin + (use-modules (json parser)) + (with-input-from-file #$%transmission-daemon-settings-file + (lambda () + (json->scm))) + #t) + marionette)) + (test-assert "settings file contains a non-empty JSON object" + (marionette-eval + '(begin + (use-modules (json parser) + (srfi srfi-1)) + (let ((settings (with-input-from-file + #$%transmission-daemon-settings-file + (lambda () + (json->scm))))) + (and (list? settings) + (not (null? settings)) + (every pair? settings)))) + marionette)) + + ;; Make sure Transmission Daemon is running. + (test-assert "transmission-daemon is running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (live-service-running + (find (lambda (live-service) + (memq 'transmission-daemon + (live-service-provision live-service))) + (current-services)))) + marionette)) + + ;; Make sure the daemon is listening for peer connections. + (test-assert "transmission-daemon is listening for peers" + (wait-for-tcp-port #$%transmission-daemon-peer-port marionette)) + + ;; Make sure the daemon is listening for RPC-client connections. + (test-assert "transmission-daemon is listening for RPC clients" + (wait-for-tcp-port #$%transmission-daemon-rpc-port marionette)) + + ;; Make sure the RPC-authentication settings are honored. + (test-assert "transmission-daemon requires RPC authentication" + (let ((transmission-remote + (string-append #+transmission "/bin/transmission-remote"))) + (with-error-to-port (%make-void-port "w") + (lambda () + (not (zero? (system* transmission-remote + "--session-info"))))))) + (test-assert "transmission-daemon rejects incorrect RPC credentials" + (let ((transmission-remote + (string-append #+transmission "/bin/transmission-remote")) + (wrong-auth-string + (string-append #$%transmission-daemon-rpc-username + ":" + "wrong-" + #$%transmission-daemon-rpc-password))) + (with-error-to-port (%make-void-port "w") + (lambda () + (not (zero? (system* transmission-remote + "--auth" wrong-auth-string + "--session-info"))))))) + (test-assert "transmission-daemon accepts correct RPC credentials" + (let ((transmission-remote + (string-append #+transmission "/bin/transmission-remote")) + (auth-string + (string-append #$%transmission-daemon-rpc-username + ":" + #$%transmission-daemon-rpc-password))) + (with-output-to-port (%make-void-port "w") + (lambda () + (zero? (system* transmission-remote + "--auth" auth-string + "--session-info")))))) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "transmission-daemon-test" test)) + +(define %test-transmission-daemon + (system-test + (name "transmission-daemon") + (description "Test a running Transmission Daemon service.") + (value (run-transmission-daemon-test)))) diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm index 219b8b482f..af7d8f0b21 100644 --- a/gnu/tests/guix.scm +++ b/gnu/tests/guix.scm @@ -164,10 +164,7 @@ " local all all trust host all all 127.0.0.1/32 trust -host all all ::1/128 trust")) - ;; XXX: Remove when postgresql default socket directory is - ;; changed to /var/run/postgresql. - (socket-directory #f))))) +host all all ::1/128 trust")))))) (service guix-data-service-type (guix-data-service-configuration (host "0.0.0.0"))) diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm index be69e1c259..8630f5818c 100644 --- a/gnu/tests/monitoring.scm +++ b/gnu/tests/monitoring.scm @@ -309,12 +309,7 @@ zabbix||{} (service dhcp-client-service-type) (service postgresql-service-type (postgresql-configuration - (postgresql postgresql) - ;; XXX: Remove when postgresql default socket directory is - ;; changed to /var/run/postgresql. - (config-file - (postgresql-config-file - (socket-directory #f))))) + (postgresql postgresql))) (service zabbix-front-end-service-type (zabbix-front-end-configuration (db-password "zabbix"))) diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm index 022663aa67..453e63f52d 100644 --- a/gnu/tests/networking.scm +++ b/gnu/tests/networking.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2017, 2020 Marius Bakke <marius@gnu.org> ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be> ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,12 +30,15 @@ #:use-module (guix gexp) #:use-module (guix store) #:use-module (guix monads) + #:use-module (guix modules) #:use-module (gnu packages bash) #:use-module (gnu packages linux) #:use-module (gnu packages networking) + #:use-module (gnu packages guile) #:use-module (gnu services shepherd) #:use-module (ice-9 match) - #:export (%test-inetd %test-openvswitch %test-dhcpd %test-tor %test-iptables)) + #:export (%test-inetd %test-openvswitch %test-dhcpd %test-tor %test-iptables + %test-ipfs)) (define %inetd-os ;; Operating system with 2 inetd services. @@ -563,3 +567,89 @@ COMMIT (name "iptables") (description "Test a running iptables daemon.") (value (run-iptables-test)))) + + +;;; +;;; IPFS service +;;; + +(define %ipfs-os + (simple-operating-system + (service ipfs-service-type))) + +(define (run-ipfs-test) + (define os + (marionette-operating-system %ipfs-os + #:imported-modules (source-module-closure + '((gnu services herd) + (guix ipfs))) + #:extensions (list guile-json-4) + #:requirements '(ipfs))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (rnrs bytevectors) + (srfi srfi-64) + (ice-9 binary-ports)) + + (define marionette + (make-marionette (list #$(virtual-machine os)))) + + (define (ipfs-is-alive?) + (marionette-eval + '(begin + (use-modules (gnu services herd) + (srfi srfi-1)) + (live-service-running + (find (lambda (live) + (memq 'ipfs + (live-service-provision live))) + (current-services)))) + marionette)) + + ;; The default API endpoint port 5001 is used, + ;; so there is no need to parameterize %ipfs-base-url. + (define (add-data data) + (marionette-eval `(content-name (add-data ,data)) marionette)) + (define (read-contents object) + (marionette-eval + `(let* ((input (read-contents ,object)) + (all-input (get-bytevector-all input))) + (close-port input) + all-input) + marionette)) + + (marionette-eval '(use-modules (guix ipfs)) marionette) + (mkdir #$output) + (chdir #$output) + + (test-begin "ipfs") + + ;; Test the IPFS service. + + (test-assert "ipfs is alive" (ipfs-is-alive?)) + + (test-assert "ipfs is listening on the gateway" + (let ((default-port 8082)) + (wait-for-tcp-port default-port marionette))) + + (test-assert "ipfs is listening on the API endpoint" + (let ((default-port 5001)) + (wait-for-tcp-port default-port marionette))) + + (define test-bv (string->utf8 "hello ipfs!")) + (test-equal "can upload and download a file to/from ipfs" + test-bv + (read-contents (add-data test-bv))) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + (gexp->derivation "ipfs-test" test)) + +(define %test-ipfs + (system-test + (name "ipfs") + (description "Test a running IPFS daemon configuration.") + (value (run-ipfs-test)))) diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm index 5d04af38fb..9b2b785176 100644 --- a/gnu/tests/nfs.scm +++ b/gnu/tests/nfs.scm @@ -410,5 +410,5 @@ directories can be mounted.") (system-test (name "nfs-root-fs") (description "Test that an NFS server can be started and the exported -directory can be used as root filesystem.") +directory can be used as root file system.") (value (run-nfs-root-fs-test)))) diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm index e95787ee19..9f9d3a5e26 100644 --- a/gnu/tests/virtualization.scm +++ b/gnu/tests/virtualization.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net> ;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -92,10 +93,20 @@ 0 (marionette-eval `(begin + (chdir "/tmp") (system* ,(string-append #$libvirt "/bin/virsh") "-c" "qemu:///system" "version")) marionette)) + (test-eq "connect" + 0 + (marionette-eval + `(begin + (chdir "/tmp") + (system* ,(string-append #$libvirt "/bin/virsh") + "-c" "qemu:///system" "connect")) + marionette)) + (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm index cc0e79c8b2..7f4518acd2 100644 --- a/gnu/tests/web.scm +++ b/gnu/tests/web.scm @@ -569,12 +569,7 @@ HTTP-PORT." (listen '("8080")))))) (service postgresql-service-type (postgresql-configuration - (postgresql postgresql-10) - ;; XXX: Remove when postgresql default socket directory is - ;; changed to /var/run/postgresql. - (config-file - (postgresql-config-file - (socket-directory #f))))) + (postgresql postgresql-10))) (service patchwork-service-type (patchwork-configuration (patchwork patchwork) |