You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ab...@apache.org on 2020/05/14 14:22:11 UTC

[nifi-minifi-cpp] branch master updated: MINIFICPP-1202 - Fix unstable failing test for MinifiConcurrentQueue

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 <hu...@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");