rework check-tcp so that we first wait for the network to be ready in the sliver
[tests.git] / system / Completer.py
index 0ebf6e6..3d49dac 100755 (executable)
@@ -9,11 +9,13 @@ import utils
 ### takes in argument a list of tasks that are instances 
 ### of a CompleterTask subclass
 class Completer:
-    def __init__ (self, tasks, verbose=True):
+    def __init__ (self, tasks, verbose=True, message=None):
         self.tasks=tasks
         self.verbose=verbose
-    def run (self, timeout_timedelta, silent_timedelta, period=None):
-        timeout = datetime.now()+timeout_timedelta
+        self.message="({})".format(message) if message else ""
+    def run (self, timeout_timedelta, silent_timedelta, period):
+        begin = datetime.now()
+        timeout = begin+timeout_timedelta
         timeout_minutes = timeout_timedelta.total_seconds()/60
         graceout = datetime.now()+silent_timedelta
         silent_minutes = silent_timedelta.total_seconds()/60
@@ -28,10 +30,15 @@ class Completer:
                 success=task.run (silent=datetime.now() <= graceout)
                 if success: fine.append(task)
             for task in fine: tasks.remove(task)
-            if not tasks: return True
+            if not tasks:
+                if self.verbose:
+                    duration = datetime.now()-begin
+                    print "total completer {} {}s".format(self.message,
+                                                          int(duration.total_seconds()))
+                return True
             if datetime.now() > timeout:
                 for task in tasks: 
-                    print task.failure_message()
+                    task.failure_epilogue()
                 return False
             if self.verbose:
                 print '%ds..'%period_seconds,
@@ -63,7 +70,7 @@ class CompleterTask:
             print self.message(),"->","OK" if result else "KO"
         return result
     def message (self): return "you-need-to-redefine-message"
-    def failure_message (self): return "you-need-to-redefine-failure_message"
+    def failure_epilogue (self): print "you-need-to-redefine-failure_epilogue"
 
 # random result
 class TaskTest (CompleterTask):
@@ -79,7 +86,7 @@ class TaskTest (CompleterTask):
     def message (self):
         return "Task %d - delay was %d s"%(self.counter,self.delay)
 
-    def failure_message (self): return "BOTTOM LINE: FAILURE with task (%s)"%self.counter
+    def failure_epilogue (self): print "BOTTOM LINE: FAILURE with task (%s)"%self.counter
 
 def main ():
     import sys