This is an automated email from the ASF dual-hosted git repository.

fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit 0812e34e31d07bf202247c72ba8a88bb1c655920
Author: Gabor Gyimesi <[email protected]>
AuthorDate: Mon Aug 29 18:15:24 2022 +0200

    MINIFICPP-1931 Stabilize ResourceQueueTests
    
    No limitation TC moved to single threaded TC to avoid concurrency issues
    
    Co-authored-by: Martin Zink <[email protected]>
    Signed-off-by: Ferenc Gerlits <[email protected]>
    This closes #1411
---
 libminifi/test/unit/ResourceQueueTests.cpp | 59 ++++++++++++++++--------------
 1 file changed, 31 insertions(+), 28 deletions(-)

diff --git a/libminifi/test/unit/ResourceQueueTests.cpp 
b/libminifi/test/unit/ResourceQueueTests.cpp
index ea5569b65..526050477 100644
--- a/libminifi/test/unit/ResourceQueueTests.cpp
+++ b/libminifi/test/unit/ResourceQueueTests.cpp
@@ -28,48 +28,51 @@ using namespace std::literals::chrono_literals;
 
 namespace org::apache::nifi::minifi::utils::testing {
 
-TEST_CASE("maximum_number_of_creatable_resources", "[utils::ResourceQueue]") {
+TEST_CASE("Limiting resource queue to a maximum of 2 resources", 
"[utils::ResourceQueue]") {
   std::shared_ptr<core::logging::Logger> 
logger_{core::logging::LoggerFactory<ResourceQueue<int>>::getLogger()};
   LogTestController::getInstance().setTrace<ResourceQueue<int>>();
 
+  std::mutex resources_created_mutex;
   std::set<int> resources_created;
 
   auto worker = [&](int value, const std::shared_ptr<ResourceQueue<int>>& 
resource_queue) {
     auto resource = resource_queue->getResource([value]{return 
std::make_unique<int>(value);});
     std::this_thread::sleep_for(10ms);
+    std::lock_guard<std::mutex> lock(resources_created_mutex);
     resources_created.emplace(*resource);
   };
 
-  SECTION("Maximum 2 resources") {
-    auto resource_queue = ResourceQueue<int>::create(2, logger_);
-    std::thread thread_one{[&] { worker(1, resource_queue); }};
-    std::thread thread_two{[&] { worker(2, resource_queue); }};
-    std::thread thread_three{[&] { worker(3, resource_queue); }};
+  auto resource_queue = ResourceQueue<int>::create(2, logger_);
+  std::thread thread_one{[&] { worker(1, resource_queue); }};
+  std::thread thread_two{[&] { worker(2, resource_queue); }};
+  std::thread thread_three{[&] { worker(3, resource_queue); }};
 
-    thread_one.join();
-    thread_two.join();
-    thread_three.join();
+  thread_one.join();
+  thread_two.join();
+  thread_three.join();
 
-    CHECK(!resources_created.empty());
-    CHECK(resources_created.size() <= 2);
-  }
+  CHECK(!resources_created.empty());
+  CHECK(resources_created.size() <= 2);
+}
 
-  SECTION("No Maximum resources") {
-    LogTestController::getInstance().clear();
-    auto resource_queue = ResourceQueue<int>::create(std::nullopt, logger_);
-    std::thread thread_one{[&] { worker(1, resource_queue); }};
-    std::thread thread_two{[&] { worker(2, resource_queue); }};
-    std::thread thread_three{[&] { worker(3, resource_queue); }};
-
-    thread_one.join();
-    thread_two.join();
-    thread_three.join();
-
-    CHECK(!resources_created.empty());
-    CHECK(!LogTestController::getInstance().contains("Waiting for resource", 
0ms));
-    CHECK(LogTestController::getInstance().contains("Number of instances: 3", 
0ms));
-    CHECK(resources_created.size() <= 3);
-  }
+TEST_CASE("Resource limitation is not set to the resource queue", 
"[utils::ResourceQueue]") {
+  std::shared_ptr<core::logging::Logger> 
logger_{core::logging::LoggerFactory<ResourceQueue<int>>::getLogger()};
+  LogTestController::getInstance().setTrace<ResourceQueue<int>>();
+  LogTestController::getInstance().clear();
+  auto resource_queue = ResourceQueue<int>::create(std::nullopt, logger_);
+  std::set<int> resources_created;
+
+  auto resource_wrapper_one = resource_queue->getResource([]{return 
std::make_unique<int>(1);});
+  auto resource_wrapper_two = resource_queue->getResource([]{return 
std::make_unique<int>(2);});
+  auto resource_wrapper_three = resource_queue->getResource([]{return 
std::make_unique<int>(3);});
+
+  resources_created.emplace(*resource_wrapper_one);
+  resources_created.emplace(*resource_wrapper_two);
+  resources_created.emplace(*resource_wrapper_three);
+
+  CHECK(!LogTestController::getInstance().contains("Waiting for resource", 
0ms));
+  CHECK(LogTestController::getInstance().contains("Number of instances: 3", 
0ms));
+  CHECK(resources_created.size() == 3);
 }
 
 TEST_CASE("resource returns when it goes out of scope", 
"[utils::ResourceQueue]") {

Reply via email to