From: Thierry Parmentelat Date: Thu, 21 Jun 2012 11:14:20 +0000 (+0200) Subject: improve check_tcp a lot X-Git-Tag: tests-5.1-7~13 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=12d5d34e42cbabd96f2104e9a98eeebffb521a3d;p=tests.git improve check_tcp a lot --- diff --git a/system/TestPlc.py b/system/TestPlc.py index 1ed5128..48f938c 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -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 diff --git a/system/TestSliver.py b/system/TestSliver.py index b1e68ca..b1f40d1 100644 --- a/system/TestSliver.py +++ b/system/TestSliver.py @@ -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): diff --git a/system/TestSsh.py b/system/TestSsh.py index 5b6d522..1f70b40 100644 --- a/system/TestSsh.py +++ b/system/TestSsh.py @@ -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): diff --git a/system/config_default.py b/system/config_default.py index 53b43aa..e364976 100644 --- a/system/config_default.py +++ b/system/config_default.py @@ -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), }