Skip to content

Commit

Permalink
Mitigate buffer recover test flakiness on mac (#5035) (#5058)
Browse files Browse the repository at this point in the history
* Refs #21233: Run mac-ci only and buffer recover test

Signed-off-by: Mario Domínguez López <mariodominguez@eprosima.com>

* Refs #21233: Test fix

Signed-off-by: Mario Domínguez López <mariodominguez@eprosima.com>

* Refs #21233: Apply Elianas sugg

Signed-off-by: Mario Dominguez <mariodominguez@eprosima.com>

* Refs #21233: Apply Miguels sugg

Signed-off-by: Mario Dominguez <mariodominguez@eprosima.com>

* Refs #21233: TMP force multiple test runs

Signed-off-by: Mario Dominguez <mariodominguez@eprosima.com>

* Revert "Refs #21233: TMP force multiple test runs"

This reverts commit d3e71c9.

* Revert "Refs #21233: Run mac-ci only and buffer recover test"

This reverts commit cbc2aa1.

---------

Signed-off-by: Mario Domínguez López <mariodominguez@eprosima.com>
Signed-off-by: Mario Dominguez <mariodominguez@eprosima.com>
(cherry picked from commit af92c13)

Co-authored-by: Mario Domínguez López <116071334+Mario-DL@users.noreply.github.com>
  • Loading branch information
mergify[bot] and Mario-DL authored Jul 15, 2024
1 parent edc55d3 commit ba35212
Showing 1 changed file with 37 additions and 6 deletions.
43 changes: 37 additions & 6 deletions test/unittest/transport/SharedMemTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1433,7 +1433,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 @@ -1453,7 +1453,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 @@ -1554,17 +1554,48 @@ 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 choose 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));
ASSERT_TRUE(is_port_ok);
while (!buffer_pushed)
{
buffer_pushed = pub_sub1_write->try_push(buf, is_port_ok);
//! In any case port should not be ok
ASSERT_TRUE(is_port_ok);
std::this_thread::sleep_for(std::chrono::milliseconds(150));
}
}

buffer_pushed = false;

{
is_port_ok = false;
ASSERT_TRUE(pub_sub2_write->try_push(buf, is_port_ok));
ASSERT_TRUE(is_port_ok);
while (!buffer_pushed)
{
buffer_pushed = pub_sub2_write->try_push(buf, is_port_ok);
//! In any case port should not be ok
ASSERT_TRUE(is_port_ok);
std::this_thread::sleep_for(std::chrono::milliseconds(150));
}
}
}

Expand Down

0 comments on commit ba35212

Please sign in to comment.