Skip to content

Commit

Permalink
iox-eclipse-iceoryx#615 make another timing test more robust
Browse files Browse the repository at this point in the history
Signed-off-by: Mathias Kraus <mathias.kraus@apex.ai>
  • Loading branch information
elBoberido authored and marthtz committed May 12, 2021
1 parent 1e9e54b commit d001de7
Showing 1 changed file with 12 additions and 15 deletions.
27 changes: 12 additions & 15 deletions iceoryx_posh/test/moduletests/test_popo_chunk_distributor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -563,13 +563,13 @@ TYPED_TEST(ChunkDistributor_test, DeliverToSingleQueueBlocksWhenOptionsAreSetToB
queue.setCapacity(1U);

ASSERT_FALSE(sut.tryAddQueue(queueData.get(), 0U).has_error());
sut.deliverToAllStoredQueues(this->allocateChunk(155));
sut.deliverToAllStoredQueues(this->allocateChunk(155U));

auto threadSyncSemaphore = iox::posix::Semaphore::create(iox::posix::CreateUnnamedSingleProcessSemaphore, 0U);
std::atomic_bool wasChunkDelivered{false};
std::thread t1([&] {
ASSERT_FALSE(threadSyncSemaphore->post().has_error());
sut.deliverToAllStoredQueues(this->allocateChunk(152));
sut.deliverToAllStoredQueues(this->allocateChunk(152U));
wasChunkDelivered = true;
});

Expand All @@ -579,16 +579,14 @@ TYPED_TEST(ChunkDistributor_test, DeliverToSingleQueueBlocksWhenOptionsAreSetToB

auto maybeSharedChunk = queue.tryPop();
ASSERT_THAT(maybeSharedChunk.has_value(), Eq(true));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(155));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(155U));

std::this_thread::sleep_for(std::chrono::milliseconds(this->TIMEOUT_IN_MS));
t1.join(); // join needs to be before the load to ensure the wasChunkDelivered store happens before the read
EXPECT_THAT(wasChunkDelivered.load(), Eq(true));

maybeSharedChunk = queue.tryPop();
ASSERT_THAT(maybeSharedChunk.has_value(), Eq(true));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(152));

t1.join();
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(152U));
}

TYPED_TEST(ChunkDistributor_test, MultipleBlockingQueuesWillBeFilledWhenThereBecomesSpaceAvailable)
Expand All @@ -610,13 +608,13 @@ TYPED_TEST(ChunkDistributor_test, MultipleBlockingQueuesWillBeFilledWhenThereBec
ASSERT_FALSE(sut.tryAddQueue(queueDatas.back().get(), 0U).has_error());
}

sut.deliverToAllStoredQueues(this->allocateChunk(425));
sut.deliverToAllStoredQueues(this->allocateChunk(425U));

auto threadSyncSemaphore = iox::posix::Semaphore::create(iox::posix::CreateUnnamedSingleProcessSemaphore, 0U);
std::atomic_bool wasChunkDelivered{false};
std::thread t1([&] {
ASSERT_FALSE(threadSyncSemaphore->post().has_error());
sut.deliverToAllStoredQueues(this->allocateChunk(1152));
sut.deliverToAllStoredQueues(this->allocateChunk(1152U));
wasChunkDelivered = true;
});

Expand All @@ -628,23 +626,22 @@ TYPED_TEST(ChunkDistributor_test, MultipleBlockingQueuesWillBeFilledWhenThereBec
{
auto maybeSharedChunk = queues[i].tryPop();
ASSERT_THAT(maybeSharedChunk.has_value(), Eq(true));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(425));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(425U));

std::this_thread::sleep_for(std::chrono::milliseconds(this->TIMEOUT_IN_MS));
if (i + 1U == NUMBER_OF_QUEUES)
{
// join needs to be before the load to ensure the wasChunkDelivered store happens before the read
t1.join();
EXPECT_THAT(wasChunkDelivered.load(), Eq(true));
}
else
{
std::this_thread::sleep_for(std::chrono::milliseconds(this->TIMEOUT_IN_MS));
EXPECT_THAT(wasChunkDelivered.load(), Eq(false));
}

maybeSharedChunk = queues[i].tryPop();
ASSERT_THAT(maybeSharedChunk.has_value(), Eq(true));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(1152));
EXPECT_THAT(this->getSharedChunkValue(*maybeSharedChunk), Eq(1152U));
}

t1.join();
}

0 comments on commit d001de7

Please sign in to comment.