From 70d415b959f02b63b568f64ef071c377350894df Mon Sep 17 00:00:00 2001 From: Benjamin Blanc <benjamin.blanc@tiolive.com> Date: Tue, 18 Jun 2013 13:31:15 +0200 Subject: [PATCH] Add instance requesting + test PASSED --- erp5/tests/testERP5TestNode.py | 9 +++++ erp5/util/testnode/ScalabilityTestRunner.py | 39 ++++++++++++++++++++- erp5/util/testnode/SlapOSControler.py | 14 ++++---- erp5/util/testnode/testnodeUtils.py | 8 +++++ 4 files changed, 62 insertions(+), 8 deletions(-) diff --git a/erp5/tests/testERP5TestNode.py b/erp5/tests/testERP5TestNode.py index 61f8abbed3..2b83a4bbb5 100644 --- a/erp5/tests/testERP5TestNode.py +++ b/erp5/tests/testERP5TestNode.py @@ -686,10 +686,14 @@ branch = foo original_getSlaposAccountCertificate = TaskDistributor.getSlaposAccountCertificate original_generateConfiguration = TaskDistributor.generateConfiguration original_isMasterTestnode = TaskDistributor.isMasterTestnode + original_supply = SlapOSControler.supply + original_request = SlapOSControler.request TaskDistributor.getSlaposAccountKey = patch_getSlaposAccountKey TaskDistributor.getSlaposAccountCertificate = patch_getSlaposAccountCertificate TaskDistributor.generateConfiguration = patch_generateConfiguration TaskDistributor.isMasterTestnode = patch_isMasterTestnode + SlapOSControler.supply = doNothing + SlapOSControler.request = doNothing original_startTestSuite = TaskDistributor.startTestSuite original_subscribeNode = TaskDistributor.subscribeNode original_getTestType = TaskDistributor.getTestType @@ -715,6 +719,8 @@ branch = foo TaskDistributor.getSlaposAccountCertificate = original_getSlaposAccountCertificate TaskDistributor.generateConfiguration = original_generateConfiguration TaskDistributor.isMasterTestnode = original_isMasterTestnode + SlapOSControler.supply =original_supply + SlapOSControler.request = original_request TaskDistributor.startTestSuite = original_startTestSuite TaskDistributionTool.createTestResult = original_createTestResult TaskDistributionTool.subscribeNode = original_subscribeNode @@ -908,6 +914,7 @@ branch = foo original_prepareSlapOS = RunnerClass._prepareSlapOS original_runTestSuite = RunnerClass.runTestSuite original_supply = SlapOSControler.supply + original_request = SlapOSControler.request # time.sleep = doNothing TaskDistributor.getSlaposAccountKey = patch_getSlaposAccountKey @@ -921,6 +928,7 @@ branch = foo RunnerClass._prepareSlapOS = doNothing RunnerClass.runTestSuite = doNothing SlapOSControler.supply = doNothing + SlapOSControler.request = doNothing # Run test_node = self.getTestNode() test_node.run() @@ -936,4 +944,5 @@ branch = foo RunnerClass._prepareSlapOS = original_prepareSlapOS RunnerClass.runTestSuite = original_runTestSuite SlapOSControler.supply = original_supply + SlapOSControler.request = original_request time.sleep =original_sleep diff --git a/erp5/util/testnode/ScalabilityTestRunner.py b/erp5/util/testnode/ScalabilityTestRunner.py index 3966b67527..873384db47 100644 --- a/erp5/util/testnode/ScalabilityTestRunner.py +++ b/erp5/util/testnode/ScalabilityTestRunner.py @@ -65,6 +65,7 @@ class ScalabilityTestRunner(): # Protection to prevent installation of softwares after checking self.authorize_supply = True + self.authorize_request = False # Used to simulate SlapOS answer (used as a queue) self.last_slapos_answer = [] @@ -81,6 +82,29 @@ class ScalabilityTestRunner(): return {'status_code' : 0} else: raise ValueError("Too late to supply now. ('self.authorize_supply' is False)") + return {'status_code' : 1} + + + def _createInstance(self, software_path, software_configuration, test_suite_title): + """ + Launch instance + """ + if self.authorize_request: + instance_title = "Scalability-" + instance_title += "("+test_suite_title+")-" + instance_title += str(self.involved_nodes_computer_guid).replace("'","") + instance_title += "-" + instance_title += testnodeUtils.generateRandomString(6) + self.log("testnode, request : %s", instance_title) + self.slapos_controler.request(instance_title, software_path, + "scalability", {"_" : software_configuration}) + + self.authorize_request = False + return {'status_code' : 0} + else : + raise ValueError("Softwares release not ready yet to launch instan\ +ces or already launched.") + return {'status_code' : 1} def prepareSlapOSForTestNode(self, test_node_slapos=None): """ @@ -220,7 +244,19 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) self._comeBackFromDummySlapOS() if self.remainSoftwareToInstall() : return {'status_code' : 1} - self.log("Softwares installed") + self.authorize_request = True + self.log("Softwares installed") + + try: + # Launch instance + self._createInstance(self.reachable_profile, configuration_list[0], + node_test_suite.test_suite_title) + 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' : 0} def _cleanUpNodesInformation(self): @@ -228,6 +264,7 @@ late a SlapOS (positive) answer." %(str(os.getpid()),str(os.getpid()),)) self.launcher_nodes_computer_guid = [] self.remaining_software_installation_dict = {} self.authorize_supply = True + self.authorize_request = False def runTestSuite(self, node_test_suite, portal_url, log=None): # TODO : write code diff --git a/erp5/util/testnode/SlapOSControler.py b/erp5/util/testnode/SlapOSControler.py index ec923b308f..66ea403345 100644 --- a/erp5/util/testnode/SlapOSControler.py +++ b/erp5/util/testnode/SlapOSControler.py @@ -130,8 +130,8 @@ class SlapOSControler(object): """ configuration_file_path (slapos acount) reference : instance title - software_url - software_type : cluster/single + software_url : software path/url + software_type : scalability software_configuration : dict { "_" : "{'toto' : 'titi'}" } Ex : @@ -140,19 +140,19 @@ class SlapOSControler(object): """ # TODO : remove return - return self.log('SlapOSControler : _request') filter_kw = None if computer_guid != None: filter_kw = { "computer_guid": computer_guid } - if os.path.exists(configuration_file_path): + if os.path.exists(self.configuration_file_path): parser = argparse.ArgumentParser() parser.add_argument("configuration_file") args = parser.parse_args([self.configuration_file_path]) - config = client.Config(args, args.configuration_file) - local = client.init(config) + config = client.Config() + config.setConfig(args, args.configuration_file) try: - partition = local['slap'].registerOpenOrder().request( + local = client.init(config) + partition = local['request']( software_release = software_url, partition_reference = reference, partition_parameter_kw = software_configuration, diff --git a/erp5/util/testnode/testnodeUtils.py b/erp5/util/testnode/testnodeUtils.py index efd46890ae..3e92d2e8b8 100644 --- a/erp5/util/testnode/testnodeUtils.py +++ b/erp5/util/testnode/testnodeUtils.py @@ -2,6 +2,7 @@ import sys import json import shutil import string +from random import choice def deunicodeData(data): if isinstance(data, list): @@ -19,3 +20,10 @@ def deunicodeData(data): else: new_data = data return new_data + +def generateRandomString(size): + tab = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + my_string = '' + for i in range(size): + my_string = my_string + choice(tab) + return my_string \ No newline at end of file -- 2.30.9