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/06/15 20:22:20 UTC

[nifi-minifi-cpp] branch master updated (bd707e4 -> 8e8d283)

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

aboda pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git.


    from bd707e4  MINIFICPP-1257 don't leak kafka messages on failed send to broker
     new 31bd603  MINIFICPP-1153 Change to a temporary directory
     new 0f14a48  MINIFICPP-1260 make void_t fwd-compatible with C++17
     new 8e8d283  MINIFICPP-1255 - Set absolute timeout and also make sure that no timeout is initialized to zero.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 extensions/http-curl/client/HTTPClient.cpp         | 13 ++++--
 extensions/http-curl/client/HTTPClient.h           |  4 +-
 extensions/http-curl/tests/AbsoluteTimeoutTest.cpp | 50 ++++++++++++++++++++++
 extensions/http-curl/tests/CMakeLists.txt          |  1 +
 extensions/http-curl/tests/HTTPHandlers.h          | 33 ++++++++------
 .../http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp | 12 +++---
 .../http-curl/tests/VerifyInvokeHTTPTest.cpp       |  2 +-
 libminifi/include/RemoteProcessorGroupPort.h       |  2 +-
 libminifi/include/sitetosite/SiteToSite.h          |  2 +-
 libminifi/include/sitetosite/SiteToSiteClient.h    |  2 +-
 libminifi/include/utils/GeneralUtils.h             | 11 +++--
 libminifi/src/RemoteProcessorGroupPort.cpp         |  6 ++-
 nanofi/include/core/file_utils.h                   |  7 +++
 nanofi/src/core/file_utils.c                       |  8 ++++
 nanofi/tests/CTailFileChunkTests.cpp               |  6 +--
 nanofi/tests/CTailFileDelimitedTests.cpp           | 12 +++---
 nanofi/tests/CTestsBase.h                          | 25 +++++++++++
 17 files changed, 154 insertions(+), 42 deletions(-)
 create mode 100644 extensions/http-curl/tests/AbsoluteTimeoutTest.cpp


[nifi-minifi-cpp] 01/03: MINIFICPP-1153 Change to a temporary directory

Posted by ab...@apache.org.
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

commit 31bd60378a79aff5041a671652a3ca5dc7e1098e
Author: Ferenc Gerlits <fg...@gmail.com>
AuthorDate: Mon Jun 15 16:55:43 2020 +0200

    MINIFICPP-1153 Change to a temporary directory
    
    Change the current working directory to a temporary directory not used by
    any other tests before running the CTailFile tests.
    
    Signed-off-by: Arpad Boda <ab...@apache.org>
    
    This closes #815
---
 nanofi/include/core/file_utils.h         |  7 +++++++
 nanofi/src/core/file_utils.c             |  8 ++++++++
 nanofi/tests/CTailFileChunkTests.cpp     |  6 +++---
 nanofi/tests/CTailFileDelimitedTests.cpp | 12 ++++++------
 nanofi/tests/CTestsBase.h                | 25 +++++++++++++++++++++++++
 5 files changed, 49 insertions(+), 9 deletions(-)

diff --git a/nanofi/include/core/file_utils.h b/nanofi/include/core/file_utils.h
index 15806e4..e129270 100644
--- a/nanofi/include/core/file_utils.h
+++ b/nanofi/include/core/file_utils.h
@@ -71,6 +71,13 @@ int make_dir(const char * path);
  */
 char * get_current_working_directory();
 
+/**
+ * Change the current working directory.
+ * @path can be relative or absolute
+ * @return 0 on success, non-zero on error
+ */
+int change_current_working_directory(const char *path);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/nanofi/src/core/file_utils.c b/nanofi/src/core/file_utils.c
index 1eeedc6..f3c2303 100644
--- a/nanofi/src/core/file_utils.c
+++ b/nanofi/src/core/file_utils.c
@@ -139,3 +139,11 @@ char * get_current_working_directory() {
     free(cwd);
     return NULL;
 }
