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/17 15:01:24 UTC
[nifi-minifi-cpp] branch master updated: MINIFICPP-1234 - Fix some
archive tests on Windows.
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
The following commit(s) were added to refs/heads/master by this push:
new b107c86 MINIFICPP-1234 - Fix some archive tests on Windows.
b107c86 is described below
commit b107c86e794a77ac1dec15eb8aa3f103301662de
Author: Adam Debreceni <ad...@protonmail.com>
AuthorDate: Fri May 22 15:01:16 2020 +0200
MINIFICPP-1234 - Fix some archive tests on Windows.
Signed-off-by: Arpad Boda <ab...@apache.org>
This closes #808
---
extensions/libarchive/ArchiveMetadata.cpp | 2 +-
libminifi/include/utils/file/FileManager.h | 51 +++++-----------------
libminifi/include/utils/file/FileUtils.h | 25 +++++++----
libminifi/test/archive-tests/CMakeLists.txt | 9 +---
libminifi/test/archive-tests/FocusArchiveTests.cpp | 24 ++++------
.../test/archive-tests/ManipulateArchiveTests.cpp | 17 +++-----
6 files changed, 46 insertions(+), 82 deletions(-)
diff --git a/extensions/libarchive/ArchiveMetadata.cpp b/extensions/libarchive/ArchiveMetadata.cpp
index 83e7aa5..7503ab6 100644
--- a/extensions/libarchive/ArchiveMetadata.cpp
+++ b/extensions/libarchive/ArchiveMetadata.cpp
@@ -149,7 +149,7 @@ void ArchiveMetadata::loadJson(const rapidjson::Value& metadataDoc) {
void ArchiveMetadata::seedTempPaths(fileutils::FileManager *file_man, bool keep = false) {
for (auto& entry : entryMetadata)
- entry.tmpFileName.assign(file_man->unique_file("/tmp/", keep));
+ entry.tmpFileName.assign(file_man->unique_file(keep));
}
ArchiveStack ArchiveStack::fromJson(const rapidjson::Value& input) {
diff --git a/libminifi/include/utils/file/FileManager.h b/libminifi/include/utils/file/FileManager.h
index 0239b44..62a18ac 100644
--- a/libminifi/include/utils/file/FileManager.h
+++ b/libminifi/include/utils/file/FileManager.h
@@ -34,6 +34,7 @@
#include "io/validation.h"
#include "utils/Id.h"
#include "utils/StringUtils.h"
+#include "utils/file/FileUtils.h"
#ifndef FILE_SEPARATOR
#ifdef WIN32
@@ -67,51 +68,23 @@ class FileManager {
}
}
std::string unique_file(const std::string &location, bool keep = false) {
- if (!IsNullOrEmpty(location)) {
- std::string file_name = location + FILE_SEPARATOR + non_repeating_string_generator_.generate();
- while (!verify_not_exist(file_name)) {
- file_name = location + FILE_SEPARATOR + non_repeating_string_generator_.generate();
- }
- if (!keep)
- unique_files_.push_back(file_name);
- return file_name;
- } else {
- std::string tmpDir = "/tmp";
-#ifdef WIN32
- TCHAR lpTempPathBuffer[MAX_PATH];
- GetTempPath(MAX_PATH, lpTempPathBuffer);
- tmpDir = lpTempPathBuffer;
-#endif
- std::string file_name = tmpDir + FILE_SEPARATOR + non_repeating_string_generator_.generate();
- while (!verify_not_exist(file_name)) {
- file_name = tmpDir + FILE_SEPARATOR + non_repeating_string_generator_.generate();
- }
- if (!keep) {
- unique_files_.push_back(file_name);
- }
- return file_name;
+ const std::string& dir = !IsNullOrEmpty(location) ? location : utils::file::FileUtils::get_temp_directory();
+
+ std::string file_name = utils::file::FileUtils::concat_path(dir, non_repeating_string_generator_.generate());
+ while (!verify_not_exist(file_name)) {
+ file_name = utils::file::FileUtils::concat_path(dir, non_repeating_string_generator_.generate());
}
+ if (!keep)
+ unique_files_.push_back(file_name);
+ return file_name;
}
std::string unique_file(bool keep = false) {
#ifdef BOOST_VERSION
return boost::filesystem::unique_path().native();
-#else
- std::string tmpDir = "/tmp";
-#ifdef WIN32
- TCHAR lpTempPathBuffer[MAX_PATH];
- GetTempPath(MAX_PATH, lpTempPathBuffer);
- tmpDir = lpTempPathBuffer;
-#endif
- std::string file_name = tmpDir + FILE_SEPARATOR + non_repeating_string_generator_.generate();
- while (!verify_not_exist(file_name)) {
- file_name = tmpDir + FILE_SEPARATOR + non_repeating_string_generator_.generate();
- }
- if (!keep) {
- unique_files_.push_back(file_name);
- }
- return file_name;
-#endif
+#else // BOOST_VERSION
+ return unique_file(std::string{}, keep);
+#endif // BOOST_VERSION
}
diff --git a/libminifi/include/utils/file/FileUtils.h b/libminifi/include/utils/file/FileUtils.h
index f7ecdb6..f67539f 100644
--- a/libminifi/include/utils/file/FileUtils.h
+++ b/libminifi/include/utils/file/FileUtils.h
@@ -129,21 +129,28 @@ class FileUtils {
static std::string create_temp_directory(char* format) {
#ifdef WIN32
- char tempBuffer[MAX_PATH];
- const auto ret = GetTempPath(MAX_PATH, tempBuffer);
- if (ret <= MAX_PATH && ret != 0) {
- const std::string tempDirectory = tempBuffer
- + minifi::utils::IdGenerator::getIdGenerator()->generate().to_string();
- create_dir(tempDirectory);
- return tempDirectory;
- }
- return {};
+ const std::string tempDirectory = concat_path(get_temp_directory(),
+ minifi::utils::IdGenerator::getIdGenerator()->generate().to_string());
+ create_dir(tempDirectory);
+ return tempDirectory;
#else
if (mkdtemp(format) == nullptr) { return ""; }
return format;
#endif
}
+ static std::string get_temp_directory() {
+#ifdef WIN32
+ char tempBuffer[MAX_PATH];
+ const auto ret = GetTempPath(MAX_PATH, tempBuffer);
+ if (ret > MAX_PATH || ret == 0)
+ throw std::runtime_error("Couldn't locate temporary directory path");
+ return tempBuffer;
+#else
+ return "/tmp";
+#endif
+ }
+
static int64_t delete_dir(const std::string &path, bool delete_files_recursively = true) {
#ifdef BOOST_VERSION
try {
diff --git a/libminifi/test/archive-tests/CMakeLists.txt b/libminifi/test/archive-tests/CMakeLists.txt
index 9db2fb8..66edea5 100644
--- a/libminifi/test/archive-tests/CMakeLists.txt
+++ b/libminifi/test/archive-tests/CMakeLists.txt
@@ -17,14 +17,7 @@
# under the License.
#
-if (WIN32)
- # Currently CompressContent is the only verified working libarchive processor on Windows,
- # some tests for other libarchive processors fail on Windows.
- file(GLOB ARCHIVE_INTEGRATION_TESTS "CompressContentTests.cpp")
- list(APPEND ARCHIVE_INTEGRATION_TESTS "MergeFileTests.cpp")
-else()
- file(GLOB ARCHIVE_INTEGRATION_TESTS "*.cpp")
-endif()
+file(GLOB ARCHIVE_INTEGRATION_TESTS "*.cpp")
SET(EXTENSIONS_TEST_COUNT 0)
FOREACH(testfile ${ARCHIVE_INTEGRATION_TESTS})
diff --git a/libminifi/test/archive-tests/FocusArchiveTests.cpp b/libminifi/test/archive-tests/FocusArchiveTests.cpp
index e30d2b9..898132a 100644
--- a/libminifi/test/archive-tests/FocusArchiveTests.cpp
+++ b/libminifi/test/archive-tests/FocusArchiveTests.cpp
@@ -73,11 +73,13 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
std::shared_ptr<TestPlan> plan = testController.createPlan();
std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
- char dir1[] = "/tmp/gt.XXXXXX";
- char dir2[] = "/tmp/gt.XXXXXX";
- char dir3[] = "/tmp/gt.XXXXXX";
+ std::string dir1 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
+ std::string dir2 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
+ std::string dir3 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
- REQUIRE(!testController.createTempDirectory(dir1).empty());
+ REQUIRE(!dir1.empty());
+ REQUIRE(!dir2.empty());
+ REQUIRE(!dir3.empty());
std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getfileCreate2");
plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir1);
plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::KeepSourceFile.getName(), "true");
@@ -85,7 +87,6 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
std::shared_ptr<core::Processor> fprocessor = plan->addProcessor("FocusArchiveEntry", "focusarchiveCreate", core::Relationship("success", "description"), true);
plan->setProperty(fprocessor, org::apache::nifi::minifi::processors::FocusArchiveEntry::Path.getName(), FOCUSED_FILE);
- REQUIRE(!testController.createTempDirectory(dir2).empty());
std::shared_ptr<core::Processor> putfile1 = plan->addProcessor("PutFile", "PutFile1", core::Relationship("success", "description"), true);
plan->setProperty(putfile1, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), dir2);
plan->setProperty(putfile1, org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(),
@@ -93,15 +94,12 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
std::shared_ptr<core::Processor> ufprocessor = plan->addProcessor("UnfocusArchiveEntry", "unfocusarchiveCreate", core::Relationship("success", "description"), true);
- REQUIRE(!testController.createTempDirectory(dir3).empty());
std::shared_ptr<core::Processor> putfile2 = plan->addProcessor("PutFile", "PutFile2", core::Relationship("success", "description"), true);
plan->setProperty(putfile2, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), dir3);
plan->setProperty(putfile2, org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(),
org::apache::nifi::minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_REPLACE);
- std::stringstream ss1;
- ss1 << dir1 << "/" << TEST_ARCHIVE_NAME;
- std::string archive_path_1 = ss1.str();
+ std::string archive_path_1 = utils::file::FileUtils::concat_path(dir1, TEST_ARCHIVE_NAME);
TAE_MAP_T test_archive_map = build_test_archive_map(NUM_FILES, FILE_NAMES, FILE_CONTENT);
build_test_archive(archive_path_1, test_archive_map);
@@ -112,9 +110,7 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
plan->runNextProcessor(); // FocusArchive
plan->runNextProcessor(); // PutFile 1 (focused)
- std::stringstream ss2;
- ss2 << dir2 << "/" << FOCUSED_FILE;
- std::ifstream ifs(ss2.str().c_str(), std::ios::in | std::ios::binary | std::ios::ate);
+ std::ifstream ifs(utils::file::FileUtils::concat_path(dir2, FOCUSED_FILE), std::ios::in | std::ios::binary | std::ios::ate);
std::ifstream::pos_type size = ifs.tellg();
int64_t bufsize {size};
@@ -128,8 +124,6 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
plan->runNextProcessor(); // UnfocusArchive
plan->runNextProcessor(); // PutFile 2 (unfocused)
- std::stringstream ss3;
- ss3 << dir3 << "/" << TEST_ARCHIVE_NAME;
- std::string archive_path_2 = ss3.str();
+ std::string archive_path_2 = utils::file::FileUtils::concat_path(dir3, TEST_ARCHIVE_NAME);
REQUIRE(check_archive_contents(archive_path_2, test_archive_map));
}
diff --git a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
index cbb4449..c74a173 100644
--- a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
+++ b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
@@ -59,10 +59,12 @@ bool run_archive_test(OrderedTestArchive input_archive, OrderedTestArchive outpu
std::shared_ptr<TestPlan> plan = testController.createPlan();
std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
- char dir1[] = "/tmp/gt.XXXXXX";
- char dir2[] = "/tmp/gt.XXXXXX";
+ std::string dir1 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
+ std::string dir2 = [&] {char format[] = "/tmp/gt.XXXXXX"; return testController.createTempDirectory(format); }();
+
+ REQUIRE(!dir1.empty());
+ REQUIRE(!dir2.empty());
- REQUIRE(!testController.createTempDirectory(dir1).empty());
std::shared_ptr<core::Processor> getfile = plan->addProcessor("GetFile", "getfileCreate2");
plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::Directory.getName(), dir1);
plan->setProperty(getfile, org::apache::nifi::minifi::processors::GetFile::KeepSourceFile.getName(), "true");
@@ -73,15 +75,12 @@ bool run_archive_test(OrderedTestArchive input_archive, OrderedTestArchive outpu
plan->setProperty(maprocessor, kv.first, kv.second);
}
- REQUIRE(!testController.createTempDirectory(dir2).empty());
std::shared_ptr<core::Processor> putfile2 = plan->addProcessor("PutFile", "PutFile2", core::Relationship("success", "description"), true);
plan->setProperty(putfile2, org::apache::nifi::minifi::processors::PutFile::Directory.getName(), dir2);
plan->setProperty(putfile2, org::apache::nifi::minifi::processors::PutFile::ConflictResolution.getName(),
org::apache::nifi::minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_REPLACE);
- std::stringstream ss1;
- ss1 << dir1 << "/" << TEST_ARCHIVE_NAME;
- std::string archive_path_1 = ss1.str();
+ std::string archive_path_1 = utils::file::FileUtils::concat_path(dir1, TEST_ARCHIVE_NAME);
build_test_archive(archive_path_1, input_archive);
REQUIRE(check_archive_contents(archive_path_1, input_archive, true));
@@ -90,9 +89,7 @@ bool run_archive_test(OrderedTestArchive input_archive, OrderedTestArchive outpu
plan->runNextProcessor(); // ManipulateArchive
plan->runNextProcessor(); // PutFile 2 (manipulated)
- std::stringstream ss2;
- ss2 << dir2 << "/" << TEST_ARCHIVE_NAME;
- std::string output_path = ss2.str();
+ std::string output_path = utils::file::FileUtils::concat_path(dir2, TEST_ARCHIVE_NAME);
return check_archive_contents(output_path, output_archive, check_attributes);
}