You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ph...@apache.org on 2019/02/19 11:36:28 UTC
[nifi-minifi-cpp] branch master updated: MINIFICPP-736 - Add
timeout to log matching to fix unstable test cases
This is an automated email from the ASF dual-hosted git repository.
phrocker 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 361184a MINIFICPP-736 - Add timeout to log matching to fix unstable test cases
361184a is described below
commit 361184ab4754a47f332a7b0ea2ff60d27ccae032
Author: Arpad Boda <ab...@hortonworks.com>
AuthorDate: Thu Feb 14 18:27:44 2019 +0100
MINIFICPP-736 - Add timeout to log matching to fix unstable test cases
This closes #486.
Signed-off-by: Marc Parisi <ph...@apache.org>
---
libminifi/test/TestBase.h | 28 +++++++++++++++++-----
.../integration/UpdateAttributeIntegrationTest.cpp | 9 ++++++-
libminifi/test/unit/ExtractTextTests.cpp | 2 +-
libminifi/test/unit/LoggerConfigurationTests.cpp | 8 +++----
libminifi/test/unit/LoggerTests.cpp | 2 +-
5 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/libminifi/test/TestBase.h b/libminifi/test/TestBase.h
index 42e7798..c12edeb 100644
--- a/libminifi/test/TestBase.h
+++ b/libminifi/test/TestBase.h
@@ -90,14 +90,30 @@ class LogTestController {
setLevel(name, level);
}
- bool contains(const std::string &ending) {
- return contains(log_output, ending);
+ bool contains(const std::string &ending, std::chrono::seconds timeout = std::chrono::seconds(3)) {
+ return contains(log_output, ending, timeout);
}
- bool contains(const std::ostringstream &stream, const std::string &ending) {
- std::string str = stream.str();
- logger_->log_info("Looking for %s in log output.", ending);
- return (ending.length() > 0 && str.find(ending) != std::string::npos);
+ bool contains(const std::ostringstream &stream, const std::string &ending, std::chrono::seconds timeout = std::chrono::seconds(3) ) {
+ if (ending.length() == 0) {
+ return false;
+ }
+ auto start = std::chrono::system_clock::now();
+ bool found = false;
+ bool timed_out = false;
+ do {
+ std::string str = stream.str();
+ found = (str.find(ending) != std::string::npos);
+ auto now = std::chrono::system_clock::now();
+ timed_out = std::chrono::duration_cast<std::chrono::milliseconds>(now - start) >
+ std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
+ if(!found && !timed_out) {
+ std::this_thread::sleep_for(std::chrono::milliseconds(200));
+ }
+ } while (!found && !timed_out);
+
+ logger_->log_info("%s %s in log output.", found ? "Successfully found" : "Failed to find", ending);
+ return found;
}
void reset() {
diff --git a/libminifi/test/expression-language-tests/integration/UpdateAttributeIntegrationTest.cpp b/libminifi/test/expression-language-tests/integration/UpdateAttributeIntegrationTest.cpp
index 5ceecab..6148c65 100644
--- a/libminifi/test/expression-language-tests/integration/UpdateAttributeIntegrationTest.cpp
+++ b/libminifi/test/expression-language-tests/integration/UpdateAttributeIntegrationTest.cpp
@@ -36,6 +36,7 @@
class TestHarness : public IntegrationBase {
public:
TestHarness() {
+ log_entry_found = false;
}
void testSetup() {
@@ -47,10 +48,16 @@ class TestHarness : public IntegrationBase {
}
void runAssertions() {
- assert(LogTestController::getInstance().contains("key:route_check_attr value:good"));
+ assert(log_entry_found);
+ }
+
+ void waitToVerifyProcessor() {
+ // This test takes a while to complete -> wait at most 10 secs
+ log_entry_found = LogTestController::getInstance().contains("key:route_check_attr value:good", std::chrono::seconds(10));
}
protected:
+ bool log_entry_found;
};
int main(int argc, char **argv) {
diff --git a/libminifi/test/unit/ExtractTextTests.cpp b/libminifi/test/unit/ExtractTextTests.cpp
index 939248f..f07a8bb 100644
--- a/libminifi/test/unit/ExtractTextTests.cpp
+++ b/libminifi/test/unit/ExtractTextTests.cpp
@@ -113,7 +113,7 @@ TEST_CASE("Test usage of ExtractText", "[extracttextTest]") {
plan->runNextProcessor(); // ExtractText
plan->runNextProcessor(); // LogAttribute
- REQUIRE(LogTestController::getInstance().contains(log_check) == false);
+ REQUIRE(LogTestController::getInstance().contains(log_check, std::chrono::seconds(0)) == false);
ss2.str("");
ss2 << "key:" << TEST_ATTR << " value:" << "Test";
diff --git a/libminifi/test/unit/LoggerConfigurationTests.cpp b/libminifi/test/unit/LoggerConfigurationTests.cpp
index 7850de0..8a1ce9b 100644
--- a/libminifi/test/unit/LoggerConfigurationTests.cpp
+++ b/libminifi/test/unit/LoggerConfigurationTests.cpp
@@ -80,18 +80,18 @@ TEST_CASE("TestLoggerConfiguration::initialize_namespaces", "[test initialize_na
logger = TestLoggerConfiguration::get_logger(root_namespace, stdout_only_warn_class, formatter);
logger->info(test_log_statement);
- REQUIRE(false == logTestController.contains(stdout, test_log_statement));
+ REQUIRE(false == logTestController.contains(stdout, test_log_statement, std::chrono::seconds(0)));
logger->warn(test_log_statement);
REQUIRE(true == logTestController.contains(stdout, test_log_statement));
- REQUIRE(false == logTestController.contains(stderr, test_log_statement));
+ REQUIRE(false == logTestController.contains(stderr, test_log_statement, std::chrono::seconds(0)));
logTestController.resetStream(stdout);
logTestController.resetStream(stderr);
logger = TestLoggerConfiguration::get_logger(root_namespace, stderr_only_error_class, formatter);
logger->warn(test_log_statement);
- REQUIRE(false == logTestController.contains(stderr, test_log_statement));
+ REQUIRE(false == logTestController.contains(stderr, test_log_statement, std::chrono::seconds(0)));
logger->error(test_log_statement);
- REQUIRE(false == logTestController.contains(stdout, test_log_statement));
+ REQUIRE(false == logTestController.contains(stdout, test_log_statement, std::chrono::seconds(0)));
REQUIRE(true == logTestController.contains(stderr, test_log_statement));
logTestController.resetStream(stdout);
logTestController.resetStream(stderr);
diff --git a/libminifi/test/unit/LoggerTests.cpp b/libminifi/test/unit/LoggerTests.cpp
index 744071c..60a57c3 100644
--- a/libminifi/test/unit/LoggerTests.cpp
+++ b/libminifi/test/unit/LoggerTests.cpp
@@ -69,7 +69,7 @@ TEST_CASE("Test log Levels change", "[ttl5]") {
LogTestController::getInstance().setOff<logging::Logger>();
logger->log_error("hello %s", "world");
- REQUIRE(false == LogTestController::getInstance().contains("[org::apache::nifi::minifi::core::logging::Logger] [error] hello world"));
+ REQUIRE(false == LogTestController::getInstance().contains("[org::apache::nifi::minifi::core::logging::Logger] [error] hello world", std::chrono::seconds(0)));
LogTestController::getInstance().reset();
}