diff options
-rw-r--r-- | gnu/tests/nfs.scm | 103 |
1 files changed, 102 insertions, 1 deletions
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm index 5e4de2783b..f6328415d3 100644 --- a/gnu/tests/nfs.scm +++ b/gnu/tests/nfs.scm @@ -39,7 +39,8 @@ #:use-module (guix store) #:use-module (guix monads) #:export (%test-nfs - %test-nfs-server)) + %test-nfs-server + %test-nfs-root-fs)) (define %base-os (operating-system @@ -262,3 +263,103 @@ (description "Test that an NFS server can be started and exported directories can be mounted.") (value (run-nfs-server-test)))) + +(define (run-nfs-root-fs-test) + "Run a test of an OS mounting its root file system via NFS." + (define nfs-root-server-os + (marionette-operating-system + (operating-system + (inherit %nfs-os) + (file-systems %base-file-systems) + (services + (modify-services (operating-system-user-services %nfs-os) + (nfs-service-type + config + => + (nfs-configuration + (debug '(nfs nfsd mountd)) + (exports '(("/export" + "*(rw,insecure,no_subtree_check,crossmnt,fsid=root,no_root_squash,insecure,async)")))))))) + #:requirements '(nscd) + #:imported-modules '((gnu services herd) + (guix combinators)))) + + (define nfs-root-client-os + (marionette-operating-system + (operating-system + (inherit %nfs-os) + (kernel-arguments '("ip=dhcp")) + (file-systems (cons + (file-system + (type "nfs") + (mount-point "/") + (device ":/export") + (options "addr=0.0.0.0,vers=4.2")) + %base-file-systems))) + #:requirements '(nscd) + #:imported-modules '((gnu services herd) + (guix combinators)))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (srfi srfi-64)) + + (mkdir "/tmp/server") + (define server-marionette + (make-marionette (list #$(virtual-machine nfs-root-server-os)) #:socket-directory "/tmp/server")) + (define client-marionette + (make-marionette (list #$(virtual-machine nfs-root-client-os)))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "start-nfs-root-server") + (marionette-eval + '(begin + (use-modules (gnu services herd)) + + (current-output-port + (open-file "/dev/console" "w0")) + (chmod "/export" #o777) + (symlink "/gnu" "/export/gnu") + (start-service 'nscd) + (start-service 'networking) + (start-service 'nfs)) + server-marionette) + + ;; Wait for the NFS services to be up and running. + (test-assert "nfs services are running" + (wait-for-file "/var/run/rpc.statd.pid" server-marionette)) + + (test-begin "boot-nfs-root-client") + (marionette-eval + '(begin + (use-modules (gnu services herd)) + + (current-output-port + (open-file "/dev/console" "w0")) + (with-output-to-file "/var/run/mounts" + (lambda () (system* "mount"))) + (chmod "/var/run/mounts" #o777)) + client-marionette) + + (test-assert "nfs-root-client booted") + (marionette-eval + '(begin + (and (file-exists? "/export/var/run/mounts") + (system* "cat" "/export/var/run/mounts"))) + server-marionette) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "nfs-server-test" test)) + +(define %test-nfs-root-fs + (system-test + (name "nfs-root-fs") + (description "Test that an NFS server can be started and exported +directories can be mounted.") + (value (run-nfs-root-fs-test)))) |