From d5fc9b4ac806374dbc48beb17276c92386c5388d Mon Sep 17 00:00:00 2001
From: Benjamin Blanc <benjamin.blanc@tiolive.com>
Date: Thu, 13 Jun 2013 13:07:18 +0200
Subject: [PATCH] Up

---
 erp5/util/testnode/ScalabilityTestRunner.py | 35 +++++++++++++++------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/erp5/util/testnode/ScalabilityTestRunner.py b/erp5/util/testnode/ScalabilityTestRunner.py
index 80828cce3e..efe7d1e1d2 100644
--- a/erp5/util/testnode/ScalabilityTestRunner.py
+++ b/erp5/util/testnode/ScalabilityTestRunner.py
@@ -71,7 +71,7 @@ class ScalabilityTestRunner():
     A proxy to supply : Install a software on a specific node
     """
     self.testnode.log("TESTNODE SUPPLY : %s %s", software_path, computer_guid)
-    if self.authorize_supply == True :
+    if self.authorize_supply :
       if not(computer_guid in self.remaining_software_installation_grid):
         # Add computer_guid to the grid if it isn't
         self.remaining_software_installation_grid[computer_guid] = []
@@ -93,12 +93,27 @@ class ScalabilityTestRunner():
 #      software_path_list.append(self.testnode.config.get("software_list"))
     return {'status_code' : 0} 
 
+  def isSoftwareReleaseReady(self, software_url, computer_guid):
+      # TODO : implement this method
+      # -> communication with SlapOS master
+      
+      # todo : simulate slapOS Master answer
+      
+      return False
+      
   def remainSoftwareToInstall(self):
-      # Check SlapOS Master to know if softwares are ready
-      # and remove from self.remaining_software_installation_grid
-      # installed softwares.
-      print self.remaining_software_installation_grid
-      return True
+      """
+      Return True if all softwares are installed, otherwise return False
+      """
+      # Remove from grid installed software entries
+      for computer_guid,v in self.remaining_software_installation_grid:
+          for software_url in v:
+              if isSoftwareReleaseReady(software_url, computer_guid):
+                  self.remaining_software_installation_grid[computer_guid].remove(software_url)
+          if len(self.remaining_software_installation_grid[computer_guid])==0:
+            del self.remaining_software_installation_grid[computer_guid]
+      # Empty grid means that all softwares are installed
+      return len(self.remaining_software_installation_grid)==0
           
   def prepareSlapOSForTestSuite(self, node_test_suite):
     """
@@ -118,7 +133,7 @@ class ScalabilityTestRunner():
         self.involved_nodes_computer_guid = test_configuration['involved_nodes_computer_guid']
         self.launchable = test_configuration['launchable']
         self.error_message = test_configuration['error_message']
-        if self.launchable == False:
+        if not self.launchable:
           self.testnode.log("Test suite %s is not actually launchable with \
     the current cluster configuration." %(node_test_suite.test_suite_title,))
           self.testnode.log("ERP5 Master indicates : %s" %(self.error_message,))
@@ -139,19 +154,21 @@ class ScalabilityTestRunner():
         # From the line below we would not supply any more softwares
         self.authorize_supply = False
         # Waiting until all softwares are installed
-        while ((self.remainSoftwareToInstall() == True)
+        while ( self.remainSoftwareToInstall() 
            and (max_time <= time.time()-start_time)):
             self.testnode.log("Master testnode is waiting\
      for the end of all software installation.")
             time.sleep(15)
         # We were wainting for too long time, that's a failure.
-        if self.remainSoftwareToInstall() == True:
+        if self.remainSoftwareToInstall() :
           return {'status_code' : 1}
     return {'status_code' : 0}
 
   def _cleanUpNodesInformation(self):
     self.involved_nodes_computer_guid = []
     self.launcher_nodes_computer_guid = []
+    self.remaining_software_installation_grid = {}
+    self.authorize_supply = True
 
   def runTestSuite(self, node_test_suite, portal_url, log=None):
     # TODO : write code
-- 
2.30.9