From 7d8a4eeacc534c8742e0b22d855aa73e5ab66b7f Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Thu, 10 Jan 2019 03:44:20 +0100 Subject: tests: Add Docker system test. * gnu/tests/docker.scm: New file. --- gnu/tests/docker.scm | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 gnu/tests/docker.scm (limited to 'gnu/tests/docker.scm') diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm new file mode 100644 index 00000000000..4d21324294a --- /dev/null +++ b/gnu/tests/docker.scm @@ -0,0 +1,95 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Christopher Baines +;;; +;;; 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 . + +(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 packages docker) + #:use-module (guix gexp) + #:use-module (guix store) + #:export (%test-docker)) + +(define %docker-os + (simple-operating-system + (service dhcp-client-service-type) + (dbus-service) + (polkit-service) + (service docker-service-type))) + +(define (run-docker-test) + "Run tests in %DOCKER-OS." + (define os + (marionette-operating-system + %docker-os + #:imported-modules '((gnu services herd) + (guix combinators)))) + + (define vm + (virtual-machine + (operating-system os) + (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-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "docker-test" test)) + +(define %test-docker + (system-test + (name "docker") + (description "Connect to the running Docker service.") + (value (run-docker-test)))) -- cgit v1.3 From dc4b4a38fa2577d4dd01f80b4bc8c9255304e576 Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Thu, 10 Jan 2019 05:10:03 +0100 Subject: tests: docker: Fix test. * gnu/tests/docker.scm (run-docker-test): Set memory and disk size. (%docker-os): Add elogind service. --- gnu/tests/docker.scm | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gnu/tests/docker.scm') diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm index 4d21324294a..973a84c5587 100644 --- a/gnu/tests/docker.scm +++ b/gnu/tests/docker.scm @@ -25,6 +25,7 @@ #:use-module (gnu services dbus) #:use-module (gnu services networking) #:use-module (gnu services docker) + #:use-module (gnu services desktop) #:use-module (gnu packages docker) #:use-module (guix gexp) #:use-module (guix store) @@ -35,6 +36,7 @@ (service dhcp-client-service-type) (dbus-service) (polkit-service) + (service elogind-service-type) (service docker-service-type))) (define (run-docker-test) @@ -48,6 +50,8 @@ (define vm (virtual-machine (operating-system os) + (memory-size 500) + (disk-image-size (* 250 (expt 2 20))) (port-forwardings '()))) (define test -- cgit v1.3 From babfd9447df08a809622238b4830eb046dab2ba6 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 10 Jan 2019 23:30:43 +0100 Subject: tests: Nitpick on Docker test. This is a followup to 7d8a4eeacc534c8742e0b22d855aa73e5ab66b7f. * gnu/local.mk (GNU_SYSTEM_MODULES): Add gnu/tests/docker.scm. * gnu/tests/docker.scm: Update copyright line. --- gnu/local.mk | 3 ++- gnu/tests/docker.scm | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'gnu/tests/docker.scm') diff --git a/gnu/local.mk b/gnu/local.mk index 7c319b727fe..306cfa3a628 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès +# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès # Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Andreas Enge # Copyright © 2016 Mathieu Lirzin # Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Mark H Weaver @@ -542,6 +542,7 @@ GNU_SYSTEM_MODULES = \ %D%/tests/databases.scm \ %D%/tests/desktop.scm \ %D%/tests/dict.scm \ + %D%/tests/docker.scm \ %D%/tests/monitoring.scm \ %D%/tests/nfs.scm \ %D%/tests/install.scm \ diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm index 973a84c5587..453ed4893d9 100644 --- a/gnu/tests/docker.scm +++ b/gnu/tests/docker.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Christopher Baines +;;; Copyright © 2019 Danny Milosavljevic ;;; ;;; This file is part of GNU Guix. ;;; -- cgit v1.3 From 49ec5d88c5770ae49b45849cb691c8921ecf4ca7 Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Mon, 14 Jan 2019 15:44:16 +0100 Subject: tests: docker: Run a guest guile inside the docker container. * gnu/tests/docker.scm (run-docker-test): Add parameters. Load and run docker container. Check response of guest guile. (build-tarball&run-docker-test): New procedure. (%test-docker): Use it. [description]: Modify. --- gnu/tests/docker.scm | 73 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 6 deletions(-) (limited to 'gnu/tests/docker.scm') diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm index 453ed4893d9..f69b2985e10 100644 --- a/gnu/tests/docker.scm +++ b/gnu/tests/docker.scm @@ -26,9 +26,17 @@ #: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) #:export (%test-docker)) (define %docker-os @@ -39,8 +47,9 @@ (service elogind-service-type) (service docker-service-type))) -(define (run-docker-test) - "Run tests in %DOCKER-OS." +(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 @@ -50,8 +59,8 @@ (define vm (virtual-machine (operating-system os) - (memory-size 500) - (disk-image-size (* 250 (expt 2 20))) + (memory-size 700) + (disk-image-size (* 1500 (expt 2 20))) (port-forwardings '()))) (define test @@ -87,13 +96,65 @@ "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 -> + (dummy-package "guest-script" + (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))))) + (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 "Connect to the running Docker service.") - (value (run-docker-test)))) + (description "Test Docker container of Guix.") + (value (build-tarball&run-docker-test)))) -- cgit v1.3 From 69e47686c9a8a2b5c4ee33e5b14da657de3d7ca0 Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Fri, 18 Jan 2019 18:12:15 +0100 Subject: tests: docker: Use "package" instead of "dummy-package". * gnu/tests/docker.scm (build-tarball&run-docker-test): Use "package" instead of "dummy-package". --- gnu/tests/docker.scm | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'gnu/tests/docker.scm') diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm index f69b2985e10..25e172efae3 100644 --- a/gnu/tests/docker.scm +++ b/gnu/tests/docker.scm @@ -37,6 +37,7 @@ #: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 @@ -131,17 +132,24 @@ inside %DOCKER-OS." ((_ (set-grafting #f)) (guile (set-guile-for-build (default-guile))) (guest-script-package -> - (dummy-package "guest-script" - (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))))) + (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)) -- cgit v1.3