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:21 UTC

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

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);