From d001de70d772628ed402c913a3ef944f7dd6fa3d Mon Sep 17 00:00:00 2001 From: Mathias Kraus Date: Sat, 3 Apr 2021 14:07:14 +0200 Subject: [PATCH] iox-#615 make another timing test more robust Signed-off-by: Mathias Kraus --- .../test_popo_chunk_distributor.cpp | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/iceoryx_posh/test/moduletests/test_popo_chunk_distributor.cpp b/iceoryx_posh/test/moduletests/test_popo_chunk_distributor.cpp index 8b71e3ad648..ea0e07dc93b 100644 --- a/iceoryx_posh/test/moduletests/test_popo_chunk_distributor.cpp +++ b/iceoryx_posh/test/moduletests/test_popo_chunk_distributor.cpp @@ -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; }); @@ -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) @@ -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; }); @@ -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(); } -