from TestUser import TestUser
from TestKey import TestKey
from TestSlice import TestSlice
+from TestBox import TestBox
# inserts a backslash before each occurence of the following chars
# \ " ' < > & | ; ( ) $ * ~
# step methods must take (self, options) and return a boolean
+def standby(minutes):
+ utils.header('Entering StandBy for %d mn'%minutes)
+ time.sleep(60*minutes)
+ return True
+
+def standby_generic (func):
+ def actual(self,options):
+ minutes=int(func.__name__.split("_")[1])
+ return standby(minutes)
+ return actual
+
class TestPlc:
def __init__ (self,plc_spec):
return key
raise Exception,"Cannot locate key %s"%keyname
- #this to catch up all different hostboxes used in this plc
- def locate_hostBoxes(self,site_spec):
- #Get The first host box to avoid returning a long list with the same host box
- #in case only one is used for all the nodes
- HostBoxes=[site_spec['nodes'][0]['host_box']]
- for node_spec in site_spec['nodes']:
- if node_spec['host_box']!= HostBoxes[0]:
- HostBoxes.append( node_spec['host_box'])
-
- return HostBoxes
-
- def kill_all_qemus(self):
+ # all different hostboxes used in this plc
+ def gather_hostBoxes(self):
+ # maps on sites and nodes, return [ (host_box,hostname) ]
+ tuples=[]
for site_spec in self.plc_spec['sites']:
test_site = TestSite (self,site_spec)
- hostboxes_list=self.locate_hostBoxes(site_spec)
- if (hostboxes_list):
- for node_spec in site_spec['nodes']:
- TestNode(self,test_site,node_spec).stop_qemu(node_spec)
+ for node_spec in site_spec['nodes']:
+ test_node = TestNode (self, test_site, node_spec)
+ if not test_node.is_real():
+ tuples.append( (test_node.host_box(),node_spec['node_fields']['hostname']) )
+ # transform into a dict { 'host_box' -> [ hostnames .. ] }
+ result = {}
+ for (box,hostname) in tuples:
+ if not result.has_key(box):
+ result[box]=[hostname]
else:
- utils.header("No emulated node running on this PLC config ignore the kill() step")
-
+ result[box].append(hostname)
+ return result
+
+ # a step for checking this stuff
+ def showboxes (self,options):
+ print 'showboxes'
+ for (box,hosts) in self.gather_hostBoxes().iteritems():
+ print box,":"," + ".join(hosts)
+ return True
+
+ def kill_all_qemus(self):
+ for (box,hosts) in self.gather_hostBoxes().iteritems():
+ # this is the brute force version, kill all qemus on that host box
+ TestBox(box).kill_all_qemus()
+
def clear_ssh_config (self,options):
# install local ssh_config file as root's .ssh/config - ssh should be quiet
# dir might need creation first
return hostnames
# gracetime : during the first <gracetime> minutes nothing gets printed
- def do_check_nodesStatus (self, minutes, gracetime=2):
+ def do_nodes_booted (self, minutes, gracetime=2):
# compute timeout
timeout = datetime.datetime.now()+datetime.timedelta(minutes=minutes)
graceout = datetime.datetime.now()+datetime.timedelta(minutes=gracetime)
# only useful in empty plcs
return True
- def check_nodesStatus(self,options):
- return self.do_check_nodesStatus(minutes=5)
+ def nodes_booted(self,options):
+ return self.do_nodes_booted(minutes=5)
#to scan and store the nodes's public keys and avoid to ask for confirmation when ssh
def scan_publicKeys(self,hostnames):
# only useful in empty plcs
return True
- def check_nodesConnectivity(self, options):
+ def nodes_ssh(self, options):
return self.do_check_nodesSsh(minutes=2)
- def standby(self,options):
- #Method for waiting a while when nodes are booting and being sshable,giving time to NM to be up
- utils.header('Entering in StanbdBy mode for 10min at %s'%datetime.datetime.now())
- time.sleep(600)
- utils.header('Exist StandBy mode at %s'%datetime.datetime.now())
- return True
-
def bootcd (self, options):
for site_spec in self.plc_spec['sites']:
test_site = TestSite (self,site_spec)
self.run_in_guest('service httpd start')
utils.header('Database restored from ' + dump)
+
+ @standby_generic
+ def standby_1(): pass
+ @standby_generic
+ def standby_2(): pass
+ @standby_generic
+ def standby_3(): pass
+ @standby_generic
+ def standby_4(): pass
+ @standby_generic
+ def standby_5(): pass
+ @standby_generic
+ def standby_6(): pass
+ @standby_generic
+ def standby_7(): pass
+ @standby_generic
+ def standby_8(): pass
+ @standby_generic
+ def standby_9(): pass
+ @standby_generic
+ def standby_10(): pass
+ @standby_generic
+ def standby_11(): pass
+ @standby_generic
+ def standby_12(): pass
+ @standby_generic
+ def standby_13(): pass
+ @standby_generic
+ def standby_14(): pass
+ @standby_generic
+ def standby_15(): pass
+ @standby_generic
+ def standby_16(): pass
+ @standby_generic
+ def standby_17(): pass
+ @standby_generic
+ def standby_18(): pass
+ @standby_generic
+ def standby_19(): pass
+ @standby_generic
+ def standby_20(): pass
+