Skip to content

Commit 79ed1b0

Browse files
committed
Fix flakey TcpSocket tests
There seems to be some race between the client thread and the IO sequence setting the |state| variable.
1 parent a9c7802 commit 79ed1b0

File tree

1 file changed

+11
-20
lines changed

1 file changed

+11
-20
lines changed

test/net/tcp_socket.cpp

+11-20
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,7 @@ CATCH_TEMPLATE_TEST_CASE("AsyncTcpSocket", "[net]", fly::net::IPv4Address, fly::
393393

394394
CATCH_SECTION("Sockets may connect asynchronously")
395395
{
396-
fly::test::Signal server_signal;
397-
398-
auto server_thread = [&signal, &server_signal]()
396+
auto server_thread = [&signal]()
399397
{
400398
auto listen_socket =
401399
fly::test::create_socket<ListenSocket>(fly::net::IOMode::Synchronous);
@@ -407,12 +405,9 @@ CATCH_TEMPLATE_TEST_CASE("AsyncTcpSocket", "[net]", fly::net::IPv4Address, fly::
407405

408406
auto connected_socket = listen_socket->accept();
409407
CATCH_REQUIRE(connected_socket);
410-
411-
// Don't let the server exit until the client has verified connectivity.
412-
server_signal.wait();
413408
};
414409

415-
auto client_thread = [&socket_service, &signal, &server_signal]()
410+
auto client_thread = [&socket_service, &signal]()
416411
{
417412
fly::test::Signal client_signal;
418413

@@ -423,19 +418,17 @@ CATCH_TEMPLATE_TEST_CASE("AsyncTcpSocket", "[net]", fly::net::IPv4Address, fly::
423418
fly::net::ConnectedState state = client_socket->connect_async(
424419
s_localhost,
425420
s_port,
426-
[&client_signal, &state](fly::net::ConnectedState new_state)
421+
[&client_signal](fly::net::ConnectedState new_state)
427422
{
428-
state = new_state;
423+
CATCH_CHECK(new_state == fly::net::ConnectedState::Connected);
429424
client_signal.notify();
430425
});
431426

427+
CATCH_CHECK(state != fly::net::ConnectedState::Disconnected);
432428
if (state == fly::net::ConnectedState::Connecting)
433429
{
434430
client_signal.wait();
435431
}
436-
437-
CATCH_CHECK(state == fly::net::ConnectedState::Connected);
438-
server_signal.notify();
439432
};
440433

441434
fly::test::invoke(std::move(server_thread), std::move(client_thread));
@@ -476,19 +469,18 @@ CATCH_TEMPLATE_TEST_CASE("AsyncTcpSocket", "[net]", fly::net::IPv4Address, fly::
476469
fly::net::ConnectedState state = client_socket->connect_async(
477470
s_localhost,
478471
s_port,
479-
[&client_signal, &state](fly::net::ConnectedState new_state)
472+
[&client_signal](fly::net::ConnectedState new_state)
480473
{
481-
state = new_state;
474+
CATCH_CHECK(new_state == fly::net::ConnectedState::Connected);
482475
client_signal.notify();
483476
});
484477

478+
CATCH_CHECK(state != fly::net::ConnectedState::Disconnected);
485479
if (state == fly::net::ConnectedState::Connecting)
486480
{
487481
client_signal.wait();
488482
}
489483

490-
CATCH_CHECK(state == fly::net::ConnectedState::Connected);
491-
492484
CATCH_CHECK(client_socket->send_async(
493485
message,
494486
[&client_signal, &message](std::size_t bytes_sent)
@@ -675,19 +667,18 @@ CATCH_TEMPLATE_TEST_CASE("AsyncTcpSocket", "[net]", fly::net::IPv4Address, fly::
675667
fly::net::ConnectedState state = client_socket->connect_async(
676668
s_localhost,
677669
s_port,
678-
[&client_signal, &state](fly::net::ConnectedState new_state)
670+
[&client_signal](fly::net::ConnectedState new_state)
679671
{
680-
state = new_state;
672+
CATCH_CHECK(new_state == fly::net::ConnectedState::Connected);
681673
client_signal.notify();
682674
});
683675

676+
CATCH_CHECK(state != fly::net::ConnectedState::Disconnected);
684677
if (state == fly::net::ConnectedState::Connecting)
685678
{
686679
client_signal.wait();
687680
}
688681

689-
CATCH_CHECK(state == fly::net::ConnectedState::Connected);
690-
691682
CATCH_CHECK(client_socket->send_async(
692683
message,
693684
[&client_signal, &message](std::size_t bytes_sent)

0 commit comments

Comments
 (0)