summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/tests/nfs.scm72
1 files changed, 56 insertions, 16 deletions
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index ee8e3ad000..da729ddcc9 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -273,11 +273,15 @@ directories can be mounted.")
        (inherit %nfs-os)
        (services
          (modify-services (operating-system-user-services %nfs-os)
-           (nfs-service-type
-            config
-            =>
+           (nfs-service-type config =>
             (nfs-configuration
              (debug '(nfs nfsd mountd))
+             ;;; Note: Adding the following line causes Guix to hang.
+             ;(rpcmountd-port 20001)
+             ;;; Note: Adding the following line causes Guix to hang.
+             ;(rpcstatd-port 20002) ; FIXME: Set broadcast port AND listening port.
+             (nfsd-port 2049)
+             (nfs-versions '("4.2"))
              (exports '(("/export"
                          "*(rw,insecure,no_subtree_check,crossmnt,fsid=root,no_root_squash,insecure,async)"))))))))
      #:requirements '(nscd)
@@ -287,14 +291,14 @@ directories can be mounted.")
   (define nfs-root-client-os
     (marionette-operating-system
      (operating-system
-       (inherit %nfs-os)
+       (inherit (simple-operating-system (service dhcp-client-service-type)))
        (kernel-arguments '("ip=dhcp"))
        (file-systems (cons
                       (file-system
                         (type "nfs")
                         (mount-point "/")
                         (device ":/export")
-                        (options "addr=0.0.0.0,vers=4.2"))
+                        (options "addr=127.0.0.1,vers=4.2"))
                      %base-file-systems)))
      #:requirements '(nscd)
      #:imported-modules '((gnu services herd)
@@ -306,24 +310,34 @@ directories can be mounted.")
           (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-boot-test")
+
+          ;;; Start up NFS server host.
+
+          (mkdir "/tmp/server")
+          (define server-marionette
+            (make-marionette (list #$(virtual-machine
+                                      nfs-root-server-os
+                                      ;(operating-system nfs-root-server-os)
+                                      ;(port-forwardings '( ; (111 . 111)
+                                      ;                    (2049 . 2049)
+                                      ;                    (20001 . 20001)
+                                      ;                    (20002 . 20002)))
+))
+                             #:socket-directory "/tmp/server"))
+
           (marionette-eval
            '(begin
               (use-modules (gnu services herd))
               (current-output-port
                (open-file "/dev/console" "w0"))
               ;; FIXME: Instead statfs "/" and "/export" and wait until they
-              ;; are different file systems.
-              (sleep 10)
+              ;; are different file systems.  But Guile doesn't seem to have
+              ;; statfs.
+              (sleep 5)
               (chmod "/export" #o777)
               (symlink "/gnu" "/export/gnu")
               (start-service 'nscd)
@@ -331,10 +345,34 @@ directories can be mounted.")
               (start-service 'nfs))
            server-marionette)
 
-          ;; Wait for the NFS services to be up and running.
+          ;;; 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-assert "NFS port is ready"
+            (wait-for-tcp-port 2049 server-marionette))
+
+          (test-assert "NFS statd port is ready"
+            (wait-for-tcp-port 20002 server-marionette))
+
+          (test-assert "NFS mountd port is ready"
+            (wait-for-tcp-port 20001 server-marionette))
+
+          ;;; FIXME: (test-assert "NFS portmapper port is ready"
+          ;;; FIXME:  (wait-for-tcp-port 111 server-marionette))
+
+          ;;; Start up NFS client host.
+
+          (define client-marionette
+            (make-marionette (list #$(virtual-machine
+                                      nfs-root-client-os
+                                      ;(port-forwardings '((111 . 111)
+                                      ;                    (2049 . 2049)
+                                      ;                    (20001 . 20001)
+                                      ;                    (20002 . 20002)))
+                                                          ))))
+
           (marionette-eval
            '(begin
               (use-modules (gnu services herd))
@@ -352,6 +390,8 @@ directories can be mounted.")
 
           (test-assert "nfs-root-client booted")
 
+          ;;; Check whether NFS client host communicated with NFS server host.
+
           (test-assert "nfs client deposited file"
            (wait-for-file "/export/mounts" server-marionette))
           (marionette-eval
@@ -369,6 +409,6 @@ directories can be mounted.")
 (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.")
+   (description "Test that an NFS server can be started and the exported
+directory can be used as root filesystem.")
    (value (run-nfs-root-fs-test))))