SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
SET(${PROJECT_NAME_UC}_VERSION
${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
-SET(${PROJECT_NAME_UC}_VERSION_DEV 0)
+SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
# Common CMake macros
# ===================
-# Copyright (C) 2015-2016 CEA/DEN, EDF R&D
+# Copyright (C) 2015-2017 CEA/DEN, 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
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-#SET(SALOME_TEST_DRIVER "$ENV{ABSOLUTE_APPLI_PATH}/bin/salome/appliskel/salome_test_driver.py")
SET(SALOME_TEST_DRIVER "@CMAKE_INSTALL_PREFIX@/bin/salome/appliskel/salome_test_driver.py")
SET(COMPONENT_NAME KERNEL)
salomeInstance
salomeCommand
concurrentSession
+ salomeTest
)
#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
os.path.join(home_dir, 'sha1_collections.txt'))
pass
else:
- print "WARNING: context file does not exist"
+ print "WARNING: sha1 collections file does not exist"
pass
if _config.has_key("system_conf_path") and os.path.isfile(_config["system_conf_path"]):
-Copyright (C) 2015-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+Copyright (C) 2015-2017 CEA/DEN, EDF R&D, OPEN CASCADE
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
- install test files in <module_install_path>/bin/salome/test/
- install the CTestTestfileInstall.cmake file (see below) as <module_install_path>/bin/salome/test/CTestTestfile.cmake (rename file)
- a CTestTestfileInstall.cmake that:
- - declare tests requiring a SALOME session
+ - declare tests requiring a SALOME session, or tests that do not require a SALOME session but to be tested in SALOME execution environment.
-The CTestTestfileInstall.cmake can also declare unit tests already declared in CMakeLists.txt. Actually CTestTestfileInstall.cmake declare all tests that will be runnable from SALOME application. This file MUST NOT use cmake environment variables.
-It can refer the ABSOLUTE_APPLI_PATH variable (automatically set when using application).
-If a test has to be run inside a SALOME session, use the salome_test_driver.py script that need as arguments a timeout, the test file to be run and its arguments.
+The CTestTestfileInstall.cmake can also declare unit tests already declared in CMakeLists.txt. Actually CTestTestfileInstall.cmake declares all tests that will be runnable from SALOME application. For easier maintenance shared tests may be declared in a dedicated tests.set file which is then included in both CMakeLists.txt and CTestTestfileInstall.cmake files:
+ INCLUDE(tests.set)
+
+The CTestTestfileInstall.cmake file MUST NOT use cmake environment variables. It can refer the ABSOLUTE_APPLI_PATH variable (automatically set when using application). If a test has to be run inside a SALOME session, use the salome_test_driver.py script that need as arguments a timeout, the test file to be run and its arguments.
SET(SALOME_TEST_DRIVER "$ENV{ABSOLUTE_APPLI_PATH}/bin/salome/appliskel/salome_test_driver.py")
SET(TIMEOUT 500)
ADD_TEST(SalomeLauncher python ${SALOME_TEST_DRIVER} ${TIMEOUT} test_launcher.py)
-# Copyright (C) 2015-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2015-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@staticmethod
def start(shutdown_servers=False, with_gui=False, args=[]):
import tempfile
- log = tempfile.NamedTemporaryFile(suffix='_nsport.log', delete=False)
+ log = tempfile.NamedTemporaryFile(suffix='_nsport', delete=True)
+ port_log = log.name
log.close()
-
+ port_log = port_log + "-%s.log"%(os.getpid())
instance_args = [
- "--ns-port-log=%s"%log.name,
+ "--ns-port-log=%s"%port_log,
"--shutdown-servers=%d"%shutdown_servers
] + args
salome_instance = SalomeInstance()
salome_instance.__run(args=instance_args, with_gui=with_gui)
- with open(log.name) as f:
+ with open(port_log) as f:
salome_instance.port = int(f.readline())
- os.remove(log.name)
+ os.remove(port_log)
return salome_instance
#
import subprocess
import signal
-# Run test
-def runTest(command):
- print "Running:", " ".join(command)
- p = subprocess.Popen(command)
- p.communicate()
- res = p.returncode
- # About res value:
- # A negative value -N indicates that the child was terminated by signal N (Unix only).
- # On Unix, the value 11 generally corresponds to a segmentation fault.
- return res
-#
-
# Timeout management
class TimeoutException(Exception):
"""Exception raised when test timeout is reached."""
try:
salome_instance = SalomeInstance.start(shutdown_servers=True)
port = salome_instance.get_port()
- res = runTest(test_and_args)
+ # Run the test
+ print "Running:", " ".join(test_and_args)
+ p = subprocess.Popen(test_and_args)
+ pid = p.pid
+ p.communicate()
+ res = p.returncode
+ # About res value:
+ # A negative value -N indicates that the child was terminated by signal N (Unix only).
+ # On Unix, the value 11 generally corresponds to a segmentation fault.
except TimeoutException:
print "FAILED : timeout(%s) is reached"%timeout_delay
except:
pass
try:
salome_instance.stop()
+ os.kill(pid, signal.SIGTERM)
except:
pass
if sys.platform == 'win32':
-# Copyright (C) 2013-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2013-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
ADD_SUBDIRECTORY(concurrentSession)
ADD_SUBDIRECTORY(salomeInstance)
ADD_SUBDIRECTORY(salomeCommand)
+ADD_SUBDIRECTORY(salomeTest)
-# Copyright (C) 2013-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2013-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
#
if __name__ == "__main__":
- if not os.path.isfile("hello.py"):
- with open("hello.py", "w") as f:
- f.write("print 'Hello!'")
-
unittest.main()
#
#!/usr/bin/env python
-# Copyright (C) 2013-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2013-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
p.join()
# Try to get specific port number
- p = multiprocessing.Process(target=port_reservation, args=(obtained_ports, 2812, self,))
+ p = multiprocessing.Process(target=port_reservation, args=(obtained_ports, 2899, self, 2899,))
p.start()
p.join()
# Release port
- print "release port 2812"
- p = multiprocessing.Process(target=releasePort, args=(2812,))
+ print "release port 2899"
+ p = multiprocessing.Process(target=releasePort, args=(2899,))
p.start()
p.join()
# Try to get specific port number
- p = multiprocessing.Process(target=port_reservation, args=(obtained_ports, 2812, self, 2812,))
+ p = multiprocessing.Process(target=port_reservation, args=(obtained_ports, 2899, self, 2899,))
p.start()
p.join()
--- /dev/null
+print 'Hello!'
--- /dev/null
+# Copyright (C) 2017 CEA/DEN, 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+FILE(GLOB py_scripts "${CMAKE_CURRENT_SOURCE_DIR}/*.py")
+FILE(GLOB sh_scripts "${CMAKE_CURRENT_SOURCE_DIR}/*.sh")
+LIST(APPEND scripts ${py_scripts})
+LIST(APPEND scripts ${sh_scripts})
+
+# Application tests
+INSTALL(FILES CTestTestfileInstall.cmake
+ DESTINATION ${KERNEL_TEST_DIR}/salomeTest
+ RENAME CTestTestfile.cmake)
+
+INSTALL(FILES ${scripts}
+ DESTINATION ${KERNEL_TEST_DIR}/salomeTest)
--- /dev/null
+# Copyright (C) 2017 CEA/DEN, 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SET(tname salome_test)
+
+SET(TEST_NAME ${COMPONENT_NAME}_SALOME_TEST_${tname}_bash)
+ADD_TEST(${TEST_NAME} bash ${tname}.sh)
+SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}" TIMEOUT ${TIMEOUT} WILL_FAIL ON)
+
+SET(TEST_NAME ${COMPONENT_NAME}_SALOME_TEST_${tname}_shell)
+ADD_TEST(${TEST_NAME} bash ${tname}_in_shell.sh)
+SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}" TIMEOUT ${TIMEOUT} WILL_FAIL ON)
+
+SET(TEST_NAME ${COMPONENT_NAME}_SALOME_TEST_${tname}_py)
+ADD_TEST(${TEST_NAME} python ${tname}.py)
+SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}" TIMEOUT ${TIMEOUT} WILL_FAIL ON)
+
+SET(TEST_NAME ${COMPONENT_NAME}_SALOME_TEST_${tname}_driver)
+ADD_TEST(${TEST_NAME} python ${SALOME_TEST_DRIVER} ${TIMEOUT} ${tname}.py)
+SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}" TIMEOUT ${TIMEOUT} WILL_FAIL ON)
--- /dev/null
+#!/usr/bin/env python
+# Copyright (C) 2017 CEA/DEN, 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import unittest
+
+class TestSalomeTest(unittest.TestCase):
+
+ def testMustPass(self):
+ assert(True)
+
+ def testMustFail(self):
+ assert(False)
+
+if __name__ == "__main__":
+ unittest.main()
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2017 CEA/DEN, 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+set -e # fail when any subcommand fails
+
+SOURCE="${BASH_SOURCE[0]}"
+while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
+CALLDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+
+python ${CALLDIR}/salome_test.py
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2017 CEA/DEN, 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+set -e # fail when any subcommand fails
+
+SOURCE="${BASH_SOURCE[0]}"
+while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
+CALLDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+
+echo ABSOLUTE_APPLI_PATH: $ABSOLUTE_APPLI_PATH
+$ABSOLUTE_APPLI_PATH/salome shell -- python ${CALLDIR}/salome_test.py
import os, sys, re, socket
#import commands
from server import Server
-from Utils_Identity import getShortHostName
+from salome_utils import getHostName
from launchConfigureParser import verbose
# -----------------------------------------------------------------------------
except:
pass
- if verbose(): print "Name Service... ",
- #hname=os.environ["HOST"] #commands.getoutput("hostname")
- if sys.platform == "win32":
- hname = getShortHostName();
- else:
- hname = socket.gethostname();
- #print "hname=",hname
+ if verbose(): print "Name Service... "
+ hname = getHostName()
with open(os.environ["OMNIORB_CONFIG"]) as f:
ss = re.findall("NameService=corbaname::" + hname + ":\d+", f.read())
(options, args) = parser.parse_args(args)
except Exception, e:
print e
- return
+ return {}, []
return options, args
#
return host, port, filename
#
-import CORBA
+from omniORB import CORBA
import CosNaming
import orbmodule
options, args = __parse_args(args)
host, port, filename = __get_running_session(options.port)
if not port:
- return 0
+ return 1
cmd = [
"os.environ['OMNIORB_CONFIG'] = '%s'"%filename,
absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
env_copy = os.environ.copy()
proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","runConsole.py"), pickle.dumps(cmd)], shell=False, close_fds=True, env=env_copy)
- return proc.communicate()
+ proc.communicate()
+ return proc.returncode
#
if __name__ == "__main__":
# ---
class ContainerCPPServer(Server):
- def __init__(self,args):
+ def __init__(self,args,with_gui=False):
self.args=args
self.initArgs()
self.CMD=['SALOME_Container','FactoryServer']
+ if not with_gui and self.args["valgrind_session"]:
+ l = ["valgrind"]
+ val = os.getenv("VALGRIND_OPTIONS")
+ if val:
+ l += val.split()
+ pass
+ self.CMD = l + self.CMD
+ pass
# ---
#
if ('cppContainer' in args['standalone']) | (args["gui"] == 0) :
- myServer=ContainerCPPServer(args)
+ myServer=ContainerCPPServer(args, with_gui=args["gui"]!=0)
myServer.run()
if sys.platform == "win32":
clt.waitNS("/Containers/" + theComputer + "/FactoryServer")
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
import subprocess
import re
from salomeContextUtils import getScriptsAndArgs, formatScriptsAndArgs, getShortAndExtraArgs
-from salome_utils import getUserName
+from salome_utils import getUserName, getShortHostName
# Use to display newlines (\n) in epilog
class MyParser(OptionParser):
(options, args) = parser.parse_args(short_args)
except Exception, e:
print e
- return
+ return None, []
port = options.port
host = options.host
else:
if not host:
# only PORT is given
- host = socket.gethostname()
+ host = getShortHostName()
# both MACHINE and PORT are given
_writeConfigFile(port, host)
#
os.environ['NSHOST'] = host
# determine running mode, taht is either 'local' or 'remote'
- here = socket.gethostname()
+ here = getShortHostName()
mode = "local"
if host != here and host != "localhost" and host != "no_host":
mode="remote"
sys.stderr.write("".join(errmsg))
sys.exit(1)
- return ("".join(outmsg), "".join(errmsg))
+ return 0
else:
absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
if sys.platform == "win32":
else:
cmd = ["/bin/bash", "--rcfile", absoluteAppliPath + "/.bashrc" ]
proc = subprocess.Popen(cmd, shell=False, close_fds=True)
- return proc.communicate()
+ proc.communicate()
+ return proc.returncode
#
def __copyFiles(user, machine, script, infiles, outfiles):
def __runRemoteSession(sa_obj, params):
if not params.user:
print "ERROR: The user login on remote machine MUST be given."
- return
+ return 1
if not params.directory:
print "ERROR: The remote directory MUST be given."
- return
+ return 1
# sa_obj.script may be 'python script.py' --> only process .py file
header = " ".join(sa_obj.script.split()[:-1])
os.system(command)
os.remove(tmp_script)
+ return 0
#
def runSession(params, args):
return __runLocalSession(command)
elif params.mode == "remote":
+ any_error = 0
for sa_obj in scriptArgs:
- __runRemoteSession(sa_obj, params)
+ ok = __runRemoteSession(sa_obj, params)
+ if not ok:
+ any_error = 1
+ return any_error
#
if len(configFileNames) == 0:
raise SalomeContextException("No configuration files given")
- reserved=['PATH', 'DYLD_FALLBACK_LIBRARY_PATH', 'DYLD_LIBRARY_PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'MANPATH', 'PV_PLUGIN_PATH', 'INCLUDE', 'LIBPATH', 'SALOME_PLUGINS_PATH', 'LIBRARY_PATH']
+ reserved=['PATH', 'DYLD_FALLBACK_LIBRARY_PATH', 'DYLD_LIBRARY_PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'MANPATH', 'PV_PLUGIN_PATH', 'INCLUDE', 'LIBPATH', 'SALOME_PLUGINS_PATH', 'LIBRARY_PATH', 'QT_PLUGIN_PATH']
for filename in configFileNames:
basename, extension = os.path.splitext(filename)
if extension == ".cfg":
try:
res = getattr(self, command)(options) # run appropriate method
- return res or (None, None)
+ return res or 0
except SystemExit as ex:
if ex.code != 0:
self.getLogger().error("SystemExit %s in method %s.", ex.code, command)
import runSalome
runSalome.runSalome()
+ return 0
#
def _setContext(self, args=None):
print "*** SALOME context has already been set."
print "*** Enter 'exit' (only once!) to leave SALOME context."
print "***"
- return
+ return 0
os.environ["SALOME_CONTEXT_SET"] = "yes"
print "***"
cmd = ["/bin/bash"]
proc = subprocess.Popen(cmd, shell=False, close_fds=True)
- return proc.communicate()
+ proc.communicate()
+ return proc.returncode()
#
def _runSession(self, args=None):
ports = args
if not ports:
print "Port number(s) not provided to command: salome kill <port(s)>"
- return
+ return 1
from multiprocessing import Process
from killSalomeWithPort import killMyPort
p = Process(target = killMyPort, args=(port,))
p.start()
p.join()
- pass
+ return 0
#
def _killAll(self, unused=None):
from killSalome import killAllPorts
killAllPorts()
pass
+ return 0
#
def _runTests(self, args=None):
if "-h" in args or "--help" in args:
print usage + epilog
- return
+ return 0
if "-p" in args or "--ports" in args:
import PortManager
if "-v" in args or "--version" in args:
print "Running with python", platform.python_version()
- self._runAppli(["--version"])
+ return self._runAppli(["--version"])
+
+ return 0
#
def _showDoc(self, args=None):
modules = args
if not modules:
print "Module(s) not provided to command: salome doc <module(s)>"
- return
+ return 1
appliPath = os.getenv("ABSOLUTE_APPLI_PATH")
if not appliPath:
context = pickle.loads(sys.argv[1])
args = pickle.loads(sys.argv[2])
- context._startSalome(args)
+ status = context._startSalome(args)
+ sys.exit(status)
else:
usage()
#
3. if fails, try HOST environment variable
4. if fails, return 'unknown' as default host name
"""
- import os
try:
import socket
host = socket.gethostname()
if not host: host = os.getenv("HOSTNAME")
if not host: host = os.getenv("HOST")
if not host: host = "unknown" # 'unknown' is default host name
+ try:
+ socket.gethostbyname(host)
+ except:
+ host = "localhost"
+ pass
return host
# ---
modules_list = []
if args.has_key("modules"):
- modules_list += args["modules"]
+ modules_list += [a for a in args["modules"] if a.strip()]
# KERNEL must be last in the list to locate it at the first place in PATH
if args["gui"] :
modules_list[:0] = ["GUI"]
{
PyObject* pdict = PyDict_New();
PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
- PyRun_String("import CORBA", Py_single_input, pdict, pdict);
+ PyRun_String("from omniORB import CORBA", Py_single_input, pdict, pdict);
PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
pdict, pdict);
{
PyObject* pdict = PyDict_New();
PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
- PyRun_String("import CORBA", Py_single_input, pdict, pdict);
+ PyRun_String("from omniORB import CORBA", Py_single_input, pdict, pdict);
PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
pdict, pdict);
{
PyObject* pdict = PyDict_New();
PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
- PyRun_String("import CORBA", Py_single_input, pdict, pdict);
+ PyRun_String("from omniORB import CORBA", Py_single_input, pdict, pdict);
PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
pdict, pdict);
PyObject* orb = PyDict_GetItemString(pdict, "o");
{
PyObject* pdict = PyDict_New();
PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
- PyRun_String("import CORBA", Py_single_input, pdict, pdict);
+ PyRun_String("from omniORB import CORBA", Py_single_input, pdict, pdict);
PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
pdict, pdict);
PyObject* orb = PyDict_GetItemString(pdict, "o");
-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
{
//build more complex file name to support multiple salome session
std::string aFileName = Kernel_Utils::GetTmpFileName();
+ std::ostringstream str_pid;
+ str_pid << ::getpid();
+ aFileName = aFileName + "-" + str_pid.str();
#ifndef WIN32
aFileName += ".sh";
#else
std::string command;
std::string tmpFile = BuildTemporaryFileName();
const ParserResourcesType resInfo(_resManager->GetResourceDefinition(machine));
-
+
if(resInfo.Protocol == sh)
{
return resInfo.HostName;
return false;
}
#endif
-
if salome.hasDesktop(): # in gui mode
print "**** Importing pvserver... It can take some time."
- from presentations import *
import pvserver
import pvsimple
- my_paravis = pvserver.myPVServerService
-
#====================Stage1: Importing MED file====================
print "**** Stage1: Importing MED file"
else:
print "OK"
- cell_entity = EntityType.CELL
- node_entity = EntityType.NODE
-
- #====================Stage2: Displaying vector field===============
+ #====================Stage2: Displaying presentation===============
- print "**** Stage3: Displaying vector field"
+ print "**** Stage2: Displaying presentation"
print 'Get view...................',
view = pvsimple.GetRenderView()
if view is None:
print "FAILED"
else:
- reset_view(view)
print "OK"
- print "Creating Scalar Map.......",
- scalarmap = ScalarMapOnField(med_reader, node_entity, 'vitesse', 2)
- if scalarmap is None:
+ print "Creating presentation.......",
+ prs = pvsimple.GetRepresentation(med_reader)
+ if prs is None:
print "FAILED"
else:
- bar = get_bar()
- bar.Orientation = 'Horizontal'
- bar.Position = [0.1, 0.1]
- bar.Position2 = [0.1, 0.25]
- bar.AspectRatio = 3
+ rep_list = view.Representations
+ for rep in rep_list:
+ if hasattr(rep, 'Visibility'):
+ rep.Visibility = (rep == prs)
+ pvsimple.Render(view=view)
- display_only(scalarmap, view)
- print "OK"
-
- view.ResetCamera()
-
- print "Creating Vectors..........",
- vectors = VectorsOnField(med_reader, node_entity, 'vitesse', 2)
- if vectors is None:
- print "FAILED"
- else:
- display_only(vectors, view)
- print "OK"
-
- print "Creating Iso Surfaces.....",
- isosurfaces = IsoSurfacesOnField(med_reader, node_entity, 'vitesse', 2)
- if isosurfaces is None:
- print "FAILED"
- else:
- display_only(isosurfaces, view)
- print "OK"
-
- print "Creating Cut Planes.......",
- cutplanes = CutPlanesOnField(med_reader, node_entity, 'vitesse', 2,
- nb_planes=30, orientation=Orientation.YZ)
- if cutplanes is None:
- print "FAILED"
- else:
- display_only(cutplanes, view)
+ # ---- surface representation
+ prs.SetRepresentationType('Surface')
+ view.ResetCamera()
+
print "OK"
- print "Creating Scalar Map On Deformed Shape.......",
- scalarmapondefshape = DeformedShapeAndScalarMapOnField(med_reader,
- node_entity,
- 'vitesse', 2,
- None,
- cell_entity,
- 'pression')
- if scalarmapondefshape is None:
- print "FAILED"
- else:
- display_only(scalarmapondefshape, view)
- print "OK"
-
else: # not in gui mode, Paravis can not be tested
print
-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include "BatchTest.hxx"
#include "Launcher.hxx"
+#include "Basics_Utils.hxx"
+#include "Basics_DirUtils.hxx"
#ifdef WITH_LIBBATCH
#include <libbatch/MpiImpl.hxx>
strftime(date, BUFSIZE, "%Y_%m_%d__%H_%M_%S", localtime(&curtime));
// Creating test temporary file
- _test_filename = "/tmp/";
- _test_filename += std::string(date) + "_test_cluster_file_";
- _test_filename += _batch_descr.hostname.in();
_base_filename = std::string(date) + "_test_cluster_file_" + _batch_descr.hostname.in();
+ _test_filename = Kernel_Utils::GetTmpDir() + _base_filename;
#endif
}
-// Copyright (C) 2009-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2009-2017 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <libbatch/Constants.hxx>
#endif
-using namespace std;
+#include <sstream>
Launcher::Job::Job()
{
strftime(date, BUFSIZE, "%Y_%m_%d__%H_%M_%S", localtime(&curtime));
if(!_resource_definition.working_directory.empty())
{
- std::string job_dir = std::string("/job_") + date;
+ std::string date_dir = std::string("/job_") + date;
+ std::ostringstream str_pid;
+ str_pid << ::getpid();
+ std::string job_dir = date_dir + "-" + str_pid.str();
+
_work_directory = _resource_definition.working_directory + job_dir;
}
else
-// Copyright (C) 2009-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2009-2017 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#define _chmod chmod
#endif
+#include <sstream>
+
Launcher::Job_Command::Job_Command() {_job_type = "command";}
Launcher::Job_Command::~Job_Command() {}
}
#ifdef WITH_LIBBATCH
-std::string
+std::string
Launcher::Job_Command::buildCommandScript(Batch::Parametre params, std::string launch_date)
{
// parameters
// File name
std::string launch_date_port_file = launch_date;
- std::string launch_script = Kernel_Utils::GetTmpDir() + "runCommand_" + _job_file_name + "_" + launch_date + ".sh";
+ std::ostringstream str_pid;
+ str_pid << ::getpid();
+ std::string launch_script = Kernel_Utils::GetTmpDir() + "runCommand_" + _job_file_name + "_" + launch_date + "-" + str_pid.str() + ".sh";
std::ofstream launch_script_stream;
launch_script_stream.open(launch_script.c_str(), std::ofstream::out);
-
+
// Script
launch_script_stream << "#!/bin/sh -f" << std::endl;
launch_script_stream << "cd " << work_directory << std::endl;
#define _chmod chmod
#endif
+#include <sstream>
+
Launcher::Job_SALOME::Job_SALOME() {}
Launcher::Job_SALOME::~Job_SALOME() {}
{
// parameters
std::string work_directory = params[Batch::WORKDIR].str();
-
- std::string launch_script = Kernel_Utils::GetTmpDir() + "runSalome_" + _job_file_name + "_" + _launch_date + ".sh";
+ std::ostringstream str_pid;
+ str_pid << ::getpid();
+ std::string launch_script = Kernel_Utils::GetTmpDir() + "runSalome_" + _job_file_name + "_" + _launch_date + "-" + str_pid.str() + ".sh";
std::ofstream launch_script_stream;
launch_script_stream.open(launch_script.c_str(),
std::ofstream::out
import os
import sys
import time
+import tempfile
+import errno
+
+def mkdir_p(path):
+ try:
+ os.makedirs(path)
+ except OSError as exc: # Python >2.5
+ if exc.errno == errno.EEXIST and os.path.isdir(path):
+ pass
+ else:
+ raise
# Test of SalomeLauncher.
# This test should be run in the salome environment, using "salome shell"
@classmethod
def setUpClass(cls):
# Prepare the test directory
- import shutil
- cls.test_dir = os.path.join(os.getcwd(), "test_dir")
- cls.suffix = time.strftime("-%Y-%m-%d-%H-%M-%S")
- shutil.rmtree(cls.test_dir, ignore_errors=True)
- os.mkdir(cls.test_dir)
-
+ temp = tempfile.NamedTemporaryFile()
+ cls.test_dir = os.path.join(temp.name, "test_dir")
+ name = os.path.basename(temp.name)
+ temp.close()
+ cls.suffix = time.strftime("-%Y-%m-%d-%H-%M-%S")+"-%s"%(os.getpid())
+ mkdir_p(cls.test_dir)
+
# load catalogs
# mc = salome.naming_service.Resolve('/Kernel/ModulCatalog')
# ior = salome.orb.object_to_string(mc)
##############################
def test_salome_py_job(self):
case_test_dir = os.path.join(TestCompo.test_dir, "salome_py")
- os.mkdir(case_test_dir)
-
+ mkdir_p(case_test_dir)
+
old_dir = os.getcwd()
os.chdir(case_test_dir)
-
+
# job script
script_file = "myScript.py"
job_script_file = os.path.join(case_test_dir, script_file)
f = open(job_script_file, "w")
f.write(script_text)
f.close()
-
- local_result_dir = os.path.join(case_test_dir, "result_py_job")
+
+ local_result_dir = os.path.join(case_test_dir, "result_py_job-")
job_params = salome.JobParameters()
job_params.job_type = "python_salome"
job_params.job_file = job_script_file
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
job_params.result_directory = local_result_dir + resource
pass #for
os.chdir(old_dir)
-
+
##############################
# test of command job type
##############################
def test_command(self):
case_test_dir = os.path.join(TestCompo.test_dir, "command")
- os.mkdir(case_test_dir)
-
+ mkdir_p(case_test_dir)
+
# job script
data_file = "in.txt"
script_file = "myEnvScript.py"
f.write(script_text)
f.close()
os.chmod(abs_script_file, 0o755)
-
+
#environement 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_com_job")
+ local_result_dir = os.path.join(case_test_dir, "result_com_job-")
job_params = salome.JobParameters()
job_params.job_type = "command"
job_params.job_file = script_file
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()
# use the working directory of the resource
resParams = resManager.GetResourceDefinition(resource)
wd = os.path.join(resParams.working_directory,
- "CommandJob_" + self.suffix)
+ "CommandJob" + self.suffix)
job_params.work_directory = wd
job_id = launcher.createJob(job_params)
yacs_path = os.getenv("YACS_ROOT_DIR", "")
if not os.path.isdir(yacs_path):
self.skipTest("Needs YACS module to run. Please define YACS_ROOT_DIR.")
-
+
case_test_dir = os.path.join(TestCompo.test_dir, "yacs")
- os.mkdir(case_test_dir)
-
+ mkdir_p(case_test_dir)
+
#environement 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()
-
+
# job script
script_text = """<?xml version='1.0' encoding='iso-8859-1' ?>
<proc name="newSchema_1">
f = open(job_script_file, "w")
f.write(script_text)
f.close()
-
- local_result_dir = os.path.join(case_test_dir, "result_yacs_job")
+
+ local_result_dir = os.path.join(case_test_dir, "result_yacs_job-")
job_params = salome.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)
import Engines
job_params.specific_parameters = [Engines.Parameter("EnableDumpYACS", "3")]
launcher = salome.naming_service.Resolve('/SalomeLauncher')
resManager= salome.lcc.getResourcesManager()
-
+
for resource in self.ressources:
print "Testing yacs job on ", resource
job_params.result_directory = local_result_dir + resource
# use the working directory of the resource
resParams = resManager.GetResourceDefinition(resource)
wd = os.path.join(resParams.working_directory,
- "YacsJob_" + self.suffix)
+ "YacsJob" + self.suffix)
job_params.work_directory = wd
job_id = launcher.createJob(job_params)
launcher.getJobResults(job_id, "")
self.verifyFile(os.path.join(job_params.result_directory, "result.txt"),
"expected")
-
+
##############################
# test of yacs job type using "--init_port" driver option
##############################
yacs_path = os.getenv("YACS_ROOT_DIR", "")
if not os.path.isdir(yacs_path):
self.skipTest("Needs YACS module to run. Please define YACS_ROOT_DIR.")
-
+
case_test_dir = os.path.join(TestCompo.test_dir, "yacs_opt")
- os.mkdir(case_test_dir)
-
+ mkdir_p(case_test_dir)
+
# job script
script_text = """<?xml version='1.0' encoding='iso-8859-1' ?>
<proc name="myschema">
f = open(job_script_file, "w")
f.write(script_text)
f.close()
-
- local_result_dir = os.path.join(case_test_dir, "result_yacsopt_job")
+
+ local_result_dir = os.path.join(case_test_dir, "result_yacsopt_job-")
job_params = salome.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)
import Engines
job_params.specific_parameters = [Engines.Parameter("YACSDriverOptions",
launcher = salome.naming_service.Resolve('/SalomeLauncher')
resManager= salome.lcc.getResourcesManager()
-
+
for resource in self.ressources:
print "Testing yacs job with options on ", resource
job_params.result_directory = local_result_dir + resource
# use the working directory of the resource
resParams = resManager.GetResourceDefinition(resource)
wd = os.path.join(resParams.working_directory,
- "YacsJobOpt_" + self.suffix)
+ "YacsJobOpt" + self.suffix)
job_params.work_directory = wd
job_id = launcher.createJob(job_params)
# creat study
import salome
salome.salome_init()
- unittest.main()
\ No newline at end of file
+ unittest.main()
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+import os
import unittest
import salome
import Engines
</resources>
"""
def setUp(self):
+ self.container_name = "MyContainer-%s"%(os.getpid())
pass
def test0(self):
""""""
rp=LifeCycleCORBA.ResourceParameters(policy="best",componentList=["PYHELLO"])
- p=LifeCycleCORBA.ContainerParameters(container_name="MyContainer",mode="start",resource_params=rp)
+ p=LifeCycleCORBA.ContainerParameters(container_name=self.container_name,mode="start",resource_params=rp)
co=cm.GiveContainer( p )
host1=co.getHostName()
- name1="/Containers/%s/MyContainer" % host1
+ name1="/Containers/%s/%s" % (host1,self.container_name)
self.assertEqual(co._get_name(), name1)
co=cm.GiveContainer( p )
host2=co.getHostName()
- name2="/Containers/%s/MyContainer" % host2
+ name2="/Containers/%s/%s" % (host2,self.container_name)
self.assertEqual(co._get_name(), name2)
def test1(self):
""""""
rp=LifeCycleCORBA.ResourceParameters(policy="best",componentList=["PYHELLO"])
- p=LifeCycleCORBA.ContainerParameters(container_name="MyContainer",mode="get",resource_params=rp)
+ p=LifeCycleCORBA.ContainerParameters(container_name=self.container_name,mode="get",resource_params=rp)
co=cm.GiveContainer( p )
host1=co.getHostName()
- name1="/Containers/%s/MyContainer" % host1
+ name1="/Containers/%s/%s" % (host1,self.container_name)
self.assertEqual(co._get_name(), name1)
co=cm.GiveContainer( p )
host2=co.getHostName()
- name2="/Containers/%s/MyContainer" % host2
+ name2="/Containers/%s/%s" % (host2,self.container_name)
self.assertEqual(co._get_name(), name2)
def test2(self):
""""""
rp=LifeCycleCORBA.ResourceParameters(policy="best",componentList=["PYHELLO"])
- p=LifeCycleCORBA.ContainerParameters(container_name="MyContainer",mode="getorstart",resource_params=rp)
+ p=LifeCycleCORBA.ContainerParameters(container_name=self.container_name,mode="getorstart",resource_params=rp)
co=cm.GiveContainer( p )
host1=co.getHostName()
- name1="/Containers/%s/MyContainer" % host1
+ name1="/Containers/%s/%s" % (host1,self.container_name)
self.assertEqual(co._get_name(), name1)
co=cm.GiveContainer( p )
host2=co.getHostName()
- name2="/Containers/%s/MyContainer" % host2
+ name2="/Containers/%s/%s" % (host2,self.container_name)
self.assertEqual(co._get_name(), name2)
print 'lcc.FindOrLoad_Component("FactoryServer","SalomeTestComponent") failed'
import sys
-import CORBA
+from omniORB import CORBA
import CosNaming
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
obj = orb.resolve_initial_references("NameService")
void* handle = _library_map[impl_name];
if (handle)
type_of_lib = "cpp";
- if (_library_map.count(aCompName) != 0 and !handle)
+ if (_library_map.count(aCompName) != 0 && !handle)
type_of_lib = "python";
if (type_of_lib == "Not Loaded")
_dsct->checkVarExistingAndDict(_var_name);
TransactionAddKeyValueErrorIfAlreadyExisting ret(_dsct,_var_name,key,value);
{
- bool mustRollback(true);
+ ret.perform();
+ /*bool mustRollback(true);
TrustTransaction t;
t.setTransaction(&ret,&mustRollback);
t.operate();
- mustRollback=false;//important let this line to notify t that everything was OK
+ mustRollback=false;//important let this line to notify t that everything was OK*/
}
ret.notify();
}
#endif
const hostent* pour_adip=gethostbyname(hostid.nodename);
+ if(pour_adip == NULL)
+ pour_adip=gethostbyname("localhost");
ASSERT(pour_adip!=NULL);
const in_addr ip_addr=*(struct in_addr*)(pour_adip->h_addr) ;
return duplicate(inet_ntoa(ip_addr));