diff --git a/erp5/util/benchmark/scalability_launcher.py b/erp5/util/benchmark/scalability_launcher.py index 0a0abbf7dd8ce285bf11b98f5db95ec73173330c..71ec659ab60f3e9cd822d8e413b5484e982f1791 100644 --- a/erp5/util/benchmark/scalability_launcher.py +++ b/erp5/util/benchmark/scalability_launcher.py @@ -113,18 +113,19 @@ class ScalabilityLauncher(object): def run(self): self.log("Scalability Launcher started") - max_time = 10 + max_time = 10 start_time = time.time() error_message_set, exit_status = set(), 0 - - self.log("%s", self.test_result.isAlive()) + #self.log("%s", self.test_result.isAlive()) while time.time()-start_time < max_time: current_test = self._getNextTest() current_test.dump() time.sleep(2) + # Here call a runScalabilityTest ( placed on product/ERP5Type/tests ) ? + return error_message_set, exit_status def main(): diff --git a/erp5/util/taskdistribution/__init__.py b/erp5/util/taskdistribution/__init__.py index 792cbaeb840fa65dcdacb2f449e2d4de7878f60a..14417e9460e68264bca51e4fe63ab6042d3bf475 100644 --- a/erp5/util/taskdistribution/__init__.py +++ b/erp5/util/taskdistribution/__init__.py @@ -201,6 +201,10 @@ class TestResultProxy(RPCRetry): return '<%s(%r, %r, %r) at %x>' % (self.__class__.__name__, self._test_result_path, self._node_title, self._revision, id(self)) + @property + def test_result_path(self): + return self._test_result_path + @property def revision(self): return self._revision @@ -360,7 +364,7 @@ class TestResultProxyProxy(TestResultProxy): proxy = ServerProxy( portal_url, allow_none=True, - ).test_result_module + ) except: raise ValueError("Cannot instanciate ServerProxy") TestResultProxy.__init__(self, proxy, retry_time, logger, test_result_path, diff --git a/erp5/util/testnode/ScalabilityTestRunner.py b/erp5/util/testnode/ScalabilityTestRunner.py index bf48efe3682e435800a95e8e2332b0677ddace30..eeb67df8437494e157d0d6467cdfe3add759be8e 100644 --- a/erp5/util/testnode/ScalabilityTestRunner.py +++ b/erp5/util/testnode/ScalabilityTestRunner.py @@ -117,8 +117,8 @@ class ScalabilityTestRunner(): Create scalability instance """ if self.authorize_request: - config = _generateInstanceXML(software_path, software_configuration, - instance_title, test_result) + config = self._generateInstanceXML(software_path, software_configuration, + test_result) self.log("testnode, request : %s", instance_title) self.slapos_controler.request(instance_title, software_path, "scalability", {"_" : config}) @@ -207,7 +207,6 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) self.launchable = test_configuration['launchable'] self.error_message = test_configuration['error_message'] self.randomized_path = test_configuration['randomized_path'] - # Avoid the test if it is not launchable if not self.launchable: self.log("Test suite %s is not actually launchable with \ @@ -215,21 +214,13 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) self.log("ERP5 Master indicates : %s" %(self.error_message,)) # error : wich code to return ? return {'status_code' : 1} - # create an obfuscated link to the testsuite directory - self.log("self.testnode.config['software_directory']\ - : %s" %(self.testnode.config['software_directory'])) - self.log("self.randomized_path\ - : %s" %(self.randomized_path)) path_to_suite = os.path.join( self.testnode.config['working_directory'], node_test_suite.reference) - self.log("path_to_suite\ - : %s" %(path_to_suite)) self.ofuscated_link_path = os.path.join( self.testnode.config['software_directory'], self.randomized_path) - if ( not os.path.lexists(self.ofuscated_link_path) and not os.path.exists(self.ofuscated_link_path) ) : try : @@ -239,12 +230,10 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) except : self.log("testnode, Unable to create symbolic link to the testsuite.") raise ValueError("testnode, Unable to create symbolic link to the testsuite.") - self.log("Sym link : %s %s" %(path_to_suite, self.ofuscated_link_path)) - - involved_nodes_computer_guid = test_configuration['involved_nodes_computer_guid'] configuration_list = test_configuration['configuration_list'] + node_test_suite.edit(configuration_list=configuration_list) self.launcher_nodes_computer_guid = test_configuration['launcher_nodes_computer_guid'] software_path_list = [] # Construct the ipv6 obfuscated url of the software profile reachable from outside @@ -276,30 +265,42 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) return {'status_code' : 1} self.authorize_request = True self.log("Softwares installed") - - try: + """ try: + """ # Launch instance - instance_title = self._generateInstancetitle(node_test_suite.test_suite_title) - self._createInstance(self.reachable_profile, configuration_list[0], - instance_title, node_test_suite.test_result) - self.log("Scalability instance requested") - time.sleep(15) - self.log("Trying to update instance XML...") - time.sleep(2) - try: - self._updateInstanceXML(self.reachable_profile, "COMP-1564", configuration_list[1]) - self.log("Instance XML updated...") - except: - raise ValueError("Unable to update instance XML") - return {'status_code' : 1} - - except: + instance_title = self._generateInstancetitle(node_test_suite.test_suite_title) + self._createInstance(self.reachable_profile, configuration_list[0], + instance_title, node_test_suite.test_result) + self.log("Scalability instance requested") + """ except: self.log("Unable to launch instance") raise ValueError("Unable to launch instance") - return {'status_code' : 1} - + return {'status_code' : 1} # Unbale to launch instance + """ + return {'status_code' : 1} # Unable to continue due to not realizable configuration return {'status_code' : 0} + def runTestSuite(self, node_test_suite, portal_url): + configuration_list = node_test_suite.configuration_list + test_list = [ configuration_list.index(configuration) + for configuration in configuration_list ] + # create test_result + test_result_proxy = self.testnode.portal.createTestResult( + node_test_suite.revision, test_list, + self.testnode.config['test_node_title'], + True, node_test_suite.test_suite_title, + node_test_suite.project_title) + + count = 0 + for configuration in configuration_list: + # Start only the current test + exclude_list=[x for x in test_list if x!=test_list[count]] + count += 1 + test_result_line_proxy = test_result_proxy.start(exclude_list) + self.log("Test for count : %d is in a running state." %count) + # create result line + return {'status_code' : 0} + def _cleanUpNodesInformation(self): self.involved_nodes_computer_guid = [] self.launcher_nodes_computer_guid = [] @@ -307,13 +308,6 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) self.authorize_supply = True self.authorize_request = False - def runTestSuite(self, node_test_suite, portal_url, log=None): - # TODO : write code - SlapOSControler.createFolder(node_test_suite.test_suite_directory, - clean=True) - # create ResultLine for each loop - pass - def getRelativePathUsage(self): """ Used by the method testnode.constructProfile() to know diff --git a/erp5/util/testnode/UnitTestRunner.py b/erp5/util/testnode/UnitTestRunner.py index 2353e5a142392e53f437f4dbc53512fcbb9d8108..b785437bd0db80e480975c9c364a681188b9ae7d 100644 --- a/erp5/util/testnode/UnitTestRunner.py +++ b/erp5/util/testnode/UnitTestRunner.py @@ -139,6 +139,7 @@ class UnitTestRunner(): invocation_list.extend(["--firefox_bin", firefox_bin_list[0]]) if '--xvfb_bin' in supported_paramater_set: invocation_list.extend(["--xvfb_bin", xvfb_bin_list[0]]) + # TODO : include testnode correction ( b111682f14890bf ) bt5_path_list = config.get("bt5_path") if bt5_path_list not in ('', None,): invocation_list.extend(["--bt5_path", bt5_path_list]) diff --git a/erp5/util/testnode/testnode.py b/erp5/util/testnode/testnode.py index 18ec0f0e137631cec907e48650c2fade1bd7551e..4f35568cc49acea9b4361a50f8243691f96d6c23 100644 --- a/erp5/util/testnode/testnode.py +++ b/erp5/util/testnode/testnode.py @@ -290,8 +290,6 @@ branch = %(branch)s self._cleanupTemporaryFiles() def run(self): - - ## BLOCK OK log = self.log config = self.config slapgrid = None @@ -300,7 +298,6 @@ branch = %(branch)s test_result = None test_node_slapos = SlapOSInstance() test_node_slapos.edit(working_directory=self.config['slapos_directory']) - ## /BLOCK OK try: while True: try: @@ -311,15 +308,13 @@ branch = %(branch)s begin = time.time() portal_url = config['test_suite_master_url'] portal = taskdistribution.TaskDistributionTool(portal_url, logger=DummyLogger(log)) + self.portal = portal self.test_suite_portal = taskdistribution.TaskDistributor(portal_url, logger=DummyLogger(log)) self.test_suite_portal.subscribeNode(config['test_node_title'], config['computer_id']) - test_suite_json = self.test_suite_portal.startTestSuite(config['test_node_title']) - test_suite_data = testnodeUtils.deunicodeData(json.loads(test_suite_json)) log("Got following test suite data from master : %r" % \ (test_suite_data,)) - # TODO : implement this method for each distributor # into nexedi/master-erp5.. try: @@ -340,11 +335,7 @@ from the distributor.") # master testnode gets test_suites, slaves get nothing runner.prepareSlapOSForTestNode(test_node_slapos) # Clean-up test suites - self.checkOldTestSuite(test_suite_data) - - - for test_suite in test_suite_data: remote_test_result_needs_cleanup = False node_test_suite = self.getNodeTestSuite( @@ -366,20 +357,16 @@ from the distributor.") node_test_suite.project_title) remote_test_result_needs_cleanup = True log("testnode, test_result : %r" % (test_result, )) - if test_result is not None: self.registerSuiteLog(test_result, node_test_suite) self.checkRevision(test_result,node_test_suite) - + node_test_suite.edit(test_result=test_result) # Now prepare the installation of SlapOS and create instance status_dict = runner.prepareSlapOSForTestSuite(node_test_suite) - - # Give some time so computer partitions may start # as partitions can be of any kind we have and likely will never have # a reliable way to check if they are up or not ... - time.sleep(20) - node_test_suite.test_result = test_result + #time.sleep(20) runner.runTestSuite(node_test_suite, portal_url) # break the loop to get latest priorities from master break