Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf3bba06

Browse files
authored
Fix benchmark test issue on Windows (yhirose#2258)
1 parent2da189f commitf3bba06

File tree

1 file changed

+68
-40
lines changed

1 file changed

+68
-40
lines changed

‎test/test.cc‎

Lines changed: 68 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#endif
1212
#include<gtest/gtest.h>
1313

14+
#include<algorithm>
1415
#include<atomic>
1516
#include<chrono>
1617
#include<cstdio>
@@ -78,6 +79,73 @@ static void read_file(const std::string &path, std::string &out) {
7879
fs.read(&out[0],static_cast<std::streamsize>(size));
7980
}
8081

82+
voidperformance_test(constchar *host) {
83+
auto port =1234;
84+
85+
Server svr;
86+
87+
svr.Get("/benchmark", [&](const Request &/*req*/, Response &res) {
88+
res.set_content("Benchmark Response","text/plain");
89+
});
90+
91+
auto listen_thread =std::thread([&]() { svr.listen(host, port); });
92+
auto se =detail::scope_exit([&] {
93+
svr.stop();
94+
listen_thread.join();
95+
ASSERT_FALSE(svr.is_running());
96+
});
97+
98+
svr.wait_until_ready();
99+
100+
Clientcli(host, port);
101+
102+
// Warm-up request to establish connection and resolve DNS
103+
auto warmup_res = cli.Get("/benchmark");
104+
ASSERT_TRUE(warmup_res);// Ensure server is responding correctly
105+
106+
// Run multiple trials and collect timings
107+
constint num_trials =20;
108+
std::vector<int64_t> timings;
109+
timings.reserve(num_trials);
110+
111+
for (int i =0; i < num_trials; i++) {
112+
auto start =std::chrono::high_resolution_clock::now();
113+
auto res = cli.Get("/benchmark");
114+
auto end =std::chrono::high_resolution_clock::now();
115+
116+
auto elapsed =
117+
std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
118+
.count();
119+
120+
// Assertions after timing measurement to avoid overhead
121+
ASSERT_TRUE(res);
122+
EXPECT_EQ(StatusCode::OK_200, res->status);
123+
124+
timings.push_back(elapsed);
125+
}
126+
127+
// Calculate 25th percentile (lower quartile)
128+
std::sort(timings.begin(), timings.end());
129+
auto p25 = timings[num_trials /4];
130+
131+
// Format timings for output
132+
std::ostringstream timings_str;
133+
timings_str <<"[";
134+
for (size_t i =0; i < timings.size(); i++) {
135+
if (i >0) timings_str <<",";
136+
timings_str << timings[i];
137+
}
138+
timings_str <<"]";
139+
140+
// Localhost HTTP GET should be fast even in CI environments
141+
EXPECT_LE(p25,5) <<"25th percentile performance is too slow:" << p25
142+
<<"ms (Issue #1777). Timings:" << timings_str.str();
143+
}
144+
145+
TEST(BenchmarkTest, localhost) {performance_test("localhost"); }
146+
147+
TEST(BenchmarkTest, v6) {performance_test("::1"); }
148+
81149
classUnixSocketTest : public ::testing::Test {
82150
protected:
83151
voidTearDown()override {std::remove(pathname_.c_str()); }
@@ -3634,46 +3702,6 @@ TEST_F(ServerTest, GetMethod200) {
36343702
EXPECT_EQ("Hello World!", res->body);
36353703
}
36363704

3637-
voidperformance_test(constchar *host) {
3638-
auto port =1234;
3639-
3640-
Server svr;
3641-
3642-
svr.Get("/benchmark", [&](const Request &/*req*/, Response &res) {
3643-
res.set_content("Benchmark Response","text/plain");
3644-
});
3645-
3646-
auto listen_thread =std::thread([&]() { svr.listen(host, port); });
3647-
auto se =detail::scope_exit([&] {
3648-
svr.stop();
3649-
listen_thread.join();
3650-
ASSERT_FALSE(svr.is_running());
3651-
});
3652-
3653-
svr.wait_until_ready();
3654-
3655-
Clientcli(host, port);
3656-
3657-
auto start =std::chrono::high_resolution_clock::now();
3658-
3659-
auto res = cli.Get("/benchmark");
3660-
ASSERT_TRUE(res);
3661-
EXPECT_EQ(StatusCode::OK_200, res->status);
3662-
3663-
auto end =std::chrono::high_resolution_clock::now();
3664-
3665-
auto elapsed =
3666-
std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
3667-
.count();
3668-
3669-
EXPECT_LE(elapsed,5) <<"Performance is too slow:" << elapsed
3670-
<<"ms (Issue #1777)";
3671-
}
3672-
3673-
TEST(BenchmarkTest, localhost) {performance_test("localhost"); }
3674-
3675-
TEST(BenchmarkTest, v6) {performance_test("::1"); }
3676-
36773705
TEST_F(ServerTest, GetEmptyFile) {
36783706
auto res = cli_.Get("/empty_file");
36793707
ASSERT_TRUE(res);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp