improve check_tcp a lot
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 21 Jun 2012 11:14:20 +0000 (13:14 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 21 Jun 2012 11:14:20 +0000 (13:14 +0200)
system/TestPlc.py
system/TestSliver.py
system/TestSsh.py
system/config_default.py

index 1ed5128..48f938c 100644 (file)
@@ -97,7 +97,7 @@ class TestPlc:
         'ssh_node_debug@1', 'plcsh_stress_test@1', SEP,
         'ssh_node_boot@1', 'ssh_slice', 'check_initscripts', SEP,
         'ssh_slice_sfa@1', 'sfa_delete_slice@1', 'sfa_delete_user@1', SEPSFA,
-        'check_tcp', 'check_system_slice', SEP,
+        'cross_check_tcp@1', 'check_system_slice', SEP,
         'empty_slices', 'ssh_slice_off', 'fill_slices', SEP,
         'force_gather_logs', SEP,
         ]
@@ -1153,23 +1153,34 @@ class TestPlc:
     @node_mapper
     def timestamp_qemu (self) : pass
 
-    def check_tcp (self):
+    # when a spec refers to a node possibly on another plc
+    def locate_sliver_obj_cross (self, nodename, slicename, other_plcs):
+        for plc in [ self ] + other_plcs:
+            try:
+                return plc.locate_sliver_obj (nodename, slicename)
+            except:
+                pass
+        raise Exception, "Cannot locate sliver %s@%s among all PLCs"%(nodename,slicename)
+
+    # implement this one as a cross step so that we can take advantage of different nodes
+    # in multi-plcs mode
+    def cross_check_tcp (self, other_plcs):
         "check TCP connectivity between 2 slices (or in loopback if only one is defined)"
-        if 'tcp_test' not in self.plc_spec
-            utils.header ("check_tcp: no config found")
+        if 'tcp_specs' not in self.plc_spec or not self.plc_spec['tcp_specs']
+            utils.header ("check_tcp: no/empty config found")
             return True
-        specs = self.plc_spec['tcp_test']
+        specs = self.plc_spec['tcp_specs']
         overall=True
         for spec in specs:
             port = spec['port']
             # server side
-            s_test_sliver = self.locate_sliver_obj (spec['server_node'],spec['server_slice'])
+            s_test_sliver = self.locate_sliver_obj_cross (spec['server_node'],spec['server_slice'],other_plcs)
             if not s_test_sliver.run_tcp_server(port,timeout=10):
                 overall=False
                 break
 
             # idem for the client side
-            c_test_sliver = self.locate_sliver_obj(spec['server_node'],spec['server_slice'])
+            c_test_sliver = self.locate_sliver_obj_cross (spec['server_node'],spec['client_slice'],other_plcs)
             if not c_test_sliver.run_tcp_client(s_test_sliver.test_node.name(),port):
                 overall=False
         return overall
index b1e68ca..b1f40d1 100644 (file)
@@ -46,7 +46,7 @@ class TestSliver:
     def run_tcp_client (self,servername,port):
         client_command="./tcptest.py client -a %s -p %d"%(servername,port)
         return self.test_ssh.copy("tcptest.py")==0 and \
-            self.test_ssh.run(client_command,background=True)==0
+            self.test_ssh.run(client_command,background=False)==0
 
     # use the node's main ssh root entrance, as the slice entrance might be down
     #def tar_var_logs (self):
index 5b6d522..1f70b40 100644 (file)
@@ -128,6 +128,7 @@ class TestSsh:
                 dirname="%s/%s"%(self.buildname,dirname)
             else:
                 dirname=self.buildname
+        if dirname=='.': return
         return self.run("mkdir -p %s"%dirname)
 
     def rmdir (self,dirname=None):
index 53b43aa..e364976 100644 (file)
@@ -405,28 +405,34 @@ def slices (options,index):
 def all_slicenames (options,index):
     return [ slice['slice_fields']['name'] for slice in slices(options,index)]
 
-def tcp_tests (options,index):
-    if index == 1:
-        return [
-            # local test
-            { 'server_node': 'node1',
-              'server_slice' : '%s_sl1'%login_base(index),
-              'client_node' : 'node1',
-              'client_slice' : '%s_sl1'%login_base(index),
-              'port' : 2000,
-              }]
-    elif index == 2:
-        return [
-            # remote test
-            { 'server_node': 'node2',
-              'server_slice' : '%s_sl3'%login_base(index),
-              'client_node' : 'node2',
-              'client_slice' : '%s_sl4'%login_base(index),
-              'port' : 4000,
-              },
-            ]
-    else:
-        return []
+# the logic here is to try:
+# . client and server on the same slice/node
+# . client and server on the same node but 2 different slices
+# if at least 2 plcs, we have 2 nodes, so again on diff. nodes
+def tcp_specs (options,index):
+    # only run the test on the first plc
+    if index != 1: return None
+    # 
+    slice1='%s_sl1'%login_base(1)
+    slice2='%s_sl2'%login_base(1)
+    same_node_same_slice =      { 'server_node': 'node1', 'server_slice': slice1,
+                                  'client_node': 'node1', 'client_slice': slice1,
+                                  'port': 10001}
+# this does not work on vs-nodes....
+    same_node_2_slices =        { 'server_node': 'node1', 'server_slice': slice1,
+                                  'client_node': 'node1', 'client_slice': slice2,
+                                  'port': 10002}
+    two_nodes_same_slice =      { 'server_node': 'node1', 'server_slice': slice1,
+                                  'client_node': 'node2', 'client_slice': slice1,
+                                  'port': 10003}
+    two_nodes_2_slices =        { 'server_node': 'node1', 'server_slice': slice1,
+                                  'client_node': 'node2', 'client_slice': slice2,
+                                  'port': 10004}
+#    specs = [ same_node_same_slice, same_node_2_slices ]
+    specs = [ same_node_same_slice ]
+    if options.size >1 :
+        specs += [ two_nodes_same_slice, two_nodes_2_slices ]
+    return specs
 
 # the semantic for 't_from' and 't_until' here is:
 # if they are smaller than one year, they are relative to the current time, expressed in grains
@@ -474,7 +480,7 @@ def plc (options,index) :
         'keys' : keys(options,index),
         'initscripts': initscripts(options,index),
         'slices' : slices(options,index),
-        'tcp_test' : tcp_tests(options,index),
+        'tcp_specs' : tcp_specs(options,index),
        'sfa' : sfa(options,index),
         'leases' : leases (options, index),
     }