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

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

commit a378b2ca75a08b866f0d66572f8b32728bae48a5
Author: Martin Zink <[email protected]>
AuthorDate: Thu Nov 20 14:33:33 2025 +0100

    MINIFICPP-2691 Fixing LogMetricsPublisher intermittent failure
    
    Closes #2073
    
    Signed-off-by: Marton Szasz <[email protected]>
---
 libminifi/test/unit/LogMetricsPublisherTests.cpp | 33 ++++++++++++------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/libminifi/test/unit/LogMetricsPublisherTests.cpp 
b/libminifi/test/unit/LogMetricsPublisherTests.cpp
index b29229f00..abf8d5509 100644
--- a/libminifi/test/unit/LogMetricsPublisherTests.cpp
+++ b/libminifi/test/unit/LogMetricsPublisherTests.cpp
@@ -38,7 +38,7 @@ class LogPublisherTestFixture {
       flow_file_repo_(core::createRepository("flowfilerepository", 
"flowfilerepository")),
       
response_node_loader_(std::make_shared<state::response::ResponseNodeLoaderImpl>(configuration_,
         
std::vector<std::shared_ptr<core::RepositoryMetricsSource>>{provenance_repo_, 
flow_file_repo_}, nullptr)),
-      publisher_("LogMetricsPublisher") {
+      
publisher_(std::make_unique<minifi::state::LogMetricsPublisher>("LogMetricsPublisher"))
 {
     provenance_repo_->initialize(configuration_);
     flow_file_repo_->initialize(configuration_);
   }
@@ -49,6 +49,7 @@ class LogPublisherTestFixture {
   LogPublisherTestFixture& operator=(const LogPublisherTestFixture&) = delete;
 
   ~LogPublisherTestFixture() {
+    publisher_.reset();  // explicit because LogTestController should outlive 
the thread in publisher_
     minifi::utils::file::delete_dir(provenance_repo_->getDirectory());
     minifi::utils::file::delete_dir(flow_file_repo_->getDirectory());
     LogTestController::getInstance().reset();
@@ -60,18 +61,18 @@ class LogPublisherTestFixture {
   std::shared_ptr<core::Repository> provenance_repo_;
   std::shared_ptr<core::Repository> flow_file_repo_;
   std::shared_ptr<state::response::ResponseNodeLoader> response_node_loader_;
-  minifi::state::LogMetricsPublisher publisher_;
+  std::unique_ptr<minifi::state::LogMetricsPublisher> publisher_;
 };
 
 TEST_CASE_METHOD(LogPublisherTestFixture, "Logging interval property is 
mandatory", "[LogMetricsPublisher]") {
   
LogTestController::getInstance().setTrace<minifi::state::LogMetricsPublisher>();
   SECTION("No logging interval is set") {
-    REQUIRE_THROWS_WITH(publisher_.initialize(configuration_, 
response_node_loader_), "General Operation: Metrics logging interval not 
configured for log metrics publisher!");
+    REQUIRE_THROWS_WITH(publisher_->initialize(configuration_, 
response_node_loader_), "General Operation: Metrics logging interval not 
configured for log metrics publisher!");
   }
   SECTION("Logging interval is set to 2 seconds") {
     
configuration_->set(minifi::Configuration::nifi_metrics_publisher_log_metrics_logging_interval,
 "2s");
     using 
org::apache::nifi::minifi::test::utils::verifyLogLinePresenceInPollTime;
-    publisher_.initialize(configuration_, response_node_loader_);
+    publisher_->initialize(configuration_, response_node_loader_);
     REQUIRE(verifyLogLinePresenceInPollTime(5s, "Metric logging interval is 
set to 2000ms"));
   }
 }
@@ -83,8 +84,8 @@ TEST_CASE_METHOD(LogPublisherTestFixture, "Verify empty 
metrics if no valid metr
   SECTION("Only invalid metrics are defined") {
     configuration_->set(Configure::nifi_metrics_publisher_metrics, 
"InvalidMetric,NotValidMetricNode");
   }
-  publisher_.initialize(configuration_, response_node_loader_);
-  publisher_.loadMetricNodes();
+  publisher_->initialize(configuration_, response_node_loader_);
+  publisher_->loadMetricNodes();
   using 
org::apache::nifi::minifi::test::utils::verifyLogLinePresenceInPollTime;
   REQUIRE(verifyLogLinePresenceInPollTime(5s, "LogMetricsPublisher is 
configured without any valid metrics!"));
 }
@@ -93,8 +94,8 @@ TEST_CASE_METHOD(LogPublisherTestFixture, "Verify multiple 
metric nodes in logs"
   
LogTestController::getInstance().setTrace<minifi::state::LogMetricsPublisher>();
   
configuration_->set(minifi::Configuration::nifi_metrics_publisher_log_metrics_logging_interval,
 "100ms");
   configuration_->set(Configure::nifi_metrics_publisher_metrics, 
"RepositoryMetrics,DeviceInfoNode");
-  publisher_.initialize(configuration_, response_node_loader_);
-  publisher_.loadMetricNodes();
+  publisher_->initialize(configuration_, response_node_loader_);
+  publisher_->loadMetricNodes();
   using 
org::apache::nifi::minifi::test::utils::verifyLogLinePresenceInPollTime;
   std::string expected_log_1 = R"([info] {
     "LogMetrics": {)";
@@ -129,8 +130,8 @@ TEST_CASE_METHOD(LogPublisherTestFixture, "Verify reloading 
different metrics",
   
LogTestController::getInstance().setTrace<minifi::state::LogMetricsPublisher>();
   
configuration_->set(minifi::Configuration::nifi_metrics_publisher_log_metrics_logging_interval,
 "100ms");
   configuration_->set(Configure::nifi_metrics_publisher_metrics, 
"RepositoryMetrics");
-  publisher_.initialize(configuration_, response_node_loader_);
-  publisher_.loadMetricNodes();
+  publisher_->initialize(configuration_, response_node_loader_);
+  publisher_->loadMetricNodes();
   using 
org::apache::nifi::minifi::test::utils::verifyLogLinePresenceInPollTime;
   std::string expected_log = R"([info] {
     "LogMetrics": {
@@ -157,11 +158,11 @@ TEST_CASE_METHOD(LogPublisherTestFixture, "Verify 
reloading different metrics",
     }
 })";
   REQUIRE(verifyLogLinePresenceInPollTime(5s, expected_log));
-  publisher_.clearMetricNodes();
+  publisher_->clearMetricNodes();
   LogTestController::getInstance().reset();
   
LogTestController::getInstance().setTrace<minifi::state::LogMetricsPublisher>();
   configuration_->set(Configure::nifi_metrics_publisher_metrics, 
"DeviceInfoNode");
-  publisher_.loadMetricNodes();
+  publisher_->loadMetricNodes();
   expected_log = R"([info] {
     "LogMetrics": {
         "deviceInfo": {
@@ -182,8 +183,8 @@ TEST_CASE_METHOD(LogPublisherTestFixture, "Verify generic 
and publisher specific
     
configuration_->set(Configure::nifi_metrics_publisher_log_metrics_publisher_metrics,
 "RepositoryMetrics");
     configuration_->set(Configure::nifi_metrics_publisher_metrics, 
"DeviceInfoNode");
   }
-  publisher_.initialize(configuration_, response_node_loader_);
-  publisher_.loadMetricNodes();
+  publisher_->initialize(configuration_, response_node_loader_);
+  publisher_->loadMetricNodes();
   using 
org::apache::nifi::minifi::test::utils::verifyLogLinePresenceInPollTime;
   std::string expected_log = R"([info] {
     "LogMetrics": {
@@ -217,8 +218,8 @@ TEST_CASE_METHOD(LogPublisherTestFixture, "Verify changing 
log level property fo
   
configuration_->set(minifi::Configuration::nifi_metrics_publisher_log_metrics_logging_interval,
 "100ms");
   
configuration_->set(minifi::Configuration::nifi_metrics_publisher_log_metrics_log_level,
 "dEbUg");
   configuration_->set(Configure::nifi_metrics_publisher_metrics, 
"RepositoryMetrics");
-  publisher_.initialize(configuration_, response_node_loader_);
-  publisher_.loadMetricNodes();
+  publisher_->initialize(configuration_, response_node_loader_);
+  publisher_->loadMetricNodes();
   using 
org::apache::nifi::minifi::test::utils::verifyLogLinePresenceInPollTime;
   std::string expected_log = R"([debug] {
     "LogMetrics": {

Reply via email to