Skip to content

Commit 972e62c

Browse files
committed
Stabilize timing-sensitive tests
1 parent 0f7a309 commit 972e62c

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

tests/server/test_middleware_pipeline.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
#include <atomic>
77
#include <cassert>
88
#include <chrono>
9+
#include <condition_variable>
910
#include <iostream>
11+
#include <mutex>
1012
#include <thread>
1113
#include <vector>
1214

@@ -272,6 +274,8 @@ void test_ping_middleware()
272274

273275
std::shared_ptr<ServerSession> session;
274276
std::atomic<int> ping_count{0};
277+
std::condition_variable ping_cv;
278+
std::mutex ping_mutex;
275279

276280
session = std::make_shared<ServerSession>(
277281
"session_ping",
@@ -280,6 +284,7 @@ void test_ping_middleware()
280284
if (ServerSession::is_request(msg) && msg.value("method", "") == "ping")
281285
{
282286
ping_count.fetch_add(1);
287+
ping_cv.notify_one();
283288
Json response = {
284289
{"jsonrpc", "2.0"}, {"id", msg.at("id")}, {"result", Json::object()}};
285290
session->handle_response(response);
@@ -295,9 +300,10 @@ void test_ping_middleware()
295300

296301
pipeline.execute(ctx, [](const MiddlewareContext&) { return Json{{"tools", Json::array()}}; });
297302

298-
std::this_thread::sleep_for(std::chrono::milliseconds(50));
299-
300-
assert(ping_count.load() > 0);
303+
std::unique_lock<std::mutex> lock(ping_mutex);
304+
bool pinged = ping_cv.wait_for(lock, std::chrono::milliseconds(500),
305+
[&]() { return ping_count.load() > 0; });
306+
assert(pinged);
301307

302308
std::cout << "PASSED\n";
303309
}

tests/tools/test_tool_timeout.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,21 @@ using namespace fastmcpp;
1313
using namespace fastmcpp::tools;
1414
using namespace std::chrono_literals;
1515

16+
static void sleep_for_at_least(std::chrono::milliseconds duration)
17+
{
18+
auto deadline = std::chrono::steady_clock::now() + duration;
19+
while (std::chrono::steady_clock::now() < deadline)
20+
std::this_thread::sleep_for(1ms);
21+
}
22+
1623
void test_tool_timeout_triggers()
1724
{
1825
std::cout << " test_tool_timeout_triggers... " << std::flush;
1926

2027
Tool slow_tool("slow", Json::object(), Json::object(),
2128
[](const Json&) -> Json
2229
{
23-
std::this_thread::sleep_for(50ms);
30+
sleep_for_at_least(50ms);
2431
return Json{{"ok", true}};
2532
});
2633

@@ -47,7 +54,7 @@ void test_tool_timeout_disabled()
4754
Tool slow_tool("slow_no_timeout", Json::object(), Json::object(),
4855
[](const Json&) -> Json
4956
{
50-
std::this_thread::sleep_for(30ms);
57+
sleep_for_at_least(30ms);
5158
return Json{{"ok", true}};
5259
});
5360

@@ -65,7 +72,7 @@ void test_manager_timeout_toggle()
6572
Tool slow_tool("slow_manager", Json::object(), Json::object(),
6673
[](const Json&) -> Json
6774
{
68-
std::this_thread::sleep_for(40ms);
75+
sleep_for_at_least(40ms);
6976
return Json{{"ok", true}};
7077
});
7178

0 commit comments

Comments
 (0)