This is an automated email from the ASF dual-hosted git repository. aboda pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
The following commit(s) were added to refs/heads/master by this push: new 17414c9 MINIFICPP-1202 - Fix unstable failing test for MinifiConcurrentQueue 17414c9 is described below commit 17414c9983754db484641eea39c64142945307ea Author: Adam Hunyadi <hunyadi....@gmail.com> AuthorDate: Thu May 14 13:52:31 2020 +0200 MINIFICPP-1202 - Fix unstable failing test for MinifiConcurrentQueue It is a test ensuring that the consumers that put back failing elements to their queue can eventually get to read new elements (so the queue is FIFO). The test was interrupting the consumer by stopping the queue. However there was no guarantee that the consumer already finished reading the data out by this time. Signed-off-by: Arpad Boda <ab...@apache.org> This closes #785 --- libminifi/test/unit/MinifiConcurrentQueueTests.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libminifi/test/unit/MinifiConcurrentQueueTests.cpp b/libminifi/test/unit/MinifiConcurrentQueueTests.cpp index 6855de2..8aa98d5 100644 --- a/libminifi/test/unit/MinifiConcurrentQueueTests.cpp +++ b/libminifi/test/unit/MinifiConcurrentQueueTests.cpp @@ -120,12 +120,13 @@ namespace MinifiConcurrentQueueTestProducersConsumers { }); } - std::thread getReaddingDequeueConsumerThread(utils::ConditionConcurrentQueue<std::string>& queue, std::vector<std::string>& results) { - return std::thread([&queue, &results] { + std::thread getReaddingDequeueConsumerThread(utils::ConditionConcurrentQueue<std::string>& queue, std::vector<std::string>& results, std::atomic_int& results_size) { + return std::thread([&queue, &results, &results_size] { std::string s; while (queue.dequeueWait(s)) { if (!std::count(results.begin(), results.end(), s)) { results.push_back(s); + results_size = results.size(); } // The consumer is busy enqueing so noone is waiting for this ;( queue.enqueue(std::move(s)); @@ -279,12 +280,16 @@ TEST_CASE("TestConditionConcurrentQueue::testProducerConsumer", "[TestConditionC /* The same test as above, but covering the ConditionConcurrentQueue */ SECTION("with readd") { - std::thread consumer { getReaddingDequeueConsumerThread(queue, results) }; + std::atomic_int results_size; + std::thread consumer { getReaddingDequeueConsumerThread(queue, results, results_size) }; std::this_thread::sleep_for(std::chrono::milliseconds(1)); std::thread producer { getSimpleProducerThread(queue) }; - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - producer.join(); + std::this_thread::sleep_for(std::chrono::milliseconds(9)); + while (results_size < 3) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } queue.stop(); + producer.join(); consumer.join(); REQUIRE(utils::StringUtils::join("-", results) == "ba-dum-tss");