+
+int change_current_working_directory(const char *path) {
+#ifdef WIN32
+  return _chdir(path);
+#else
+  return chdir(path);
+#endif
+}
diff --git a/nanofi/tests/CTailFileChunkTests.cpp b/nanofi/tests/CTailFileChunkTests.cpp
index ff933c8..da67385 100644
--- a/nanofi/tests/CTailFileChunkTests.cpp
+++ b/nanofi/tests/CTailFileChunkTests.cpp
@@ -35,7 +35,7 @@
  */
 
 TEST_CASE("Test tailfile chunk size 4096, file size 8KB", "[tailfileChunk8KBFileSize]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileChunk", on_trigger_tailfilechunk);
     const char * file = "./e.txt";
     const char * chunksize = "4096";
@@ -67,7 +67,7 @@ TEST_CASE("Test tailfile chunk size 4096, file size 8KB", "[tailfileChunk8KBFile
 }
 
 TEST_CASE("Test tailfile chunk size 4096, file size less than 8KB", "[tailfileChunkFileSizeLessThan8KB]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileChunk", on_trigger_tailfilechunk);
     const char * file = "./e.txt";
     const char * chunksize = "4096";
@@ -103,7 +103,7 @@ TEST_CASE("Test tailfile chunk size 4096, file size less than 8KB", "[tailfileCh
 }
 
 TEST_CASE("Test tailfile chunk size 512, file size equal to 4608B", "[tailfileChunkFileSize8KB]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileChunk", on_trigger_tailfilechunk);
     const char * file = "./e.txt";
     const char * chunksize = "512";
diff --git a/nanofi/tests/CTailFileDelimitedTests.cpp b/nanofi/tests/CTailFileDelimitedTests.cpp
index ed079d1..c43d59e 100644
--- a/nanofi/tests/CTailFileDelimitedTests.cpp
+++ b/nanofi/tests/CTailFileDelimitedTests.cpp
@@ -27,7 +27,7 @@
  */
 
 TEST_CASE("Test tailfile delimited. Empty file", "[tailfileDelimitedEmptyFileTest]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileDelimited", on_trigger_tailfiledelimited);
     const char * file = "./e.txt";
     const char * delimiter = ";";
@@ -43,7 +43,7 @@ TEST_CASE("Test tailfile delimited. Empty file", "[tailfileDelimitedEmptyFileTes
 }
 
 TEST_CASE("Test tailfile delimited. File has less than 4096 chars", "[tailfileDelimitedLessThan4096Chars]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileDelimited", on_trigger_tailfiledelimited);
     const char * file = "./e.txt";
     const char * delimiter = ";";
@@ -65,7 +65,7 @@ TEST_CASE("Test tailfile delimited. File has less than 4096 chars", "[tailfileDe
 }
 
 TEST_CASE("Test tailfile delimited. Simple test", "[tailfileDelimitedSimpleTest]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileDelimited", on_trigger_tailfiledelimited);
     const char * file = "./e.txt";
     const char * delimiter = ";";
@@ -105,7 +105,7 @@ TEST_CASE("Test tailfile delimited. Simple test", "[tailfileDelimitedSimpleTest]
 }
 
 TEST_CASE("Test tailfile delimited. trailing non delimited string", "[tailfileNonDelimitedTest]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileDelimited", on_trigger_tailfiledelimited);
     const char * file = "./e.txt";
     const char * delimiter = ";";
@@ -148,7 +148,7 @@ TEST_CASE("Test tailfile delimited. trailing non delimited string", "[tailfileNo
 }
 
 TEST_CASE("Test tailfile delimited 4096 chars non delimited", "[tailfileDelimitedSimpleTest]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileDelimited", on_trigger_tailfiledelimited);
     const char * file = "./e.txt";
     const char * delimiter = ";";
