diff --git a/doc/examples/example_simple.tum b/doc/examples/example_simple.tum index ff61638..a45eba2 100644 --- a/doc/examples/example_simple.tum +++ b/doc/examples/example_simple.tum @@ -22,5 +22,6 @@ main: - sleep: name: sleep item - dialog: True + dialog: true timeout: 3600 + no_fail: true diff --git a/doc/examples/param.yaml b/doc/examples/param.yaml index 41514ed..6516bb8 100644 --- a/doc/examples/param.yaml +++ b/doc/examples/param.yaml @@ -9,9 +9,9 @@ global_loop_param_num: [1, 2, 3] # Plot parameters plot_log_path: /tmp/testium_plot/$(testrun_date)/$(testrun_time)/ -python_path: $(home)/tmp/tum_venv/bin/python3 +# python_path: $(home)/tmp/tum_venv/bin/python3 -lua_path: /usr/bin/lua +# lua_path: /usr/bin/lua lua_env: LUA_PATH: /usr/share/lua/5.4/?.lua;/usr/local/share/lua/5.4/?.lua;/usr/local/share/lua/5.4/?/init.lua;/usr/share/lua/5.4/?/init.lua;/usr/local/lib/lua/5.4/?.lua;/usr/local/lib/lua/5.4/?/init.lua;/usr/lib/lua/5.4/?.lua;/usr/lib/lua/5.4/?/init.lua;./?.lua;./?/init.lua;/home/francois/.luarocks/share/lua/5.4/?.lua;/home/francois/.luarocks/share/lua/5.4/?/init.lua LUA_CPATH: /usr/local/lib/lua/5.4/?.so;/usr/lib/lua/5.4/?.so;/usr/local/lib/lua/5.4/loadall.so;/usr/lib/lua/5.4/loadall.so;./?.so;/home/francois/.luarocks/lib/lua/5.4/?.so diff --git a/src/testium/interpreter/process.py b/src/testium/interpreter/process.py index 94c4d8a..2c84ac2 100644 --- a/src/testium/interpreter/process.py +++ b/src/testium/interpreter/process.py @@ -9,6 +9,7 @@ import traceback import libs.testium as tm from interpreter.utils.params import expanse from interpreter.utils.string_queue import StringQueue +from interpreter.utils.tum_except import ETUMRuntimeError from interpreter.utils.test_ctrl import TestSetController from interpreter.utils.test_init import ( env_init, @@ -19,6 +20,7 @@ from interpreter.utils.test_init import ( backup_gd, restore_gd, ) +from interpreter.utils.constants import TestItemType as cst_type from interpreter.test_set import TestSet from interpreter.utils.stdout_redirect import stdio_redir from interpreter.utils.tum_except import print_exception @@ -62,7 +64,8 @@ class TestProcess(Process): # Load the test file test_dict, cfg_files = load_test( - self.__fname, test_dir, self.__cfgf, self.__defs) + self.__fname, test_dir, self.__cfgf, self.__defs + ) # Backup the global dict in case of restart of the test gdict = backup_gd() @@ -76,15 +79,19 @@ class TestProcess(Process): # Thread for incoming control commands self.init_commands(test_set) self.cmd_th = Thread( - target=self.process_control_commands, args=[self.__tctrl]) - self.cmd_th.daemon = True + target=self.process_control_commands, + args=[self.__tctrl], + daemon=True, + ) self.cmd_th.start() test_set.report_path = locate_report_file(test_set.report_path) # Python & lua functions call subprocess initialization py_fproc = py_func_call_init(tm.gd("python_path", ""), api_request) - lua_fproc = lua_func_call_init(tm.gd("lua_path", "/usr/bin/lua"), api_request) + lua_fproc = None + if test_set.isTestTypePresent(cst_type.TYPE_LUA_FUNCTION): + lua_fproc = lua_func_call_init(tm.gd("lua_path", ""), api_request) self.__loaded = True @@ -101,10 +108,22 @@ class TestProcess(Process): try: test_run_init() print(test_run_header()) + # start the process for executing external python py_fproc.start() - lua_fproc.start() - lua_fproc.wait_ready() - py_fproc.wait_ready() + if not py_fproc.wait_ready(10): + raise ETUMRuntimeError( + f"""Impossible to start the external python execution process. +Is the python path correct ? +python_path = {tm.gd("python_path", "no python path defined")}""" + ) + if lua_fproc is not None: + lua_fproc.start() + if not lua_fproc.wait_ready(10): + raise ETUMRuntimeError( + f"""Impossible to start the external lua execution process. +Is the lua path correct ? +lua_path = {tm.gd("lua_path", "no lua path defined")}""" + ) test_set.execute() finally: if test_set.success(): @@ -116,9 +135,10 @@ class TestProcess(Process): finally: # Stop function execution process py_fproc.stop() - lua_fproc.stop() - lua_fproc.join() py_fproc.join() + if lua_fproc is not None: + lua_fproc.stop() + lua_fproc.join() self.__exec = False # Sends signal to the GUI self.send_finished() @@ -162,9 +182,7 @@ class TestProcess(Process): stdio_redir.stop() def send_finished(self): - status = {'id': None, - 'name': "test_process", - 'status': 'finished'} + status = {"id": None, "name": "test_process", "status": "finished"} self.__squeue.put(status) def execute(self): diff --git a/src/testium/interpreter/test_set.py b/src/testium/interpreter/test_set.py index d07eacf..e78e048 100644 --- a/src/testium/interpreter/test_set.py +++ b/src/testium/interpreter/test_set.py @@ -224,7 +224,9 @@ class TestSet: return res - def __findItemByIdRecursively(self, item_id, parent): + def __findItemById(self, item_id, parent=None): + if parent is None: + parent = self._rootItem res = None i = 0 while (res is None) and (i < parent.childCount()): @@ -239,9 +241,21 @@ class TestSet: return res - def __findItemById(self, item_id): - item = self.__findItemByIdRecursively(item_id, self._rootItem) - return item + def isTestTypePresent(self, test_type: cst_type, parent=None): + if parent is None: + parent = self._rootItem + res = False + i = 0 + while (not res) and (i < parent.childCount()): + if parent.child(i).type() == test_type.item_name: + res = True + i = i + 1 + + i = 0 + while (not res) and (i < parent.childCount()): + res = self.isTestTypePresent(test_type, parent.child(i)) + i = i + 1 + return res def getEnabledState(self, item_id): """Return True if the item is enabled, False otherwise.""" diff --git a/src/testium/interpreter/utils/lua_func_exec.py b/src/testium/interpreter/utils/lua_func_exec.py index cc8d690..dbe255d 100644 --- a/src/testium/interpreter/utils/lua_func_exec.py +++ b/src/testium/interpreter/utils/lua_func_exec.py @@ -44,15 +44,19 @@ def is_lua_interpreter(path: str, timeout=2) -> bool: class LuaFuncExecEngine: def __init__(self, lua_path="", request_handler=None): - if shutil.which(lua_path) is None: - raise ETUMRuntimeError( - f"The passed lua path is not pointing to an executable: '{lua_path}'" - ) + if lua_path != "": + if shutil.which(lua_path) is None: + raise ETUMRuntimeError( + f"The passed lua path is not pointing to an executable: '{lua_path}'" + ) - if not is_lua_interpreter(lua_path): - raise ETUMRuntimeError( - f"The passed executable is not a lua interpreter: '{lua_path}'" - ) + if not is_lua_interpreter(lua_path): + raise ETUMRuntimeError( + f"The passed executable is not a lua interpreter: '{lua_path}'" + ) + else: + lua_path = "/usr/bin/lua" + tm.setgd("lua_path", lua_path) self._lpath = lua_path self._req_handler = request_handler diff --git a/src/testium/interpreter/utils/py_func_exec.py b/src/testium/interpreter/utils/py_func_exec.py index 81b70f6..3b70d28 100644 --- a/src/testium/interpreter/utils/py_func_exec.py +++ b/src/testium/interpreter/utils/py_func_exec.py @@ -57,6 +57,7 @@ class PyFuncExecEngine: else: python_path = sys.executable + tm.setgd("python_path", python_path) self._ppath = python_path self._req_handler = request_handler