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 <[email protected]>
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 <[email protected]>
    
    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);

Reply via email to