From 2bbd39efe0153ae2c4b67d06c76431c83f58bf55 Mon Sep 17 00:00:00 2001 From: XiaGuochao Date: Mon, 30 Mar 2020 16:22:23 +0800 Subject: [PATCH] Create temporary paths and log files according to the structure of the test case --- test/maple_test/configs.py | 63 ++++++++++++++++++++------------------ test/maple_test/run.py | 30 +++++++++--------- test/maple_test/task.py | 46 +++++++++------------------- test/maple_test/test.py | 5 ++- test/maple_test/utils.py | 9 ++---- 5 files changed, 69 insertions(+), 84 deletions(-) diff --git a/test/maple_test/configs.py b/test/maple_test/configs.py index 5b65e3a189..3074469297 100644 --- a/test/maple_test/configs.py +++ b/test/maple_test/configs.py @@ -43,7 +43,7 @@ def parse_args(): ) test_framework_parser.add_argument( "-j", - type=int, + type=bigger_than_one_integer, metavar="", dest="processes", default=1, @@ -53,7 +53,7 @@ def parse_args(): "--retry", metavar="", default=0, - type=int, + type=bigger_than_one_integer, help="Re-run unsuccessful test cases", ) test_framework_parser.add_argument( @@ -86,7 +86,7 @@ def parse_args(): test_suite_parser = parser.add_argument_group("Test Suite arguments") test_suite_parser.add_argument( - "test_paths", nargs="*", type=complete_path, help="Test suite path" + "test_paths", nargs="*", type=complete_path, help="Test suite path", ) test_suite_parser.add_argument( "--test_cfg", @@ -99,6 +99,7 @@ def parse_args(): "--test_list", metavar="", type=complete_path, + default=None, help="testlist path for filter test cases", ) test_suite_parser.add_argument( @@ -106,6 +107,7 @@ def parse_args(): "--config_set", action="append", dest="user_config_set", + default=[], metavar="config_set_name", help="Run a test set with the specified config set name", type=str, @@ -135,6 +137,7 @@ def parse_args(): "--temp_dir", metavar="", type=complete_path, + default=None, help="Location for test execute. ", ) running_parser.add_argument( @@ -154,12 +157,14 @@ def parse_args(): "--log_dir", metavar="", type=complete_path, + default=None, help="Where to store test log", ) log_parser.add_argument( "--log_level", "-l", type=get_level_name, + default=None, help="set log level from: CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET", ) log_parser.add_argument( @@ -171,41 +176,37 @@ def parse_args(): print("Error: When specify test list, need also specify test configure file\n") parser.print_help() sys.exit(0) - if args.retry < 0: - print("The number of retry must be a positive integer.\n") - parser.print_help() - sys.exit(0) test_framework_config = { - "cfg": args.cfg or None, - "processes": args.processes or None, - "retry": args.retry or 0, - "output": args.output or None, - "debug": args.debug or None, + "cfg": args.cfg, + "processes": args.processes, + "retry": args.retry, + "output": args.output, + "debug": args.debug, "print_type": args.print_type, "progress": args.progress, } test_suite_config = { "test_paths": args.test_paths or None, - "test_cfg": args.test_cfg or None, + "test_cfg": args.test_cfg, "cli_running_config": { - "test_list": args.test_list or None, - "user_config_set": args.user_config_set or [], - "user_config": args.user_config or {}, - "user_env": args.user_env or {}, + "test_list": args.test_list, + "user_config_set": args.user_config_set, + "user_config": args.user_config, + "user_env": args.user_env, }, } running_config = { - "temp_dir": args.temp_dir or None, - "timeout": args.timeout or None, - "encoding": args.encoding or None, + "temp_dir": args.temp_dir, + "timeout": args.timeout, + "encoding": args.encoding, } log_config = { - "dir": args.log_dir or None, - "level": args.log_level or None, + "dir": args.log_dir, + "level": args.log_level, "verbose": args.verbose, } @@ -220,22 +221,19 @@ def parser_maple_test_config_file(maple_test_cfg_file): else: test_paths = [] test_suite_config = { - "test_paths": [BASE_DIR / path for path in test_paths if path] or [], + "test_paths": [BASE_DIR / path for path in test_paths if path], } log_config = { "dir": complete_path( BASE_DIR / Path(get_config_value(raw_config, "logging", "name")) - ) - or None, - "level": get_level_name(get_config_value(raw_config, "logging", "level")) - or None, + ), + "level": get_level_name(get_config_value(raw_config, "logging", "level")), } running_config = { "temp_dir": complete_path( BASE_DIR / Path(get_config_value(raw_config, "running", "temp_dir")) - ) - or None, + ), } return test_suite_config, running_config, log_config @@ -378,3 +376,10 @@ def construct_logger( def get_level_name(name: str): name = name.upper() return logging.getLevelName(name) + + +def bigger_than_one_integer(num): + inum = int(num) + if inum < 1: + raise argparse.ArgumentTypeError("{} is not bigger than one".format(num)) + return inum diff --git a/test/maple_test/run.py b/test/maple_test/run.py index 3ff4fbc4da..c2ba33a7c8 100644 --- a/test/maple_test/run.py +++ b/test/maple_test/run.py @@ -88,25 +88,23 @@ def run_commands( logger.debug("Work directory: {}".format(work_dir)) for command in commands: start = timeit.default_timer() - try: - return_code, com_out, com_err = run_command( - command, work_dir, remain_time, logger, env + + return_code, com_out, com_err = run_command( + command, work_dir, remain_time, logger, env + ) + if return_code != 0: + result = (FAIL, (return_code, command, shorten(com_err, width=84))) + err = "Run task exit unexpected : {}, Log file at: {}.log".format( + result[-1], log_config[0].get("dir") / name ) - if return_code != 0: - result = (FAIL, (return_code, command, shorten(com_err, width=84))) - err = "Run task exit unexpected : {}, Log file at: {}.log".format( - result[-1], log_config[0].get("dir") / name - ) - raise TestError(err) - except TestError as err: logger.error(err) break - else: - run_time = timeit.default_timer() - start - remain_time = remain_time - run_time - logger.debug( - "Run time: {:.2}, remain time: {:.2}".format(run_time, remain_time) - ) + + run_time = timeit.default_timer() - start + remain_time = remain_time - run_time + logger.debug( + "Run time: {:.2}, remain time: {:.2}".format(run_time, remain_time) + ) if result[0] == PASS: logger.debug("Task executed successfully") handlers = logger.handlers[:] diff --git a/test/maple_test/task.py b/test/maple_test/task.py index 142be03cca..790417f1a4 100644 --- a/test/maple_test/task.py +++ b/test/maple_test/task.py @@ -254,8 +254,6 @@ class TestSuiteTask: def run(self, process_num=1): logger = configs.LOGGER - if process_num < 0: - logger.error("The number of running processes needs to be greater than 1") if process_num == 1: logger.debug("The number of running processes is 1, which will run serial") self.serial_run_task() @@ -330,33 +328,24 @@ class TestSuiteTask: class SingleTask: def __init__(self, case, config, running_config): - self.name = "{}_task/{}".format(config.name, case.name) - self.path = Path("{}_task/{}".format(config.name, case.name)) + self.name = "{}/{}_{}".format(case.test_name, case.name, config.name) + self.path = Path(self.name) config = config.get_case_config(case) - env = config["env"] temp_dir = "{}_{}".format(self.path.name.replace(".", "_"), int(time.time())) self.work_dir = running_config["temp_dir"] / self.path.parent / temp_dir - timeout = running_config["timeout"] self.running_config = { "work_dir": self.work_dir, "log_config": (running_config["log_config"], self.name), - "timeout": timeout, - "env": env, + "timeout": running_config["timeout"], + "env": config["env"], } self.case_path = case.relative_path if case.commands: prepare_result = self.prepare(case, self.work_dir, config) - if prepare_result[0]: - self.result = (NOT_RUN, None) - log_dir = ( - running_config.get("log_config").get("dir") / self.name - ).parent - self.prepare_dir(log_dir) - else: - self.result = ( - FAIL, - prepare_result[-1], - ) + self.result = (NOT_RUN, None) + log_dir = (running_config.get("log_config").get("dir") / self.name).parent + self.prepare_dir(log_dir) + self.result = prepare_result else: self.result = (UNRESOLVED, None) @@ -365,18 +354,16 @@ class SingleTask: self._form_commands(case, config) def prepare(self, case, dest, config): - dependence = case.dependence src_path = case.path - src_dir = src_path.parent logger = configs.LOGGER if not src_path.exists(): err = "Source: {} is not existing.\n".format(src_path) logger.debug(err) - return False, err + return FAIL, err self.prepare_dir(dest) shutil.copy(str(src_path), str(dest)) logger.debug("Copy {} => {}".format(src_path, dest)) - return self.prepare_dependence(src_dir, dependence, dest, config) + return self.prepare_dependence(src_path.parent, case.dependence, dest, config) def prepare_dependence(self, src_dir, dependence, dest, config): logger = configs.LOGGER @@ -388,7 +375,7 @@ class SingleTask: src_files.append(src_path) else: return ( - False, + FAIL, "DEPENDENCE keyword error, DEPENDENCE file: {} NotFound".format( file ), @@ -405,7 +392,7 @@ class SingleTask: pass if src_files: logger.debug("Copy {} => {}".format(src_files, dest)) - return True, "" + return NOT_RUN, None @staticmethod def prepare_dir(directory): @@ -439,10 +426,7 @@ class SingleTask: end = len(key) + start + 1 if end == len(line): line = line[:start] + value + line[end:] - continue - if line[end].isalnum() or line[end] == "_": - continue - else: + elif not line[end].isalnum() and line[end] != "_": line = line[:start] + value + line[end:] return line @@ -458,8 +442,6 @@ def format_compare_command(raw_command, compare_cmd): prev_char = "" else: prev_char = raw_command[start - 1] - if prev_char.isalnum() or prev_char == "_": - continue - else: + if not prev_char.isalnum() and prev_char != "_": raw_command = raw_command[:start] + compare_cmd + raw_command[end:] return raw_command diff --git a/test/maple_test/test.py b/test/maple_test/test.py index 441c33ad0e..eb1e19e14e 100644 --- a/test/maple_test/test.py +++ b/test/maple_test/test.py @@ -26,11 +26,13 @@ class Case: if path != test_path: self.name = str(path).replace(".", "_") self.path = test_path / path + self.test_name = test_path.name else: self.name = "{}_{}".format(path.parent.name, path.name).replace(".", "_") self.path = path - self.relative_path = path + self.test_name = path.parent.name self.test_path = test_path + self.relative_path = path self.comment = comment _, comment_lines = split_comment( comment, read_file_with_multi_encoding(self.path, encoding), @@ -40,6 +42,7 @@ class Case: ] self.expect = self.extract_expect(comment_lines) self.dependence = self.extract_dependence(comment_lines) + self.result = {} @staticmethod def extract_expect(comment_lines): diff --git a/test/maple_test/utils.py b/test/maple_test/utils.py index 12eb164dd1..2a03f8d59b 100644 --- a/test/maple_test/utils.py +++ b/test/maple_test/utils.py @@ -109,8 +109,7 @@ def ls_all(path, suffix=None): """Output all files in a directory""" all_files = [] if path.is_file() and is_case(path, suffix): - all_files.append(path) - return all_files + return [path] for name, _, files in os.walk(str(path)): for file in files: if is_case(Path(name) / file, suffix): @@ -146,8 +145,7 @@ def filter_line(line, flag=None): return line line_flag = line.strip().split(":")[0].strip() if line_flag == flag: - start = len(line_flag) + 1 - new_line = line.strip()[start:].strip().lstrip(":").strip() + new_line = line.strip()[len(flag) + 1 :].strip().lstrip(":").strip() return new_line return None @@ -202,5 +200,4 @@ def is_relative(path1, path2): _p1.relative_to(_p2) except ValueError: return 0 - else: - return 1 + return 1 -- Gitee