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.
This commit is contained in:
parent
0c1bc5ecbe
commit
49ec5d88c5
1 changed files with 67 additions and 6 deletions
|
@ -26,9 +26,17 @@
|
||||||
#:use-module (gnu services networking)
|
#:use-module (gnu services networking)
|
||||||
#:use-module (gnu services docker)
|
#:use-module (gnu services docker)
|
||||||
#:use-module (gnu services desktop)
|
#:use-module (gnu services desktop)
|
||||||
|
#:use-module (gnu packages bootstrap) ; %bootstrap-guile
|
||||||
#:use-module (gnu packages docker)
|
#:use-module (gnu packages docker)
|
||||||
#:use-module (guix gexp)
|
#: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 store)
|
||||||
|
#:use-module (guix tests)
|
||||||
|
#:use-module (guix build-system trivial)
|
||||||
#:export (%test-docker))
|
#:export (%test-docker))
|
||||||
|
|
||||||
(define %docker-os
|
(define %docker-os
|
||||||
|
@ -39,8 +47,9 @@
|
||||||
(service elogind-service-type)
|
(service elogind-service-type)
|
||||||
(service docker-service-type)))
|
(service docker-service-type)))
|
||||||
|
|
||||||
(define (run-docker-test)
|
(define (run-docker-test docker-tarball)
|
||||||
"Run tests in %DOCKER-OS."
|
"Load DOCKER-TARBALL as Docker image and run it in a Docker container,
|
||||||
|
inside %DOCKER-OS."
|
||||||
(define os
|
(define os
|
||||||
(marionette-operating-system
|
(marionette-operating-system
|
||||||
%docker-os
|
%docker-os
|
||||||
|
@ -50,8 +59,8 @@
|
||||||
(define vm
|
(define vm
|
||||||
(virtual-machine
|
(virtual-machine
|
||||||
(operating-system os)
|
(operating-system os)
|
||||||
(memory-size 500)
|
(memory-size 700)
|
||||||
(disk-image-size (* 250 (expt 2 20)))
|
(disk-image-size (* 1500 (expt 2 20)))
|
||||||
(port-forwardings '())))
|
(port-forwardings '())))
|
||||||
|
|
||||||
(define test
|
(define test
|
||||||
|
@ -87,13 +96,65 @@
|
||||||
"version"))
|
"version"))
|
||||||
marionette))
|
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)
|
(test-end)
|
||||||
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
|
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
|
||||||
|
|
||||||
(gexp->derivation "docker-test" test))
|
(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
|
(define %test-docker
|
||||||
(system-test
|
(system-test
|
||||||
(name "docker")
|
(name "docker")
|
||||||
(description "Connect to the running Docker service.")
|
(description "Test Docker container of Guix.")
|
||||||
(value (run-docker-test))))
|
(value (build-tarball&run-docker-test))))
|
||||||
|
|
Reference in a new issue