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]") {
