X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FLauncher%2FTest%2Ftest_launcher.py;h=339e4c8751b67e843c8e78a79a4528f7775544b5;hb=8723fcf67b7efe234c1c63bb7139ee7a247ed421;hp=59803aa7b57612f9af56ac1d728c50ef276d2739;hpb=d1151f956567da46ee95cfd65502b55416145b66;p=modules%2Fkernel.git diff --git a/src/Launcher/Test/test_launcher.py b/src/Launcher/Test/test_launcher.py index 59803aa7b..339e4c875 100755 --- a/src/Launcher/Test/test_launcher.py +++ b/src/Launcher/Test/test_launcher.py @@ -58,9 +58,16 @@ class TestCompo(unittest.TestCase): text = f.read() f.close() self.assertEqual(text, content) - except IOError,ex: + except IOError as ex: self.fail("IO exception:" + str(ex)); + def create_JobParameters(self): + job_params = salome.JobParameters() + job_params.wckey="P11U5:CARBONES" #needed by edf clusters + job_params.resource_required = salome.ResourceParameters() + job_params.resource_required.nb_proc = 1 + return job_params + ############################## # test of python_salome job ############################## @@ -96,18 +103,16 @@ f.close() f.close() local_result_dir = os.path.join(case_test_dir, "result_py_job-") - job_params = salome.JobParameters() + job_params = self.create_JobParameters() job_params.job_type = "python_salome" job_params.job_file = job_script_file job_params.in_files = [] job_params.out_files = ["result.txt", "subdir"] - job_params.resource_required = salome.ResourceParameters() - job_params.resource_required.nb_proc = 1 launcher = salome.naming_service.Resolve('/SalomeLauncher') for resource in self.ressources: - print "Testing python_salome job on ", resource + print("Testing python_salome job on ", resource) job_params.result_directory = local_result_dir + resource job_params.job_name = "PyJob" + resource job_params.resource_required.name = resource @@ -117,11 +122,11 @@ f.close() launcher.launchJob(job_id) jobState = launcher.getJobState(job_id) - print "Job %d state: %s" % (job_id,jobState) + print("Job %d state: %s" % (job_id,jobState)) while jobState != "FINISHED" and jobState != "FAILED" : time.sleep(5) jobState = launcher.getJobState(job_id) - print "Job %d state: %s" % (job_id,jobState) + print("Job %d state: %s" % (job_id,jobState)) pass self.assertEqual(jobState, "FINISHED") @@ -194,22 +199,20 @@ f.close() # job params local_result_dir = os.path.join(case_test_dir, "result_com_job-") - job_params = salome.JobParameters() + job_params = self.create_JobParameters() job_params.job_type = "command" job_params.job_file = script_file job_params.env_file = env_file job_params.in_files = [data_file] job_params.out_files = ["result.txt", "copie"] job_params.local_directory = case_test_dir - job_params.resource_required = salome.ResourceParameters() - job_params.resource_required.nb_proc = 1 # create and launch the job launcher = salome.naming_service.Resolve('/SalomeLauncher') resManager= salome.lcc.getResourcesManager() for resource in self.ressources: - print "Testing command job on ", resource + print("Testing command job on ", resource) job_params.result_directory = local_result_dir + resource job_params.job_name = "CommandJob_" + resource job_params.resource_required.name = resource @@ -224,11 +227,11 @@ f.close() launcher.launchJob(job_id) # wait for the end of the job jobState = launcher.getJobState(job_id) - print "Job %d state: %s" % (job_id,jobState) + print("Job %d state: %s" % (job_id,jobState)) while jobState != "FINISHED" and jobState != "FAILED" : time.sleep(3) jobState = launcher.getJobState(job_id) - print "Job %d state: %s" % (job_id,jobState) + print("Job %d state: %s" % (job_id,jobState)) pass # verify the results @@ -274,7 +277,6 @@ f.close() # job script script_text = """ - @@ -299,7 +301,7 @@ f.close() f.close() local_result_dir = os.path.join(case_test_dir, "result_yacs_job-") - job_params = salome.JobParameters() + job_params = self.create_JobParameters() job_params.job_type = "yacs_file" job_params.job_file = job_script_file job_params.env_file = os.path.join(case_test_dir,env_file) @@ -308,14 +310,12 @@ f.close() # define the interval between two YACS schema dumps (3 seconds) import Engines job_params.specific_parameters = [Engines.Parameter("EnableDumpYACS", "3")] - job_params.resource_required = salome.ResourceParameters() - job_params.resource_required.nb_proc = 1 launcher = salome.naming_service.Resolve('/SalomeLauncher') resManager= salome.lcc.getResourcesManager() for resource in self.ressources: - print "Testing yacs job on ", resource + print("Testing yacs job on ", resource) job_params.result_directory = local_result_dir + resource job_params.job_name = "YacsJob_" + resource job_params.resource_required.name = resource @@ -331,14 +331,14 @@ f.close() jobState = launcher.getJobState(job_id) yacs_dump_success = False - print "Job %d state: %s" % (job_id,jobState) + print("Job %d state: %s" % (job_id,jobState)) while jobState != "FINISHED" and jobState != "FAILED" : time.sleep(5) jobState = launcher.getJobState(job_id) # yacs_dump_success = launcher.getJobWorkFile(job_id, "dumpState_mySchema.xml", yacs_dump_success = launcher.getJobDumpState(job_id, job_params.result_directory) - print "Job %d state: %s - dump: %s" % (job_id,jobState, yacs_dump_success) + print("Job %d state: %s - dump: %s" % (job_id,jobState, yacs_dump_success)) pass self.assertEqual(jobState, "FINISHED") @@ -379,7 +379,6 @@ f.close() # job script script_text = """ - @@ -412,10 +411,9 @@ f.close() f.close() local_result_dir = os.path.join(case_test_dir, "result_yacsopt_job-") - job_params = salome.JobParameters() + job_params = self.create_JobParameters() job_params.job_type = "yacs_file" job_params.job_file = job_script_file - #job_params.env_file = os.path.join(case_test_dir,env_file) job_params.out_files = ["result.txt"] # define the interval between two YACS schema dumps (3 seconds) @@ -423,14 +421,12 @@ f.close() job_params.specific_parameters = [Engines.Parameter("YACSDriverOptions", "-imynode.i=5 -imynode.d=3.7 -imynode.b=False -imynode.s=lili")] expected_result="i=5,d=3.7,b=False,s=lili" - job_params.resource_required = salome.ResourceParameters() - job_params.resource_required.nb_proc = 1 launcher = salome.naming_service.Resolve('/SalomeLauncher') resManager= salome.lcc.getResourcesManager() for resource in self.ressources: - print "Testing yacs job with options on ", resource + print("Testing yacs job with options on ", resource) job_params.result_directory = local_result_dir + resource job_params.job_name = "YacsJobOpt_" + resource job_params.resource_required.name = resource @@ -446,11 +442,11 @@ f.close() jobState = launcher.getJobState(job_id) yacs_dump_success = False - print "Job %d state: %s" % (job_id,jobState) + print("Job %d state: %s" % (job_id,jobState)) while jobState != "FINISHED" and jobState != "FAILED" : time.sleep(5) jobState = launcher.getJobState(job_id) - print "Job %d state: %s " % (job_id,jobState) + print("Job %d state: %s " % (job_id,jobState)) pass self.assertEqual(jobState, "FINISHED") @@ -460,6 +456,195 @@ f.close() self.verifyFile(os.path.join(job_params.result_directory, "result.txt"), expected_result) + ############################################ + # test of command job type with pre_command + ############################################ + def test_command_pre(self): + case_test_dir = os.path.join(TestCompo.test_dir, "command_pre") + mkdir_p(case_test_dir) + + # command to be run before the job + pre_command = "pre_command.sh" + pre_command_text = "echo 'it works!' > in.txt" + abs_pre_command_file = os.path.join(case_test_dir, pre_command) + f = open(abs_pre_command_file, "w") + f.write(pre_command_text) + f.close() + os.chmod(abs_pre_command_file, 0o755) + + # job script + script_file = "myTestScript.py" + script_text = """#! /usr/bin/env python +# -*- coding: utf-8 -*- + +in_f = open("in.txt", "r") +in_text = in_f.read() +in_f.close() + +f = open('result.txt', 'w') +f.write(in_text) +f.close() +""" + abs_script_file = os.path.join(case_test_dir, script_file) + f = open(abs_script_file, "w") + f.write(script_text) + f.close() + os.chmod(abs_script_file, 0o755) + + # job params + local_result_dir = os.path.join(case_test_dir, "result_com_pre_job-") + job_params = self.create_JobParameters() + job_params.job_type = "command" + job_params.job_file = script_file + job_params.pre_command = pre_command + job_params.in_files = [] + job_params.out_files = ["result.txt"] + job_params.local_directory = case_test_dir + + # create and launch the job + launcher = salome.naming_service.Resolve('/SalomeLauncher') + resManager= salome.lcc.getResourcesManager() + + for resource in self.ressources: + print "Testing command job on ", resource + job_params.result_directory = local_result_dir + resource + job_params.job_name = "CommandPreJob_" + resource + job_params.resource_required.name = resource + + # use the working directory of the resource + resParams = resManager.GetResourceDefinition(resource) + wd = os.path.join(resParams.working_directory, + "CommandPreJob" + self.suffix) + job_params.work_directory = wd + + job_id = launcher.createJob(job_params) + launcher.launchJob(job_id) + # wait for the end of the job + jobState = launcher.getJobState(job_id) + print "Job %d state: %s" % (job_id,jobState) + while jobState != "FINISHED" and jobState != "FAILED" : + time.sleep(3) + jobState = launcher.getJobState(job_id) + print "Job %d state: %s" % (job_id,jobState) + pass + + # verify the results + self.assertEqual(jobState, "FINISHED") + launcher.getJobResults(job_id, "") + self.verifyFile(os.path.join(job_params.result_directory, "result.txt"), + "it works!\n") + + ################################# + # test of command salome job type + ################################# + def test_command_salome(self): + case_test_dir = os.path.join(TestCompo.test_dir, "command_salome") + mkdir_p(case_test_dir) + + # job script + data_file = "in.txt" + script_file = "myEnvScript.py" + script_text = """#! /usr/bin/env python +# -*- coding: utf-8 -*- + +import os,sys +# verify import salome +import salome + +text_result = os.getenv("ENV_TEST_VAR","") + +f = open('result.txt', 'w') +f.write(text_result) +f.close() + +in_f = open("in.txt", "r") +in_text = in_f.read() +in_f.close() + +os.mkdir("copie") +f = open(os.path.join("copie",'copie.txt'), 'w') +f.write(in_text) +f.close() +""" + abs_script_file = os.path.join(case_test_dir, script_file) + f = open(abs_script_file, "w") + f.write(script_text) + f.close() + os.chmod(abs_script_file, 0o755) + + #environment script + env_file = "myEnv.sh" + env_text = """export ENV_TEST_VAR="expected" +""" + f = open(os.path.join(case_test_dir, env_file), "w") + f.write(env_text) + f.close() + + # write data file + f = open(os.path.join(case_test_dir, data_file), "w") + f.write("to be copied") + f.close() + + # job params + local_result_dir = os.path.join(case_test_dir, "result_comsalome_job-") + job_params = self.create_JobParameters() + job_params.job_type = "command_salome" + job_params.job_file = script_file + job_params.env_file = env_file + job_params.in_files = [data_file] + job_params.out_files = ["result.txt", "copie"] + job_params.local_directory = case_test_dir + + # create and launch the job + launcher = salome.naming_service.Resolve('/SalomeLauncher') + resManager= salome.lcc.getResourcesManager() + + for resource in self.ressources: + print "Testing command salome job on ", resource + job_params.result_directory = local_result_dir + resource + job_params.job_name = "CommandSalomeJob_" + resource + job_params.resource_required.name = resource + + # use the working directory of the resource + resParams = resManager.GetResourceDefinition(resource) + wd = os.path.join(resParams.working_directory, + "CommandSalomeJob" + self.suffix) + job_params.work_directory = wd + + job_id = launcher.createJob(job_params) + launcher.launchJob(job_id) + # wait for the end of the job + jobState = launcher.getJobState(job_id) + print "Job %d state: %s" % (job_id,jobState) + while jobState != "FINISHED" and jobState != "FAILED" : + time.sleep(3) + jobState = launcher.getJobState(job_id) + print "Job %d state: %s" % (job_id,jobState) + pass + + # verify the results + self.assertEqual(jobState, "FINISHED") + launcher.getJobResults(job_id, "") + self.verifyFile(os.path.join(job_params.result_directory, "result.txt"), + "expected") + self.verifyFile(os.path.join(job_params.result_directory, + "copie",'copie.txt'), + "to be copied") + + # verify getJobWorkFile + mydir = os.path.join(case_test_dir, "work_dir" + resource) + success = launcher.getJobWorkFile(job_id, "result.txt", mydir) + self.assertEqual(success, True) + self.verifyFile(os.path.join(mydir, "result.txt"), "expected") + + success = launcher.getJobWorkFile(job_id, "copie", mydir) + self.assertEqual(success, True) + self.verifyFile(os.path.join(mydir, "copie", "copie.txt"), + "to be copied") + pass + pass + pass + if __name__ == '__main__': # create study import salome