@@ -212,7 +212,7 @@ TEST_CASE("Test tailfile delimited 4096 chars non delimited", "[tailfileDelimite
 }
 
 TEST_CASE("Test tailfile delimited. string starting with delimiter", "[tailfileDelimiterStartStringTest]") {
-
+    TestControllerWithTemporaryWorkingDirectory test_controller;
     TailFileTestResourceManager mgr("TailFileDelimited", on_trigger_tailfiledelimited);
     const char * file = "./e.txt";
     const char * delimiter = ";";
diff --git a/nanofi/tests/CTestsBase.h b/nanofi/tests/CTestsBase.h
index bcde416..8a5bbf7 100644
--- a/nanofi/tests/CTestsBase.h
+++ b/nanofi/tests/CTestsBase.h
@@ -29,6 +29,7 @@
 #include "core/file_utils.h"
 #include "api/ecu.h"
 #include "api/nanofi.h"
+#include "TestBase.h"
 
 class FileManager {
 public:
@@ -124,6 +125,30 @@ private:
     standalone_processor * processor_;
 };
 
+class TestControllerWithTemporaryWorkingDirectory {
+public:
+  TestControllerWithTemporaryWorkingDirectory()
+    : old_cwd_(get_current_working_directory())
+  {
+    char format[] = "/tmp/ctest_temp_dir.XXXXXX";
+    std::string temp_dir = test_controller_.createTempDirectory(format);
+    int result = change_current_working_directory(temp_dir.c_str());
+    if (result != 0) {
+      throw std::runtime_error("Could not change to temporary directory " + temp_dir);
+    }
+  }
+
+  ~TestControllerWithTemporaryWorkingDirectory()
+  {
+    chdir(old_cwd_);
+    free(old_cwd_);
+  }
+
+private:
+  TestController test_controller_;
+  char *old_cwd_;
+};
+
 struct processor_params * invoke_processor(TailFileTestResourceManager& mgr, const char * filePath) {
     standalone_processor * proc = mgr.getProcessor();
     set_standalone_property(proc, "file_path", filePath);


[nifi-minifi-cpp] 03/03: MINIFICPP-1255 - Set absolute timeout and also make sure that no timeout is initialized to zero.

Posted by ab...@apache.org.
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

commit 8e8d2832e48ac264eb1c4118df80a0da58a5ed7d
Author: Adam Debreceni <ad...@protonmail.com>
AuthorDate: Fri Jun 12 15:00:44 2020 +0200

    MINIFICPP-1255 - Set absolute timeout and also make sure that no timeout is initialized to zero.
    
    Signed-off-by: Arpad Boda <ab...@apache.org>
    
    This closes #810
---
 extensions/http-curl/client/HTTPClient.cpp         | 13 ++++--
 extensions/http-curl/client/HTTPClient.h           |  4 +-
 extensions/http-curl/tests/AbsoluteTimeoutTest.cpp | 50 ++++++++++++++++++++++
 extensions/http-curl/tests/CMakeLists.txt          |  1 +
 extensions/http-curl/tests/HTTPHandlers.h          | 33 ++++++++------
 .../http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp | 12 +++---
 .../http-curl/tests/VerifyInvokeHTTPTest.cpp       |  2 +-
 libminifi/include/RemoteProcessorGroupPort.h       |  2 +-
 libminifi/include/sitetosite/SiteToSite.h          |  2 +-
 libminifi/include/sitetosite/SiteToSiteClient.h    |  2 +-
 libminifi/src/RemoteProcessorGroupPort.cpp         |  6 ++-
 11 files changed, 98 insertions(+), 29 deletions(-)

diff --git a/extensions/http-curl/client/HTTPClient.cpp b/extensions/http-curl/client/HTTPClient.cpp
index 837f3b7..518da4a 100644
--- a/extensions/http-curl/client/HTTPClient.cpp
+++ b/extensions/http-curl/client/HTTPClient.cpp
@@ -241,10 +241,13 @@ void HTTPClient::setUseChunkedEncoding() {
 bool HTTPClient::submit() {
   if (IsNullOrEmpty(url_))
     return false;
+
+  int absoluteTimeout = std::max(0, 3 * static_cast<int>(read_timeout_ms_.count()));
+
   curl_easy_setopt(http_session_, CURLOPT_NOSIGNAL, 1);
-  if (connect_timeout_ms_.count() > 0) {
-    curl_easy_setopt(http_session_, CURLOPT_CONNECTTIMEOUT_MS, connect_timeout_ms_.count());
-  }
+  // setting it to 0 will result in the default 300 second timeout
+  curl_easy_setopt(http_session_, CURLOPT_CONNECTTIMEOUT_MS, std::max(0, static_cast<int>(connect_timeout_ms_.count())));
+  curl_easy_setopt(http_session_, CURLOPT_TIMEOUT_MS, absoluteTimeout);
 
   if (read_timeout_ms_.count() > 0) {
     progress_.reset();
@@ -252,6 +255,7 @@ bool HTTPClient::submit() {
     curl_easy_setopt(http_session_, CURLOPT_XFERINFOFUNCTION, onProgress);
     curl_easy_setopt(http_session_, CURLOPT_XFERINFODATA, (void*)this);
   }else{
+    // the user explicitly set it to 0
     curl_easy_setopt(http_session_, CURLOPT_NOPROGRESS, 1);
   }
   if (headers_ != nullptr) {
@@ -286,6 +290,9 @@ bool HTTPClient::submit() {
   }
   curl_easy_getinfo(http_session_, CURLINFO_RESPONSE_CODE, &http_code);
   curl_easy_getinfo(http_session_, CURLINFO_CONTENT_TYPE, &content_type_str_);
+  if (res == CURLE_OPERATION_TIMEDOUT) {
+    logger_->log_error("HTTP operation timed out, with absolute timeout %dms\n", absoluteTimeout);
+  }
   if (res != CURLE_OK) {
     logger_->log_error("curl_easy_perform() failed %s on %s, error code %d\n", curl_easy_strerror(res), url_, res);
     return false;
diff --git a/extensions/http-curl/client/HTTPClient.h b/extensions/http-curl/client/HTTPClient.h
index 6a4b4a2..8cc38ab 100644
--- a/extensions/http-curl/client/HTTPClient.h
+++ b/extensions/http-curl/client/HTTPClient.h
@@ -261,9 +261,9 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
 
   std::shared_ptr<minifi::controllers::SSLContextService> ssl_context_service_;
   std::string url_;
-  std::chrono::milliseconds connect_timeout_ms_{0};
+  std::chrono::milliseconds connect_timeout_ms_{30000};
   // read timeout.
-  std::chrono::milliseconds read_timeout_ms_{0};
+  std::chrono::milliseconds read_timeout_ms_{30000};
   char *content_type_str_{nullptr};
   std::string content_type_;
   struct curl_slist *headers_{nullptr};
diff --git a/extensions/http-curl/tests/AbsoluteTimeoutTest.cpp b/extensions/http-curl/tests/AbsoluteTimeoutTest.cpp
new file mode 100644
index 0000000..590529b
--- /dev/null
+++ b/extensions/http-curl/tests/AbsoluteTimeoutTest.cpp
@@ -0,0 +1,50 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "TestBase.h"
+#include "tests/TestServer.h"
+#include "HTTPHandlers.h"
+
+int main() {
+  TestController controller;
+
+  std::string port = "12324";
+  std::string rootURI =  "/";
+  TimeoutingHTTPHandler handler({
+    std::chrono::milliseconds(500),
+    std::chrono::milliseconds(500),
+    std::chrono::milliseconds(500),
+    std::chrono::milliseconds(500),
+    std::chrono::milliseconds(500),
+    std::chrono::milliseconds(500),
+    std::chrono::milliseconds(500)
+  });
+
+  auto server = start_webserver(port, rootURI, &handler);
+
+  auto plan = controller.createPlan();
+
+  auto processor = plan->addProcessor("InvokeHTTP", "InvokeHTTP");
+  processor->setProperty("Read Timeout", "1 s");
+  processor->setProperty("Remote URL", "http://localhost:" + port);
+  processor->setAutoTerminatedRelationships({{"failure", "d"}});
+
+  plan->runNextProcessor();
+
+  assert(LogTestController::getInstance().contains("HTTP operation timed out, with absolute timeout 3000ms"));
+}
diff --git a/extensions/http-curl/tests/CMakeLists.txt b/extensions/http-curl/tests/CMakeLists.txt
index e9f5d3d..8ba76a2 100644
--- a/extensions/http-curl/tests/CMakeLists.txt
+++ b/extensions/http-curl/tests/CMakeLists.txt
@@ -94,3 +94,4 @@ add_test(NAME SiteToSiteRestTest COMMAND SiteToSiteRestTest "${TEST_RESOURCES}/T
 add_test(NAME ControllerServiceIntegrationTests COMMAND ControllerServiceIntegrationTests "${TEST_RESOURCES}/TestControllerServices.yml" "${TEST_RESOURCES}/")
 add_test(NAME ThreadPoolAdjust COMMAND ThreadPoolAdjust "${TEST_RESOURCES}/ThreadPoolAdjust.yml" "${TEST_RESOURCES}/")
 add_test(NAME VerifyInvokeHTTPTest COMMAND VerifyInvokeHTTPTest "${TEST_RESOURCES}/TestInvokeHTTPPost.yml")
+add_test(NAME AbsoluteTimeoutTest COMMAND AbsoluteTimeoutTest)
diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index eda7a0e..83e70ee 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -489,30 +489,39 @@ public:
 
 class TimeoutingHTTPHandler : public ServerAwareHandler {
 public:
-  TimeoutingHTTPHandler(std::chrono::milliseconds wait_ms)
-      : wait_(wait_ms) {
+  TimeoutingHTTPHandler(std::vector<std::chrono::milliseconds> wait_times)
+      : wait_times_(wait_times) {
   }
   bool handlePost(CivetServer *, struct mg_connection *conn) {
-    std::this_thread::sleep_for(wait_);
-    mg_printf(conn, "HTTP/1.1 201 OK\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
+    respond(conn);
     return true;
   }
   bool handleGet(CivetServer *, struct mg_connection *conn) {
-    std::this_thread::sleep_for(wait_);
-    mg_printf(conn, "HTTP/1.1 201 OK\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
+    respond(conn);
     return true;
   }
   bool handleDelete(CivetServer *, struct mg_connection *conn) {
-    std::this_thread::sleep_for(wait_);
-    mg_printf(conn, "HTTP/1.1 201 OK\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
+    respond(conn);
     return true;
   }
   bool handlePut(CivetServer *, struct mg_connection *conn) {
-    std::this_thread::sleep_for(wait_);
-    mg_printf(conn, "HTTP/1.1 201 OK\r\nContent-Type: text/plain\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
+    respond(conn);
     return true;
   }
-protected:
-  std::chrono::milliseconds wait_;
+ private:
+  void respond(struct mg_connection *conn) {
+    if (wait_times_.size() > 0 && wait_times_[0].count() > 0) {
+      std::this_thread::sleep_for(wait_times_[0]);
+    }
+    int chunk_count = std::max(static_cast<int>(wait_times_.size()) - 1, 0);
+    mg_printf(conn, "HTTP/1.1 201 OK\r\nContent-Type: text/plain\r\nContent-Length: %d\r\nConnection: close\r\n\r\n", chunk_count);
+    for (int chunkIdx = 0; chunkIdx < chunk_count; ++chunkIdx) {
+      mg_printf(conn, "a");
+      if (wait_times_[chunkIdx + 1].count() > 0) {
+        std::this_thread::sleep_for(wait_times_[chunkIdx + 1]);
+      }
+    }
+  }
+  std::vector<std::chrono::milliseconds> wait_times_;
 };
 #endif /* LIBMINIFI_TEST_CURL_TESTS_SITETOSITEHTTP_HTTPHANDLERS_H_ */
diff --git a/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp b/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
index 91a9a77..1e9c59e 100644
--- a/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
+++ b/extensions/http-curl/tests/TimeoutHTTPSiteToSiteTests.cpp
@@ -96,7 +96,7 @@ struct defaulted_handler{
     if(handler)return handler;
     return def;
   }
-  void set(std::chrono::milliseconds timeout) {
+  void set(std::vector<std::chrono::milliseconds> timeout) {
     handler = new TimeoutingHTTPHandler(timeout);
   }
 };
@@ -184,31 +184,31 @@ int main(int argc, char **argv) {
 
   {
     timeout_test_profile profile;
-    profile.base_.set(timeout);
+    profile.base_.set({timeout});
     run_timeout_variance(test_file_location, isSecure, url, profile);
   }
 
   {
     timeout_test_profile profile;
-    profile.flow_.set(timeout);
+    profile.flow_.set({timeout});
     run_timeout_variance(test_file_location, isSecure, url, profile);
   }
 
   {
     timeout_test_profile profile;
-    profile.transaction_.set(timeout);
+    profile.transaction_.set({timeout});
     run_timeout_variance(test_file_location, isSecure, url, profile);
   }
 
   {
     timeout_test_profile profile;
-    profile.delete_.set(timeout);
+    profile.delete_.set({timeout});
     run_timeout_variance(test_file_location, isSecure, url, profile);
   }
 
   {
     timeout_test_profile profile;
-    profile.peer_.set(timeout);
+    profile.peer_.set({timeout});
     run_timeout_variance(test_file_location, isSecure, url, profile);
   }
 
diff --git a/extensions/http-curl/tests/VerifyInvokeHTTPTest.cpp b/extensions/http-curl/tests/VerifyInvokeHTTPTest.cpp
index 7d31165..fae79b5 100644
--- a/extensions/http-curl/tests/VerifyInvokeHTTPTest.cpp
+++ b/extensions/http-curl/tests/VerifyInvokeHTTPTest.cpp
@@ -192,7 +192,7 @@ int main(int argc, char ** argv) {
   }
 
   {
-    TimeoutingHTTPHandler handler(std::chrono::milliseconds(4000));
+    TimeoutingHTTPHandler handler({std::chrono::milliseconds(4000)});
     VerifyRWTimeoutInvokeHTTP harness;
     run(harness, url, test_file_location, key_dir, &handler);
   }
diff --git a/libminifi/include/RemoteProcessorGroupPort.h b/libminifi/include/RemoteProcessorGroupPort.h
index 5fb6742..651b002 100644
--- a/libminifi/include/RemoteProcessorGroupPort.h
+++ b/libminifi/include/RemoteProcessorGroupPort.h
@@ -214,7 +214,7 @@ class RemoteProcessorGroupPort : public core::Processor {
 
   utils::Identifier protocol_uuid_;
 
-  std::chrono::milliseconds idle_timeout_{};
+  std::chrono::milliseconds idle_timeout_{15000};
 
   // rest API end point info
   std::vector<struct RPG> nifi_instances_;
diff --git a/libminifi/include/sitetosite/SiteToSite.h b/libminifi/include/sitetosite/SiteToSite.h
index 896faac..feb1ed4 100644
--- a/libminifi/include/sitetosite/SiteToSite.h
+++ b/libminifi/include/sitetosite/SiteToSite.h
@@ -395,7 +395,7 @@ class SiteToSiteClientConfiguration {
 
   std::string local_network_interface_;
 
-  std::chrono::milliseconds idle_timeout_{};
+  std::chrono::milliseconds idle_timeout_{15000};
 
   // secore comms
 
diff --git a/libminifi/include/sitetosite/SiteToSiteClient.h b/libminifi/include/sitetosite/SiteToSiteClient.h
index 6e9b333..fdfe58d 100644
--- a/libminifi/include/sitetosite/SiteToSiteClient.h
+++ b/libminifi/include/sitetosite/SiteToSiteClient.h
@@ -254,7 +254,7 @@ class SiteToSiteClient : public core::Connectable {
   utils::Identifier port_id_;
 
   // idleTimeout
-  std::chrono::milliseconds idle_timeout_{};
+  std::chrono::milliseconds idle_timeout_{15000};
 
   // Peer Connection
   std::unique_ptr<SiteToSitePeer> peer_;
diff --git a/libminifi/src/RemoteProcessorGroupPort.cpp b/libminifi/src/RemoteProcessorGroupPort.cpp
index 8d2c5ce..b945396 100644
--- a/libminifi/src/RemoteProcessorGroupPort.cpp
+++ b/libminifi/src/RemoteProcessorGroupPort.cpp
@@ -167,13 +167,15 @@ void RemoteProcessorGroupPort::onSchedule(const std::shared_ptr<core::ProcessCon
     }
   }
   {
-    uint64_t idleTimeoutVal;
+    uint64_t idleTimeoutVal = 15000;
     std::string idleTimeoutStr;
     if (!context->getProperty(idleTimeout.getName(), idleTimeoutStr)
         || !core::Property::getTimeMSFromString(idleTimeoutStr, idleTimeoutVal)) {
       logger_->log_debug("%s attribute is invalid, so default value of %s will be used", idleTimeout.getName(),
                          idleTimeout.getValue());
-      assert(core::Property::getTimeMSFromString(idleTimeout.getValue(), idleTimeoutVal));
+      if (!core::Property::getTimeMSFromString(idleTimeout.getValue(), idleTimeoutVal)) {
+        assert(false);  // Couldn't parse our default value
+      }
     }
     idle_timeout_ = std::chrono::milliseconds(idleTimeoutVal);
   }


[nifi-minifi-cpp] 02/03: MINIFICPP-1260 make void_t fwd-compatible with C++17

Posted by ab...@apache.org.
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

commit 0f14a48788c12d5faf536402bb19196ce96a184c
Author: Marton Szasz <sz...@gmail.com>
AuthorDate: Mon Jun 15 12:55:19 2020 +0200

    MINIFICPP-1260 make void_t fwd-compatible with C++17
    
    ... and make `make_unique` follow the standard version more closely
    
    Signed-off-by: Arpad Boda <ab...@apache.org>
    
    This closes #814
---
 libminifi/include/utils/GeneralUtils.h | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/libminifi/include/utils/GeneralUtils.h b/libminifi/include/utils/GeneralUtils.h
index 08e4ca3..63145fe 100644
--- a/libminifi/include/utils/GeneralUtils.h
+++ b/libminifi/include/utils/GeneralUtils.h
@@ -35,7 +35,7 @@ namespace utils {
 #if __cplusplus < 201402L
 template<typename T, typename... Args>
 std::unique_ptr<T> make_unique(Args&&... args) {
-  return std::unique_ptr<T>{ new T{ std::forward<Args>(args)... } };
+  return std::unique_ptr<T>{ new T(std::forward<Args>(args)...) };
 }
 #else
 using std::make_unique;
@@ -57,13 +57,16 @@ T exchange(T& obj, U&& new_value) {
   obj = std::forward<U>(new_value);
   return old_value;
 }
+#else
+using std::exchange;
+#endif /* < C++14 */
 
+#if __cplusplus < 201703L
 template<typename...>
 using void_t = void;
-
 #else
-using std::exchange;
-#endif /* < C++14 */
+using std::void_t;
+#endif /* < C++17 */
 
 }  // namespace utils
 }  // namespace minifi