summary refs log tree commit diff
path: root/gnu/tests
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2019-02-06 13:03:26 +0100
committerRicardo Wurmus <rekado@elephly.net>2019-02-06 13:03:26 +0100
commitba88eea2b3a8a33ecd7fc0ec64e3917c6c2fe21d (patch)
tree75c68e44d3d76440f416552711b1a47ec83e411e /gnu/tests
parentf380f9d55e6757c242acf6c71c4a3ccfcdb066b2 (diff)
parent4aeb7f34c948f32363f2ae29c6942c6328df758c (diff)
downloadguix-ba88eea2b3a8a33ecd7fc0ec64e3917c6c2fe21d.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu/tests')
-rw-r--r--gnu/tests/base.scm8
-rw-r--r--gnu/tests/docker.scm168
-rw-r--r--gnu/tests/install.scm7
-rw-r--r--gnu/tests/messaging.scm54
-rw-r--r--gnu/tests/monitoring.scm5
-rw-r--r--gnu/tests/networking.scm2
6 files changed, 232 insertions, 12 deletions
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 8d4e218a8f..0f8fb7f456 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -627,7 +627,8 @@ non-ASCII names from /tmp.")
         (job3 #~(job next-second-from             ;to test $PATH
                      "touch witness-touch")))
     (simple-operating-system
-     (mcron-service (list job1 job2 job3)))))
+     (service mcron-service-type
+              (mcron-configuration (jobs (list job1 job2 job3)))))))
 
 (define (run-mcron-test name)
   (define os
@@ -705,7 +706,8 @@ non-ASCII names from /tmp.")
   (operating-system
     (inherit %simple-os)
     (name-service-switch %mdns-host-lookup-nss)
-    (services (cons* (avahi-service #:debug? #t)
+    (services (cons* (service avahi-service-type
+                              (avahi-configuration (debug? #t)))
                      (dbus-service)
                      (service dhcp-client-service-type) ;needed for multicast
 
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
new file mode 100644
index 0000000000..25e172efae
--- /dev/null
+++ b/gnu/tests/docker.scm
@@ -0,0 +1,168 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Danny Milosavljevic <dannym@scratchpost.org>
+;;;
+;;; 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 docker)
+  #:use-module (gnu tests)
+  #:use-module (gnu system)
+  #:use-module (gnu system file-systems)
+  #:use-module (gnu system vm)
+  #:use-module (gnu services)
+  #:use-module (gnu services dbus)
+  #:use-module (gnu services networking)
+  #:use-module (gnu services docker)
+  #:use-module (gnu services desktop)
+  #:use-module (gnu packages bootstrap) ; %bootstrap-guile
+  #:use-module (gnu packages docker)
+  #:use-module (guix gexp)
+  #:use-module (guix grafts)
+  #:use-module (guix monads)
+  #:use-module (guix packages)
+  #:use-module (guix profiles)
+  #:use-module (guix scripts pack)
+  #:use-module (guix store)
+  #:use-module (guix tests)
+  #:use-module (guix build-system trivial)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:export (%test-docker))
+
+(define %docker-os
+  (simple-operating-system
+   (service dhcp-client-service-type)
+   (dbus-service)
+   (polkit-service)
+   (service elogind-service-type)
+   (service docker-service-type)))
+
+(define (run-docker-test docker-tarball)
+  "Load DOCKER-TARBALL as Docker image and run it in a Docker container,
+inside %DOCKER-OS."
+  (define os
+    (marionette-operating-system
+     %docker-os
+     #:imported-modules '((gnu services herd)
+                          (guix combinators))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (memory-size 700)
+     (disk-image-size (* 1500 (expt 2 20)))
+     (port-forwardings '())))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11) (srfi srfi-64)
+                       (gnu build marionette))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "docker")
+
+          (test-assert "service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'dockerd)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-eq "fetch version"
+            0
+            (marionette-eval
+             `(begin
+                (system* ,(string-append #$docker-cli "/bin/docker")
+                         "version"))
+             marionette))
+
+          (test-equal "Load docker image and run it"
+            "hello world"
+            (marionette-eval
+             `(begin
+                (define slurp
+                  (lambda args
+                    (let* ((port (apply open-pipe* OPEN_READ args))
+                           (output (read-line port))
+                           (status (close-pipe port)))
+                      output)))
+                (let* ((raw-line (slurp ,(string-append #$docker-cli
+                                                        "/bin/docker")
+                                                        "load" "-i"
+                                                        ,#$docker-tarball))
+                       (repository&tag (string-drop raw-line
+                                                    (string-length
+                                                     "Loaded image: ")))
+                       (response (slurp
+                                  ,(string-append #$docker-cli "/bin/docker")
+                                  "run" "--entrypoint" "bin/Guile"
+                                  repository&tag
+                                  "/aa.scm")))
+                  response))
+             marionette))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "docker-test" test))
+
+(define (build-tarball&run-docker-test)
+  (mlet* %store-monad
+      ((_ (set-grafting #f))
+       (guile (set-guile-for-build (default-guile)))
+       (guest-script-package ->
+        (package
+          (name "guest-script")
+          (version "0")
+          (source #f)
+          (build-system trivial-build-system)
+          (arguments `(#:guile ,%bootstrap-guile
+                       #:builder
+                       (let ((out (assoc-ref %outputs "out")))
+                         (mkdir out)
+                         (call-with-output-file (string-append out "/a.scm")
+                           (lambda (port)
+                             (display "(display \"hello world\n\")" port)))
+                         #t)))
+          (synopsis "Display hello world using Guile")
+          (description "This package displays the text \"hello world\" on the
+standard output device and then enters a new line.")
+          (home-page #f)
+          (license license:public-domain)))
+       (profile (profile-derivation (packages->manifest
+                                     (list %bootstrap-guile
+                                           guest-script-package))
+                                    #:hooks '()
+                                    #:locales? #f))
+       (tarball (docker-image "docker-pack" profile
+                              #:symlinks '(("/bin/Guile" -> "bin/guile")
+                                           ("aa.scm" -> "a.scm"))
+                              #:localstatedir? #t)))
+    (run-docker-test tarball)))
+
+(define %test-docker
+  (system-test
+   (name "docker")
+   (description "Test Docker container of Guix.")
+   (value (build-tarball&run-docker-test))))
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 72e5523942..ec29064118 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -42,7 +42,7 @@
             %test-separate-store-os
             %test-separate-home-os
             %test-raid-root-os
-            %test-encrypted-os
+            %test-encrypted-root-os
             %test-btrfs-root-os))
 
 ;;; Commentary:
@@ -430,7 +430,6 @@ reboot\n")
                            (type "ext4"))
                          (file-system
                            (device "none")
-                           (type "tmpfs")
                            (mount-point "/home")
                            (type "tmpfs"))
                          %base-file-systems))
@@ -735,7 +734,7 @@ to enter the LUKS passphrase."
                                                "/post-initrd-passphrase.ppm")
                                 #$marionette))))))
 
-(define %test-encrypted-os
+(define %test-encrypted-root-os
   (system-test
    (name "encrypted-root-os")
    (description
diff --git a/gnu/tests/messaging.scm b/gnu/tests/messaging.scm
index 36afb987af..176e3d08cb 100644
--- a/gnu/tests/messaging.scm
+++ b/gnu/tests/messaging.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,7 +30,8 @@
   #:use-module (guix store)
   #:use-module (guix modules)
   #:export (%test-prosody
-            %test-bitlbee))
+            %test-bitlbee
+            %test-quassel))
 
 (define (run-xmpp-test name xmpp-service pid-file create-account)
   "Run a test of an OS running XMPP-SERVICE, which writes its PID to PID-FILE."
@@ -239,3 +241,53 @@
    (name "bitlbee")
    (description "Connect to a BitlBee IRC server.")
    (value (run-bitlbee-test))))
+
+(define (run-quassel-test)
+  (define os
+    (marionette-operating-system
+      (simple-operating-system (service dhcp-client-service-type)
+                               (service quassel-service-type))
+     #:imported-modules (source-module-closure
+                         '((gnu services herd)))))
+
+  (define vm
+    (virtual-machine
+      (operating-system os)
+      (port-forwardings `((4242 . 4242)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-64)
+                       (gnu build marionette))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "quassel")
+
+          (test-assert "service started"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (start-service 'quassel))
+             marionette))
+
+          (test-assert "certificate file"
+            (marionette-eval
+              '(file-exists? "/var/lib/quassel/quasselCert.pem")
+              marionette))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "quassel-test" test))
+
+(define %test-quassel
+  (system-test
+   (name "quassel")
+   (description "Connect to a quassel IRC server.")
+   (value (run-quassel-test))))
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
index ab72682aed..14d989d79a 100644
--- a/gnu/tests/monitoring.scm
+++ b/gnu/tests/monitoring.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Gábor Boskovits  <boskovits@gmail.com>
-;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2018, 2019 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -307,8 +307,7 @@ zabbix||{}
 
           (service php-fpm-service-type
                    (php-fpm-configuration
-                    (timezone "Europe/Paris")
-                    (php php-with-bcmath)))
+                    (timezone "Europe/Paris")))
 
           (service zabbix-server-service-type
                    (zabbix-server-configuration
diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm
index 9f12a4ae8d..a97b29bc4b 100644
--- a/gnu/tests/networking.scm
+++ b/gnu/tests/networking.scm
@@ -351,7 +351,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
 
 (define %tor-os
   (simple-operating-system
-   (tor-service)))
+   (service tor-service-type)))
 
 (define %tor-os/unix-socks-socket
   (simple-operating-system