From e357b8a6790de0130efb7d4f2ab89e5482ae4d6f Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Thu, 19 Feb 2009 20:22:54 -0700
Subject: [PATCH] test/no_network: do startService on the storage servers, make
 it easier to customize the storage servers

---
 src/allmydata/test/no_network.py | 36 +++++++++++++++++++-------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/src/allmydata/test/no_network.py b/src/allmydata/test/no_network.py
index e6bee787..f04228d5 100644
--- a/src/allmydata/test/no_network.py
+++ b/src/allmydata/test/no_network.py
@@ -148,12 +148,8 @@ class NoNetworkGrid(service.MultiService):
         self.clients = []
 
         for i in range(num_servers):
-            serverid = hashutil.tagged_hash("serverid", str(i))[:20]
-            serverdir = os.path.join(basedir, "servers",
-                                     idlib.shortnodeid_b2a(serverid))
-            fileutil.make_dirs(serverdir)
-            ss = StorageServer(serverdir, serverid)
-            self.add_server(i, serverid, ss)
+            ss = self.make_server(i)
+            self.add_server(i, ss)
 
         for i in range(num_clients):
             clientid = hashutil.tagged_hash("clientid", str(i))[:20]
@@ -180,12 +176,21 @@ class NoNetworkGrid(service.MultiService):
             c.setServiceParent(self)
             self.clients.append(c)
 
-    def add_server(self, i, serverid, ss):
-        # TODO: ss.setServiceParent(self), but first deal with the fact that
-        # all StorageServers are named 'storage'. At the moment, Storage
-        # doesn't really need to be startService'd, but it will in the
-        # future.
-        #ss.setServiceParent(self)
+    def make_server(self, i):
+        serverid = hashutil.tagged_hash("serverid", str(i))[:20]
+        serverdir = os.path.join(self.basedir, "servers",
+                                 idlib.shortnodeid_b2a(serverid))
+        fileutil.make_dirs(serverdir)
+        ss = StorageServer(serverdir, serverid)
+        return ss
+
+    def add_server(self, i, ss):
+        # to deal with the fact that all StorageServers are named 'storage',
+        # we interpose a middleman
+        middleman = service.MultiService()
+        middleman.setServiceParent(self)
+        ss.setServiceParent(middleman)
+        serverid = ss.my_nodeid
         self.servers_by_number[i] = ss
         self.servers_by_id[serverid] = wrap(ss, "storage")
         self.all_servers = frozenset(self.servers_by_id.items())
@@ -200,9 +205,12 @@ class GridTestMixin:
     def tearDown(self):
         return self.s.stopService()
 
-    def set_up_grid(self, num_clients=1, client_config_hooks={}):
+    def set_up_grid(self, num_clients=1, num_servers=10,
+                    client_config_hooks={}):
         # self.basedir must be set
-        self.g = NoNetworkGrid(self.basedir, num_clients=num_clients,
+        self.g = NoNetworkGrid(self.basedir,
+                               num_clients=num_clients,
+                               num_servers=num_servers,
                                client_config_hooks=client_config_hooks)
         self.g.setServiceParent(self.s)
         self.client_webports = [c.getServiceNamed("webish").listener._port.getHost().port
-- 
2.45.2