Skip to content

Commit 0a404a4

Browse files
committed
FIX: Fix flaky Stop tests on macOS
1 parent ca9b155 commit 0a404a4

File tree

2 files changed

+21
-25
lines changed

2 files changed

+21
-25
lines changed

test/src/live_blocking_tests.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ TEST_F(LiveBlockingTests, TestStop) {
256256
2},
257257
UnixNanos{std::chrono::seconds{1678910279000000000}}};
258258
std::atomic<bool> has_stopped{false};
259-
const mock::MockLsgServer mock_server{
259+
std::unique_ptr<mock::MockLsgServer> mock_server{new mock::MockLsgServer{
260260
dataset::kXnasItch, [kRec, &has_stopped](mock::MockLsgServer& self) {
261261
self.Accept();
262262
self.Authenticate();
@@ -266,21 +266,21 @@ TEST_F(LiveBlockingTests, TestStop) {
266266
}
267267
const std::string rec_str{reinterpret_cast<const char*>(&kRec),
268268
sizeof(kRec)};
269-
for (size_t i = 0; i < 5; ++i) {
270-
if (self.UncheckedSend(rec_str) <
271-
static_cast<::ssize_t>(rec_str.size())) {
272-
return;
273-
}
269+
while (self.UncheckedSend(rec_str) <
270+
static_cast<::ssize_t>(rec_str.size())) {
271+
return;
274272
}
275-
FAIL() << "Connection remained open";
276-
}};
273+
}}};
277274

278-
LiveBlocking target{logger_.get(), kKey, dataset::kXnasItch, "127.0.0.1",
279-
mock_server.Port(), false};
275+
LiveBlocking target{logger_.get(), kKey,
276+
dataset::kXnasItch, "127.0.0.1",
277+
mock_server->Port(), false};
280278
ASSERT_EQ(target.NextRecord().Get<WithTsOut<TradeMsg>>(), kRec);
281279
target.Stop();
282280
has_stopped = true;
283-
std::this_thread::sleep_for(std::chrono::milliseconds{50});
281+
// kill mock server and join thread before client goes out of scope
282+
// to ensure Stop is killing the connection, not the client's destructor
283+
mock_server.reset();
284284
}
285285
} // namespace test
286286
} // namespace databento

test/src/live_threaded_tests.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ TEST_F(LiveThreadedTests, TestStop) {
116116
TimeDeltaNanos{},
117117
100};
118118
std::atomic<std::uint32_t> call_count{};
119-
const mock::MockLsgServer mock_server{
119+
std::unique_ptr<mock::MockLsgServer> mock_server{new mock::MockLsgServer{
120120
dataset::kXnasItch, [&kRec, &call_count](mock::MockLsgServer& self) {
121121
self.Accept();
122122
self.Authenticate();
@@ -129,17 +129,14 @@ TEST_F(LiveThreadedTests, TestStop) {
129129
std::this_thread::sleep_for(std::chrono::milliseconds{50});
130130
const std::string rec_str{reinterpret_cast<const char*>(&kRec),
131131
sizeof(kRec)};
132-
for (size_t i = 0; i < 5; ++i) {
133-
if (self.UncheckedSend(rec_str) <
134-
static_cast<::ssize_t>(rec_str.size())) {
135-
return;
136-
}
132+
while (self.UncheckedSend(rec_str) <
133+
static_cast<::ssize_t>(rec_str.size())) {
137134
}
138-
FAIL() << "Connection remained open";
139-
}};
135+
}}};
140136

141-
LiveThreaded target{logger_.get(), kKey, dataset::kXnasItch, "127.0.0.1",
142-
mock_server.Port(), false};
137+
LiveThreaded target{logger_.get(), kKey,
138+
dataset::kXnasItch, "127.0.0.1",
139+
mock_server->Port(), false};
143140
target.Start(
144141
[kSchema](Metadata&& metadata) { EXPECT_EQ(metadata.schema, kSchema); },
145142
[&call_count, &kRec](const Record& rec) {
@@ -149,10 +146,9 @@ TEST_F(LiveThreadedTests, TestStop) {
149146
EXPECT_EQ(rec.Get<MboMsg>(), kRec);
150147
return databento::KeepGoing::Stop;
151148
});
152-
while (call_count < 1) {
153-
std::this_thread::yield();
154-
}
155-
std::this_thread::sleep_for(std::chrono::milliseconds{50});
149+
// kill mock server and join thread before client goes out of scope
150+
// to ensure Stop is killing the connection, not the client's destructor
151+
mock_server.reset();
156152
}
157153
} // namespace test
158154
} // namespace databento

0 commit comments

Comments
 (0)