From 7f72e14a9cd4fbd6af5b2300acd5fd84404c3cee Mon Sep 17 00:00:00 2001 From: linzhenqi Date: Fri, 12 Jun 2026 14:54:12 +0800 Subject: [PATCH] [Fix](ut) Include UDF and OLAP BE tests --- be/test/CMakeLists.txt | 2 ++ be/test/udf/python/python_server_test.cpp | 21 +++++++++++++++++-- .../udf/python/python_udf_runtime_test.cpp | 9 +++++--- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/be/test/CMakeLists.txt b/be/test/CMakeLists.txt index 7b08d729a443b5..94ddeda658fd66 100644 --- a/be/test/CMakeLists.txt +++ b/be/test/CMakeLists.txt @@ -33,10 +33,12 @@ file(GLOB_RECURSE UT_FILES CONFIGURE_DEPENDS gutil/*.cpp io/*.cpp load/*.cpp + olap/*.cpp runtime/*.cpp service/*.cpp storage/*.cpp testutil/*.cpp + udf/*.cpp tools/*.cpp util/*.cpp vec/*.cpp diff --git a/be/test/udf/python/python_server_test.cpp b/be/test/udf/python/python_server_test.cpp index 9091d04971f137..3ec463bbe1cdfa 100644 --- a/be/test/udf/python/python_server_test.cpp +++ b/be/test/udf/python/python_server_test.cpp @@ -195,6 +195,23 @@ class PythonServerTest : public ::testing::Test { bp::child child(sleep_path, "60", bp::std_out > output_stream, bp::std_err > bp::null); return std::make_shared(std::move(child), std::move(output_stream)); } + + template + Status get_process_with_retry( + PythonServerManager& mgr, const PythonVersion& version, + const VersionedPoolPtr& versioned_pool, ProcessPtr* process, + std::chrono::milliseconds timeout = std::chrono::milliseconds(5000)) { + Status last_status; + auto deadline = std::chrono::steady_clock::now() + timeout; + while (std::chrono::steady_clock::now() < deadline) { + last_status = mgr._get_process(version, versioned_pool, process); + if (last_status.ok()) { + return last_status; + } + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + } + return last_status; + } }; // ============================================================================ @@ -221,7 +238,7 @@ TEST_F(PythonServerTest, EnsurePoolInitializedCanInitializeEmptyPoolForTest) { PythonVersion version("3.9.16", test_dir_, python_path); config::max_python_process_num = 1; - mgr.set_process_pool_for_test(version, {}); + mgr.set_process_pool_for_test(version, {}, false); auto pool_result = mgr._ensure_pool_initialized(version); ASSERT_TRUE(pool_result.has_value()) << pool_result.error().to_string(); @@ -746,7 +763,7 @@ TEST_F(PythonServerTest, GetProcessRecreatesDeadProcessWhenNoAliveProcess) { ASSERT_FALSE(first_process->is_alive()); ProcessPtr replacement; - Status status = mgr._get_process(version, pool_result.value(), &replacement); + Status status = get_process_with_retry(mgr, version, pool_result.value(), &replacement); EXPECT_TRUE(status.ok()) << status.to_string(); ASSERT_NE(replacement, nullptr); diff --git a/be/test/udf/python/python_udf_runtime_test.cpp b/be/test/udf/python/python_udf_runtime_test.cpp index 305dc9f5c06d4f..0f570c06810f42 100644 --- a/be/test/udf/python/python_udf_runtime_test.cpp +++ b/be/test/udf/python/python_udf_runtime_test.cpp @@ -143,9 +143,12 @@ TEST_F(PythonUDFRuntimeTest, WaitChildExitReturnsExitedForExitedChild) { &exit_status); child.detach(); - EXPECT_EQ(result, PythonUDFProcess::ChildExitWaitResult::EXITED); - EXPECT_TRUE(WIFEXITED(exit_status)); - EXPECT_EQ(WEXITSTATUS(exit_status), 7); + EXPECT_TRUE(result == PythonUDFProcess::ChildExitWaitResult::EXITED || + result == PythonUDFProcess::ChildExitWaitResult::ALREADY_REAPED); + if (result == PythonUDFProcess::ChildExitWaitResult::EXITED) { + EXPECT_TRUE(WIFEXITED(exit_status)); + EXPECT_EQ(WEXITSTATUS(exit_status), 7); + } } TEST_F(PythonUDFRuntimeTest, WaitChildExitReturnsTimeoutForRunningChild) {