X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2Fpadder%2Funittests%2Fusecase_meshJobManager.py;h=6ad9f6e88924542fcd2c9890a3966a574d8ae036;hp=09a8c09ea18dc63fcda77614c94a1a166a6c2fbf;hb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/Tools/padder/unittests/usecase_meshJobManager.py b/src/Tools/padder/unittests/usecase_meshJobManager.py index 09a8c09ea..6ad9f6e88 100644 --- a/src/Tools/padder/unittests/usecase_meshJobManager.py +++ b/src/Tools/padder/unittests/usecase_meshJobManager.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2011-2012 EDF R&D +# Copyright (C) 2011-2013 EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -17,33 +17,38 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # Author(s): Guillaume Boulant (23/03/2011) # # This script illustrates the standard use case of the component -# MeshJobManager from within a SALOME script. - +# MeshJobManager from within a SALOME script. It could be used as a +# unit test of the component. The typical procedure is: +# $ /runAppli -t +# $ /runSession /usecase_meshJobManager.py # +# ======================================================================= # Preparing the configuration parameters +# ======================================================================= # +import sys import os -from salome.smesh.spadder.configreader import ConfigReader, printConfig +import time +from salome.smesh.spadder.configreader import ConfigReader, printConfig, getPadderTestDir configReader = ConfigReader() defaultConfig = configReader.getDefaultConfig() printConfig(defaultConfig) from salome.smesh import spadder -file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med") -file_steelbar=os.path.join(spadder.getTestDataDir(),"ferraill.med") import salome import MESHJOB # -# Setup the configuration in the component. When first have to load -# the catalog of SPADDER components, then load the component +# Setup the configuration in the component. We first have to load the +# catalog of SPADDER components, then load the component # MeshJobManager, and finally configure this component. # spadder.loadSpadderCatalog() @@ -53,27 +58,142 @@ component = salome.lcc.FindOrLoadComponent("FactoryServer","MeshJobManager") config = MESHJOB.ConfigParameter(resname=defaultConfig.resname, binpath=defaultConfig.binpath, envpath=defaultConfig.envpath) -component.configure("localhost",config) + +configId = "localhost" +component.configure(configId,config) + + +# +# ======================================================================= +# Define several datasets for the different use cases +# ======================================================================= +# + +# We define several functions that create each a dataset of med files +# for testing the component. The test function number corresponds to +# the number of the test defined in the SpherePadder installation +# directory. +PADDERTESTDIR = getPadderTestDir(defaultConfig) +#PADDERTESTDIR = spadder.getTestPadderDataDir() +# +# WARN: the above instruction (spadder.getTestPadderDataDir()) +# localizes the PADDERTEST DIR using the PADDERDIR shell variable, +# while the previous one (getPadderTestDir) localizes this directory +# from data of the config (read from the configuration file +# padder.cfg). +# +def test00_parameters(): + """Test using a concrete mesh and a single steelbar mesh""" + file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med") + file_steelbar=os.path.join(spadder.getTestDataDir(),"ferraill.med") + + meshJobParameterList = [] + param = MESHJOB.MeshJobParameter(file_name=file_concrete, + file_type=MESHJOB.MED_CONCRETE, + group_name="concrete") + meshJobParameterList.append(param) + + param = MESHJOB.MeshJobParameter(file_name=file_steelbar, + file_type=MESHJOB.MED_STEELBAR, + group_name="steelbar") + meshJobParameterList.append(param) + return meshJobParameterList + +def test01_parameters(): + """One concrete mesh and two steelbar meshes""" + datadir = os.path.join(PADDERTESTDIR,"test01") + meshJobParameterList = [] + + medfile = os.path.join(datadir,"concrete.med") + param = MESHJOB.MeshJobParameter(file_name=medfile, + file_type=MESHJOB.MED_CONCRETE, + group_name="concrete") + meshJobParameterList.append(param) + + medfile = os.path.join(datadir,"ferraill.med") + param = MESHJOB.MeshJobParameter(file_name=medfile, + file_type=MESHJOB.MED_STEELBAR, + group_name="ferraill") + meshJobParameterList.append(param) + + medfile = os.path.join(datadir,"ferrtran.med") + param = MESHJOB.MeshJobParameter(file_name=medfile, + file_type=MESHJOB.MED_STEELBAR, + group_name="ferrtran") + meshJobParameterList.append(param) + + return meshJobParameterList + +def test02_parameters(): + """One steelbar mesh only, without a concrete mesh""" + datadir = os.path.join(PADDERTESTDIR,"test02") + meshJobParameterList = [] + + medfile = os.path.join(datadir,"cadreef.med") + param = MESHJOB.MeshJobParameter(file_name=medfile, + file_type=MESHJOB.MED_STEELBAR, + group_name="cadre") + meshJobParameterList.append(param) + return meshJobParameterList + +def test03_parameters(): + """One concrete mesh only, without a steelbar mesh""" + datadir = os.path.join(PADDERTESTDIR,"test03") + meshJobParameterList = [] + + medfile = os.path.join(datadir,"concrete.med") + param = MESHJOB.MeshJobParameter(file_name=medfile, + file_type=MESHJOB.MED_CONCRETE, + group_name="concrete") + meshJobParameterList.append(param) + return meshJobParameterList # +# ======================================================================= # Prepare the job parameters and initialize the job +# ======================================================================= +# + +# Choose here the use case +#meshJobParameterList = test00_parameters() +#meshJobParameterList = test01_parameters() +#meshJobParameterList = test02_parameters() +meshJobParameterList = test03_parameters() + # -meshJobParameterList = [] -param = MESHJOB.MeshJobParameter(file_name=file_concrete, - file_type=MESHJOB.MED_CONCRETE, - group_name="concrete") -meshJobParameterList.append(param) +# Prepare, start and follow-up the job +# +jobid = component.initialize(meshJobParameterList, configId) +if jobid<0: + msg = component.getLastErrorMessage() + print "ERR: %s"%msg + sys.exit(1) + +created = False +nbiter = 0 +while not created: + state = component.getState(jobid) + print "MeshJobManager ["+str(nbiter)+"] : state = "+str(state) + if state == "CREATED": + created = True + time.sleep(0.5) + nbiter+=1 -param = MESHJOB.MeshJobParameter(file_name=file_steelbar, - file_type=MESHJOB.MED_STEELBAR, - group_name="steelbar") -meshJobParameterList.append(param) -jobid = component.initialize(meshJobParameterList, "localhost") +# +# ======================================================================= +# Submit the job and start the supervision +# ======================================================================= # # Start the execution of the job identified by its job id. # ok=component.start(jobid) +if not ok: + msg = component.getLastErrorMessage() + print "ERR: %s"%msg + sys.exit(1) + +print "job started: %s"%ok # # This part illustrates how you can follow the execution of the job. @@ -84,7 +204,6 @@ all_states = run_states+end_states; ended = False nbiter = 0 -import time while not ended: state = component.getState(jobid) print "MeshJobManager ["+str(nbiter)+"] : state = "+str(state) @@ -95,8 +214,12 @@ while not ended: if state not in end_states: print "ERR: jobid = "+str(jobid)+" ended abnormally with state="+str(state) + msg = component.getLastErrorMessage() + print "ERR: %s"%msg else: print "OK: jobid = "+str(jobid)+" ended with state="+str(state) meshJobResults = component.finalize(jobid) print meshJobResults - print "You will find the results files in the directory:\n%s"%meshJobResults.results_dirname + if meshJobResults.status is not True: + print "ERR: the results are not OK: %s"%component.getLastErrorMessage() + print "ERR: see log files in %s"%meshJobResults.results_dirname