diff options
Diffstat (limited to 'src/zenserver-test/zenserver-test.cpp')
| -rw-r--r-- | src/zenserver-test/zenserver-test.cpp | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/src/zenserver-test/zenserver-test.cpp b/src/zenserver-test/zenserver-test.cpp index 42632682b..cf7ffe4e4 100644 --- a/src/zenserver-test/zenserver-test.cpp +++ b/src/zenserver-test/zenserver-test.cpp @@ -76,10 +76,6 @@ main(int argc, char** argv) zen::CommandLineConverter ArgConverter(argc, argv); -# if ZEN_PLATFORM_LINUX - IgnoreChildSignals(); -# endif - # if ZEN_WITH_TRACE zen::TraceInit("zenserver-test"); TraceOptions TraceCommandlineOptions; @@ -103,7 +99,8 @@ main(int argc, char** argv) // somehow in the future std::string ServerClass; - bool Verbose = false; + bool Verbose = false; + bool KillStale = false; for (int i = 1; i < argc; ++i) { @@ -123,6 +120,44 @@ main(int argc, char** argv) { Verbose = true; } + else if (argv[i] == "--kill-stale-processes"sv) + { + KillStale = true; + } + } + + // Since GHA runners can leave processes behind from a previous test run, we need + // to be able to clean up any stale server processes before starting the tests to + // avoid interference + + if (KillStale) + { + ZEN_INFO("Killing any stale processes from previous test runs..."); + + auto KillStaleProcesses = [](const std::filesystem::path& Executable) { + ZEN_INFO(" Looking for stale '{}' processes...", Executable.filename()); + + for (;;) + { + ProcessHandle StaleProcess; + std::error_code Ec = FindProcess(Executable, StaleProcess, /*IncludeSelf*/ false); + + if (Ec || !StaleProcess.IsValid()) + { + break; + } + + ZEN_WARN("====> Found stale '{}' process (pid {}) from a previous test run - terminating it", + Executable.filename(), + StaleProcess.Pid()); + + StaleProcess.Terminate(0); + } + }; + + KillStaleProcesses(ProgramBaseDir / "zenserver" ZEN_EXE_SUFFIX_LITERAL); + KillStaleProcesses(ProgramBaseDir / "zenserver-test" ZEN_EXE_SUFFIX_LITERAL); + KillStaleProcesses(ProgramBaseDir / "zentest-appstub" ZEN_EXE_SUFFIX_LITERAL); } zen::tests::TestEnv.InitializeForTest(ProgramBaseDir, TestBaseDir, ServerClass); |