'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,
]
@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
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
'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),
}