Skip to content

Commit

Permalink
Refs #21233: Test fix
Browse files Browse the repository at this point in the history
Signed-off-by: Mario Domínguez López <mariodominguez@eprosima.com>
  • Loading branch information
Mario-DL committed Jul 8, 2024
1 parent cbc2aa1 commit 199ca21
Showing 1 changed file with 34 additions and 4 deletions.
38 changes: 34 additions & 4 deletions test/unittest/transport/SharedMemTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1447,7 +1447,7 @@ TEST_F(SHMTransportTests, buffer_recover)
{
auto buffer = listener1->pop();

if (buffer)
if (nullptr != buffer)
{
listener1_recv_count.fetch_add(1);
// This is a slow listener
Expand All @@ -1467,7 +1467,7 @@ TEST_F(SHMTransportTests, buffer_recover)
{
auto buffer = listener2->pop();

if (buffer)
if (nullptr != buffer)
{
listener2_recv_count.fetch_add(1);
std::this_thread::sleep_for(std::chrono::milliseconds(listener2_sleep_ms));
Expand Down Expand Up @@ -1568,16 +1568,46 @@ TEST_F(SHMTransportTests, buffer_recover)

exit_listeners = true;

// This third part of the test just tries to cleanly
// exit the threads.

// At this point, listeners are blocked
// in the pop() method, and the ring buffers
// may (or not) be full.

// In order to make the listeners exit the pop() method
// we have to options:
// - Waiting for the port_timeout_ms
// - try pushing another buffer, so that cv could be
// notified.

// Sleeping the thread waiting for the port timeout
// is more risky as the healthy timeout port watchdog
// can be triggered, so we chosse the second option.

{
auto buf = segment->alloc_buffer(1u, std::chrono::steady_clock::time_point());
bool buffer_pushed = false;
{
is_port_ok = false;
ASSERT_TRUE(pub_sub1_write->try_push(buf, is_port_ok));
while (!buffer_pushed)
{
buffer_pushed = pub_sub1_write->try_push(buf, is_port_ok);
is_port_ok &= is_port_ok;
std::this_thread::sleep_for(std::chrono::milliseconds(150));
}
//! In any case port should not be ok
ASSERT_TRUE(is_port_ok);
}
{
is_port_ok = false;
ASSERT_TRUE(pub_sub2_write->try_push(buf, is_port_ok));
while (!buffer_pushed)
{
buffer_pushed = pub_sub2_write->try_push(buf, is_port_ok);
is_port_ok &= is_port_ok;
std::this_thread::sleep_for(std::chrono::milliseconds(150));
}
//! In any case port should not be ok
ASSERT_TRUE(is_port_ok);
}
}
Expand Down

0 comments on commit 199ca21

Please sign in to comment.