From 55c5f8190da1b21fe1ede7f15b40a4c684054a4a Mon Sep 17 00:00:00 2001 From: haoranchen Date: Mon, 24 Mar 2025 21:19:30 +0800 Subject: [PATCH] test: add python script for windows cases to replace the bat (#30386) * test: add python scripts for test windows cases replace the old bat scripts * refactor: update color_echo function to use log_file instead of error_file * ci: update workflow to use fixed branch for Windows test runs * chore: add empty line for better readability in tdengine-test.yml * test:fix from branch fix/xftan/taos-shell-configdir * fix: replace global variant configDir with local variant on taos * fix: remove check cfgdir exist * fix: restore no input msg * fix: move dumpConfig after taos_options * fix: dump Config on windows failed * fix: move configDirShell variant to shellArgument.c * fix: get last char pos is -1 * ci: update Windows test workflow to use main branch and enhance test output * ci: remove unnecessary line from tdengine-test workflow --------- Co-authored-by: Alex Duan <417921451@qq.com> --- source/common/src/tglobal.c | 6 ++- tests/system-test/test-win.py | 75 ++++++++++++++++++++++++++++++++ tools/shell/inc/shellInt.h | 1 + tools/shell/src/shellArguments.c | 13 ++++-- tools/shell/src/shellMain.c | 32 +++++++++----- tools/shell/src/shellUtil.c | 2 +- 6 files changed, 113 insertions(+), 16 deletions(-) create mode 100644 tests/system-test/test-win.py diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 5b495a09dc..313cc18c63 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -543,7 +543,11 @@ static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *input char cfgFile[PATH_MAX + 100] = {0}; TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX)); - char lastC = cfgDir[strlen(cfgDir) - 1]; + int32_t pos = strlen(cfgDir); + if(pos > 0) { + pos -= 1; + } + char lastC = cfgDir[pos]; char *tdDirsep = TD_DIRSEP; if (lastC == '\\' || lastC == '/') { tdDirsep = ""; diff --git a/tests/system-test/test-win.py b/tests/system-test/test-win.py new file mode 100644 index 0000000000..7b179f9e92 --- /dev/null +++ b/tests/system-test/test-win.py @@ -0,0 +1,75 @@ +import os +import subprocess +import time + +def get_time_seconds(): + current_time = time.strftime("%H:%M:%S", time.localtime()) + hh, mm, ss = map(int, current_time.split(':')) + return (hh * 60 + mm) * 60 + ss + +def color_echo(color, message, time1, log_file=None): + current_time = time.strftime("%H:%M:%S", time.localtime()) + time2 = get_time_seconds() + inter_time = time2 - time1 + print(f"End at {current_time} , cast {inter_time}s") + print(message) + if log_file: + with open(log_file, 'r') as file: + print(file.read()) + +def check_skip_case(line): + skip_case = False + if line == "python3 ./test.py -f 1-insert/insertWithMoreVgroup.py": + skip_case = False + elif line == "python3 ./test.py -f 2-query/queryQnode.py": + skip_case = False + elif "-R" in line: + skip_case = True + return skip_case + +def run_tests(case_file): + exit_num = 0 + a = 0 + failed_tests = [] + + with open(case_file, 'r') as file: + for line in file: + line = line.strip() + if check_skip_case(line): + continue + + if line.startswith("python3"): + a += 1 + print(f"{a} Processing {line}") + time1 = get_time_seconds() + print(f"Start at {time.strftime('%H:%M:%S', time.localtime())}") + + log_file = f"log_{a}.txt" + with open(log_file, 'w') as log: + process = subprocess.run(line.split(), stdout=log, stderr=log) + if process.returncode != 0: + color_echo("0c", "failed", time1, log_file) + exit_num = 8 + failed_tests.append(line) + else: + color_echo("0a", "Success", time1) + + if failed_tests: + with open("failed.txt", 'w') as file: + for test in failed_tests: + file.write(test + '\n') + + return exit_num + +if __name__ == "__main__": + case_file = "simpletest.bat" + if len(os.sys.argv) > 1 and os.sys.argv[1] == "full": + case_file = "fulltest.sh" + if len(os.sys.argv) > 2: + case_file = os.sys.argv[2] + + exit_code = run_tests(case_file) + print(f"Final exit code: {exit_code}") + if exit_code != 0: + print("One or more tests failed.") + os.sys.exit(exit_code) \ No newline at end of file diff --git a/tools/shell/inc/shellInt.h b/tools/shell/inc/shellInt.h index 4b27f4a939..556dec26fb 100644 --- a/tools/shell/inc/shellInt.h +++ b/tools/shell/inc/shellInt.h @@ -145,5 +145,6 @@ void shellTestNetWork(); // shellMain.c extern SShellObj shell; +extern char configDirShell[PATH_MAX]; #endif /*_TD_SHELL_INT_H_*/ diff --git a/tools/shell/src/shellArguments.c b/tools/shell/src/shellArguments.c index 0b319ac8a1..f1dbe97c15 100644 --- a/tools/shell/src/shellArguments.c +++ b/tools/shell/src/shellArguments.c @@ -15,7 +15,7 @@ #include "shellInt.h" #include "../../inc/pub.h" - +char configDirShell[PATH_MAX] = {0}; #define TAOS_CONSOLE_PROMPT_CONTINUE " -> " @@ -381,9 +381,16 @@ static int32_t shellCheckArgs() { printf("Invalid cfgdir:%s\r\n", pArgs->cfgdir); return -1; } else { - if (taosExpandDir(pArgs->cfgdir, configDir, PATH_MAX) != 0) { - tstrncpy(configDir, pArgs->cfgdir, PATH_MAX); + if (taosExpandDir(pArgs->cfgdir, configDirShell, PATH_MAX) != 0) { + tstrncpy(configDirShell, pArgs->cfgdir, PATH_MAX); } + // check cfg dir exist + /* + if(!taosIsDir(configDirShell)) { + printf("folder not exist. cfgdir:%s expand:%s\r\n", pArgs->cfgdir, configDirShell); + configDirShell[0] = 0; + return -1; + }*/ } } diff --git a/tools/shell/src/shellMain.c b/tools/shell/src/shellMain.c index edf52da778..96ae448f25 100644 --- a/tools/shell/src/shellMain.c +++ b/tools/shell/src/shellMain.c @@ -55,6 +55,7 @@ void initArgument(SShellArgs *pArgs) { } int main(int argc, char *argv[]) { + int code = 0; #if !defined(WINDOWS) taosSetSignal(SIGBUS, shellCrashHandler); #endif @@ -92,19 +93,34 @@ int main(int argc, char *argv[]) { return 0; } - if (shell.args.is_dump_config) { - shellDumpConfig(); - return 0; - } - if (getDsnEnv() != 0) { return -1; } + // first taos_option(TSDB_OPTION_DRIVER ...) no load driver if (setConnMode(shell.args.connMode, shell.args.dsn, false)) { return -1; } + // second taos_option(TSDB_OPTION_CONFIGDIR ...) set configDir global + if (configDirShell[0] != 0) { + code = taos_options(TSDB_OPTION_CONFIGDIR, configDirShell); + if (code) { + fprintf(stderr, "failed to set config dir:%s code:[0x%08X]\r\n", configDirShell, code); + return -1; + } + //printf("Load with input config dir:%s\n", configDirShell); + } + +#ifndef TD_ASTRA + // dump config + if (shell.args.is_dump_config) { + shellDumpConfig(); + return 0; + } +#endif + + // taos_init if (taos_init() != 0) { fprintf(stderr, "failed to init shell since %s [0x%08X]\r\n", taos_errstr(NULL), taos_errno(NULL)); return -1; @@ -114,12 +130,6 @@ int main(int argc, char *argv[]) { taos_set_hb_quit(1); #ifndef TD_ASTRA - if (shell.args.is_dump_config) { - shellDumpConfig(); - taos_cleanup(); - return 0; - } - if (shell.args.is_startup || shell.args.is_check) { shellCheckServerStatus(); taos_cleanup(); diff --git a/tools/shell/src/shellUtil.c b/tools/shell/src/shellUtil.c index 73150b89d3..03a04c2946 100644 --- a/tools/shell/src/shellUtil.c +++ b/tools/shell/src/shellUtil.c @@ -80,7 +80,7 @@ void shellGenerateAuth() { void shellDumpConfig() { (void)osDefaultInit(); - if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1) != 0) { + if (taosInitCfg(configDirShell, NULL, NULL, NULL, NULL, 1) != 0) { fprintf(stderr, "failed to load cfg since %s [0x%08X]\n", terrstr(), terrno); return; }