again
[tests.git] / system / TestPlc.py
index 490ddd7..f2fe14b 100644 (file)
@@ -38,14 +38,11 @@ def standby_generic (func):
     return actual
 
 def node_mapper (method):
-    def actual(self):
+    def actual(self,*args, **kwds):
         overall=True
         node_method = TestNode.__dict__[method.__name__]
-        for site_spec in self.plc_spec['sites']:
-            test_site = TestSite (self,site_spec)
-            for node_spec in site_spec['nodes']:
-                test_node = TestNode (self,test_site,node_spec)
-                if not node_method(test_node): overall=False
+        for test_node in self.all_node():
+            if not node_method(test_node, *args, **kwds): overall=False
         return overall
     # restore the doc text
     actual.__doc__=method.__doc__
@@ -101,7 +98,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',  SEP,
+        'check_tcp', 'check_netflow', SEP,
         'force_gather_logs', SEP,
         ]
     other_steps = [ 
@@ -571,7 +568,7 @@ class TestPlc:
         pkgs_list.append ("slicerepo-%s"%nodefamily)
         pkgs_list.append ("myplc")
         pkgs_list.append ("noderepo-%s"%nodefamily)
-        pkgs_list.append ("bootstrapfs-%s-plain"%nodefamily)
+        pkgs_list.append ("nodeimage-%s-plain"%nodefamily)
         pkgs_string=" ".join(pkgs_list)
         return self.yum_install (pkgs_list)
 
@@ -846,6 +843,15 @@ class TestPlc:
                     overall=False
         return overall
 
+    # a list of TestNode objs
+    def all_nodes (self):
+        nodes=[]
+        for site_spec in self.plc_spec['sites']:
+            test_site = TestSite (self,site_spec)
+            for node_spec in site_spec['nodes']:
+                nodes.append(TestNode (self,test_site,node_spec))
+        return nodes
+
     # return a list of tuples (nodename,qemuname)
     def all_node_infos (self) :
         node_infos = []
@@ -911,7 +917,7 @@ class TestPlc:
         return True
 
     def nodes_booted(self):
-        return self.nodes_check_boot_state('boot',timeout_minutes=30,silent_minutes=20)
+        return self.nodes_check_boot_state('boot',timeout_minutes=30,silent_minutes=28)
 
     def check_nodes_ssh(self,debug,timeout_minutes,silent_minutes,period=15):
         # compute timeout
@@ -960,11 +966,11 @@ class TestPlc:
         
     def ssh_node_debug(self):
         "Tries to ssh into nodes in debug mode with the debug ssh key"
-        return self.check_nodes_ssh(debug=True,timeout_minutes=10,silent_minutes=5)
+        return self.check_nodes_ssh(debug=True,timeout_minutes=10,silent_minutes=8)
     
     def ssh_node_boot(self):
         "Tries to ssh into nodes in production mode with the root ssh key"
-        return self.check_nodes_ssh(debug=False,timeout_minutes=40,silent_minutes=15)
+        return self.check_nodes_ssh(debug=False,timeout_minutes=40,silent_minutes=35)
     
     @node_mapper
     def qemu_local_init (self): 
@@ -1111,6 +1117,31 @@ class TestPlc:
                 overall=False
         return overall
 
+    # painfully enough, we need to allow for some time as netflow might show up last
+    def check_netflow (self): 
+        "all nodes: check that the netflow slice is alive"
+        return self.check_systemslice ('netflow')
+    
+    # we have the slices up already here, so it should not take too long
+    def check_systemslice (self, slicename, timeout_minutes=5, period=15):
+        timeout = datetime.datetime.now()+datetime.timedelta(minutes=timeout_minutes)
+        test_nodes=self.all_nodes()
+        while test_nodes:
+            for test_node in test_nodes:
+                if test_node.check_systemslice (slicename):
+                    utils.header ("ok")
+                    test_nodes.remove(test_node)
+                else:
+                    print '.',
+            if not test_nodes:
+                return True
+            if datetime.datetime.now () > timeout:
+                for test_node in test_nodes:
+                    utils.header ("can't find system slice %s in %s"%(slicename,test_node.name()))
+                return False
+            time.sleep(period)
+        return True
+
     def plcsh_stress_test (self):
         "runs PLCAPI stress test, that checks Add/Update/Delete on all types - preserves contents"
         # install the stress-test in the plc image