From df6cd3303a0d90cc8fbf0698f5ad3a984ef7d4eb Mon Sep 17 00:00:00 2001 From: Irina Efode Date: Mon, 13 Mar 2023 14:23:26 +0400 Subject: [PATCH] [CONFOMANCE] Add handling crashes (#16214) * [CONFOMANCE] Add handling crashes * Fix win paths --- .../layer_tests_summary/run_parallel.py | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/tests/ie_test_utils/functional_test_utils/layer_tests_summary/run_parallel.py b/src/tests/ie_test_utils/functional_test_utils/layer_tests_summary/run_parallel.py index e9e19ee46d3..7acdd8efaf4 100644 --- a/src/tests/ie_test_utils/functional_test_utils/layer_tests_summary/run_parallel.py +++ b/src/tests/ie_test_utils/functional_test_utils/layer_tests_summary/run_parallel.py @@ -82,13 +82,22 @@ class TaskManager: thread.start() return thread + @staticmethod + def __normilize_path_in_args(command: str): + args = shlex.split(command) + for arg in args: + path = Path(arg) + if path.exists(): + arg = path.expanduser().resolve() + return args + def init_worker(self): if len(self._command_list) <= self._idx: logger.warning(f"Skip worker initialiazation. Command list lenght <= worker index") return log_file_name = self._log_filename.replace(LOG_NAME_REPLACE_STR, str(self._idx + self._prev_run_cmd_length)) with open(log_file_name, "w") as log_file: - args = shlex.split(self._command_list[self._idx]) + args = self.__normilize_path_in_args(self._command_list[self._idx]) worker = self.__create_thread( self._process_list.append(Popen(args, stdout=log_file, stderr=log_file))) self._workers.append(worker) @@ -112,7 +121,7 @@ class TaskManager: continue def __update_process(self, pid:int, log_file): - args = shlex.split(self._command_list[self._idx]) + args = self.__normilize_path_in_args(self._command_list[self._idx]) self._process_list[pid] = Popen(args, stdout=log_file, stderr=log_file) def update_worker(self): @@ -162,7 +171,6 @@ class TestParallelRunner: self._disabled_tests = list() self._total_test_cnt = 0 - def __init_basic_command_line_for_exec_file(self, test_command_line: list): command = f'{self._exec_file_path}' is_input_folder = False @@ -193,12 +201,20 @@ class TestParallelRunner: input_string = input_string.replace(symbol, '*') return input_string - def __get_test_list_by_runtime(self): test_list_file_name = os.path.join(self._working_dir, "test_list.lst") + if os.path.isfile(test_list_file_name): + os.remove(test_list_file_name) command_to_get_test_list = self._command + f' --gtest_list_tests >> {test_list_file_name}' logger.info(f"Get test list using command: {command_to_get_test_list}") - run(command_to_get_test_list, check=True, shell=True) + run_res = run(command_to_get_test_list, check=True, shell=True) + if run_res.stderr != "" and run_res.stderr != None: + logger.error(f"Ooops! Something is going wrong... {run_res.stderr}") + exit(-1) + + if not os.path.isfile(test_list_file_name): + logger.error(f"The test list file does not exists! Please check the process output!") + exit(-1) test_list = list() with open(test_list_file_name) as test_list_file: @@ -216,9 +232,11 @@ class TestParallelRunner: test_list_file.close() os.remove(test_list_file_name) logger.info(f"Len test_list_runtime (without disabled tests): {len(test_list)}") + if len(test_list) == 0: + logger.warning(f"Look like there are not tests to run! Please check the filters!") + exit(0) return test_list - def __get_test_list_by_cache(self): test_list_cache = list() if os.path.isfile(self._cache_path): @@ -233,7 +251,6 @@ class TestParallelRunner: logger.info(f"Len test_list_cache: {len(test_list_cache)}") return test_list_cache - def __generate_test_lists(self, test_list_cache: list, test_list_runtime:list): cached_test_list = list() runtime_test_test = list() @@ -253,7 +270,6 @@ class TestParallelRunner: logger.info(f'Test count from runtime: {len(runtime_test_test)}') return cached_test_list, runtime_test_test - def __prepare_smart_filters(self, proved_test_list:list): res_test_filters = list() def_length = len(self._command) + len(" --gtest_filter=") @@ -317,7 +333,7 @@ class TestParallelRunner: if not os.path.isfile(self._exec_file_path): logger.error(f"Test executable file {self._exec_file_path} is not exist!") sys.exit(-1) - + test_list_runtime = self.__get_test_list_by_runtime() test_list_cache = self.__get_test_list_by_cache() @@ -344,7 +360,6 @@ class TestParallelRunner: break return task_manager.compelete_all_processes() - def run(self): if TaskManager.process_timeout == -1: TaskManager.process_timeout = DEFAULT_PROCESS_TIMEOUT @@ -364,7 +379,6 @@ class TestParallelRunner: logger.info(f"Execute jobs taken from cache") self.__execute_tests(filters_cache, worker_cnt) - t_end = datetime.datetime.now() total_seconds = (t_end - t_start).total_seconds() sec = round(total_seconds % 60, 2) @@ -372,7 +386,6 @@ class TestParallelRunner: h = int(total_seconds / 3600) % 60 logger.info(f"Run test parallel is finished successfully. Total time is {h}h:{min}m:{sec}s") - def postprocess_logs(self): test_results = dict() logger.info(f"Log analize is started") @@ -496,7 +509,6 @@ class TestParallelRunner: csv_writer.writerow([name, priority]) logger.info(f"Fix priorities list is saved to: {fix_priority_path}") - disabled_tests_path = os.path.join(logs_dir, "disabled_tests.log") with open(disabled_tests_path, "w") as disabled_tests_file: for i in range(len(self._disabled_tests)):