diff --git a/nixos/modules/tests/exercise-storage.py b/nixos/modules/tests/exercise-storage.py
index 88cd34bb73102ddbeb6178bfe13e8ed202a8be6e..e3a1d4d2ec7674042487cc0c6dabc670fcd6561d 100755
--- a/nixos/modules/tests/exercise-storage.py
+++ b/nixos/modules/tests/exercise-storage.py
@@ -10,6 +10,8 @@ from sys import argv
 from os import urandom
 from subprocess import check_output
 from io import BytesIO
+from time import sleep, ctime
+from pprint import pprint
 
 import requests
 import hyperlink
@@ -21,10 +23,45 @@ def main():
 
     api_root = get_api_root(clientDir)
 
+    block_until_connected(api_root)
+
     subject_cap = exercise_immutable(api_root, someData)
     newDir = exercise_mkdir(api_root)
     exercise_link_unlink(api_root, newDir, subject_cap)
 
+def block_until_connected(api_root):
+    """
+    Block until the Tahoe-LAFS node at the given API root reports it has
+    connected to at least one storage server.
+    """
+    while True:
+        response = requests.get(
+            api_root.replace(query={u"t": u"json"}),
+        )
+        response.raise_for_status()
+        welcome = response.json()
+        servers = welcome["servers"]
+        connected = list(
+            server
+            for server
+            in servers
+            if server["connection_status"].startswith("Connected to ")
+        )
+        if len(connected) >= 1:
+            print(
+                "Connected to a server:\n"
+                "\t{nodeid}\n"
+                "\t{status}\n"
+                "\t{last_received_data}\n".format(
+                    nodeid=connected[0]["nodeid"],
+                    status=connected[0]["connection_status"],
+                    last_received_data=ctime(connected[0]["last_received_data"]),
+                ),
+            )
+            return
+        pprint(welcome)
+        sleep(0.1)
+
 def exercise_immutable(api_root, someData):
     cap = tahoe_put(api_root, someData)
     dataReadBack = tahoe_get(api_root, cap)
diff --git a/nixos/modules/tests/private-storage.nix b/nixos/modules/tests/private-storage.nix
index 47acfbf475a5d029b5f2800d4a11e2ff18eaa9d2..2542802eccf829748d5ae10043e3e87d5ed133fe 100644
--- a/nixos/modules/tests/private-storage.nix
+++ b/nixos/modules/tests/private-storage.nix
@@ -266,5 +266,25 @@ import <nixpkgs/nixos/tests/make-test.nix> {
         $client->log($log);
         die $@;
       };
-      '';
-}
+
+      # It should be possible to restart the storage service.  Do so and
+      # ensure the client can still access it afterwards.
+      eval {
+        ${runOnNode "storage" [ "systemctl" "restart" "tahoe.storage" ]}
+      } or do {
+        my $error = $@ || 'Unknown failure';
+        my ($code, $log) = $storage->execute('cat /tmp/stdout /tmp/stderr');
+        $storage->log($log);
+        die $@;
+      };
+
+      # Same as above.
+      eval {
+        ${runOnNode "client" [ exercise-storage "/tmp/client" ]}
+      } or do {
+        my $error = $@ || 'Unknown failure';
+        my ($code, $log) = $client->execute('cat /tmp/stdout /tmp/stderr');
+        $client->log($log);
+        die $@;
+      };
+      ''; }