This is an automated email from the ASF dual-hosted git repository. lordgamez pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit d38de2233a8d94f007350855716aa6f295fbffd1 Author: Martin Zink <[email protected]> AuthorDate: Mon May 6 09:12:02 2024 +0200 MINIFICPP-2358 Skip File permission tests while running as root Signed-off-by: Gabor Gyimesi <[email protected]> This closes #1789 --- .../tests/unit/FetchFileTests.cpp | 4 +++ libminifi/include/utils/TestUtils.h | 11 +++++-- libminifi/test/unit/FileStreamTests.cpp | 38 +++++++++++----------- libminifi/test/unit/FileSystemRepositoryTests.cpp | 6 ++-- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/extensions/standard-processors/tests/unit/FetchFileTests.cpp b/extensions/standard-processors/tests/unit/FetchFileTests.cpp index ccb04374f..be5dcdaa0 100644 --- a/extensions/standard-processors/tests/unit/FetchFileTests.cpp +++ b/extensions/standard-processors/tests/unit/FetchFileTests.cpp @@ -112,6 +112,8 @@ TEST_CASE_METHOD(FetchFileTestFixture, "FileToFetch property set to a non-existe #ifndef WIN32 TEST_CASE_METHOD(FetchFileTestFixture, "Permission denied to read file", "[testFetchFile]") { + if (utils::runningAsUnixRoot()) + SKIP("Cannot test insufficient permissions with root user"); fetch_file_processor_->setProperty(org::apache::nifi::minifi::processors::FetchFile::FileToFetch, (input_dir_ / permission_denied_file_name_).string()); fetch_file_processor_->setProperty(org::apache::nifi::minifi::processors::FetchFile::LogLevelWhenPermissionDenied, "WARN"); const auto result = test_controller_->trigger("", attributes_); @@ -255,6 +257,8 @@ TEST_CASE_METHOD(FetchFileTestFixture, "After flow completion the fetched file i #ifndef WIN32 TEST_CASE_METHOD(FetchFileTestFixture, "Move completion strategy failure due to filesystem error still succeeds flow", "[testFetchFile]") { + if (utils::runningAsUnixRoot()) + SKIP("Cannot test insufficient permissions with root user"); auto move_dir = test_controller_->createTempDirectory(); utils::file::FileUtils::set_permissions(move_dir, 0); fetch_file_processor_->setProperty(org::apache::nifi::minifi::processors::FetchFile::CompletionStrategy, "Move File"); diff --git a/libminifi/include/utils/TestUtils.h b/libminifi/include/utils/TestUtils.h index 35431164e..3dd54b9e4 100644 --- a/libminifi/include/utils/TestUtils.h +++ b/libminifi/include/utils/TestUtils.h @@ -21,12 +21,10 @@ #include <chrono> #include <filesystem> #include <fstream> -#include <memory> #include <string> #include <unordered_set> #include "utils/file/FileUtils.h" -#include "utils/Environment.h" #include "utils/Id.h" #include "utils/TimeUtil.h" @@ -56,7 +54,7 @@ void makeFileOrDirectoryNotWritable(const std::filesystem::path& file_name); void makeFileOrDirectoryWritable(const std::filesystem::path& file_name); -Identifier generateUUID() { +inline Identifier generateUUID() { // TODO(hunyadi): Will make the Id generator manage lifetime using a unique_ptr and return a raw ptr on access static std::shared_ptr<utils::IdGenerator> id_generator = utils::IdGenerator::getIdGenerator(); return id_generator->generate(); @@ -114,4 +112,11 @@ class ManualClock : public timeutils::SteadyClock { void dateSetInstall(const std::string& install); #endif +inline bool runningAsUnixRoot() { +#ifdef WIN32 + return false; +#else + return geteuid() == 0; +#endif +} } // namespace org::apache::nifi::minifi::utils diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp index 314f2ba8e..debc9a15e 100644 --- a/libminifi/test/unit/FileStreamTests.cpp +++ b/libminifi/test/unit/FileStreamTests.cpp @@ -16,20 +16,18 @@ * limitations under the License. */ -#include <cstdio> -#include <iostream> #include <string> #include <vector> -#include "io/FileStream.h" -#include "../TestBase.h" #include "../Catch.h" -#include "utils/gsl.h" +#include "../TestBase.h" +#include "TestUtils.h" +#include "io/FileStream.h" #include "utils/file/FileUtils.h" TEST_CASE("TestFileOverWrite", "[TestFiles]") { TestController testController; - auto path = testController.createTempDirectory() / "tstFile.ext"; + const auto path = testController.createTempDirectory() / "tstFile.ext"; std::fstream file; file.open(path, std::ios::out); @@ -62,7 +60,7 @@ TEST_CASE("TestFileOverWrite", "[TestFiles]") { TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") { TestController testController; - auto path = testController.createTempDirectory() / "tstFile.ext"; + const auto path = testController.createTempDirectory() / "tstFile.ext"; std::fstream file; file.open(path, std::ios::out); @@ -95,7 +93,7 @@ TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") { TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") { TestController testController; - auto path = testController.createTempDirectory() / "tstFile.ext"; + const auto path = testController.createTempDirectory() / "tstFile.ext"; std::fstream file; file.open(path, std::ios::out); @@ -158,7 +156,7 @@ TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") { TEST_CASE("TestFileBeyondEnd3", "[TestLoader]") { TestController testController; - auto path = testController.createTempDirectory() / "tstFile.ext"; + const auto path = testController.createTempDirectory() / "tstFile.ext"; std::fstream file; file.open(path, std::ios::out); @@ -218,22 +216,22 @@ TEST_CASE("TestFileExceedSize", "[TestLoader]") { TEST_CASE("Write zero bytes") { TestController testController; - auto dir = testController.createTempDirectory(); + const auto dir = testController.createTempDirectory(); minifi::io::FileStream stream(dir / "test.txt", 0, true); REQUIRE(stream.write(nullptr, 0) == 0); } TEST_CASE("Read zero bytes") { TestController testController; - auto dir = testController.createTempDirectory(); + const auto dir = testController.createTempDirectory(); minifi::io::FileStream stream(dir / "test.txt", 0, true); - std::byte fake_buffer[1]; + std::array<std::byte, 1> fake_buffer{}; REQUIRE(stream.read(std::span(fake_buffer).subspan(0, 0)) == 0); } TEST_CASE("Non-existing file read/write test") { TestController test_controller; - auto dir = test_controller.createTempDirectory(); + const auto dir = test_controller.createTempDirectory(); minifi::io::FileStream stream(dir / "non_existing_file.txt", 0, true); REQUIRE(test_controller.getLog().getInstance().contains("Error opening file", std::chrono::seconds(0))); REQUIRE(test_controller.getLog().getInstance().contains("No such file or directory", std::chrono::seconds(0))); @@ -248,8 +246,8 @@ TEST_CASE("Non-existing file read/write test") { TEST_CASE("Existing file read/write test") { TestController test_controller; - auto dir = test_controller.createTempDirectory(); - auto path_to_existing_file = dir / "existing_file.txt"; + const auto dir = test_controller.createTempDirectory(); + const auto path_to_existing_file = dir / "existing_file.txt"; { std::ofstream outfile(path_to_existing_file); outfile << "lorem ipsum" << std::endl; @@ -268,9 +266,11 @@ TEST_CASE("Existing file read/write test") { } TEST_CASE("Opening file without permission creates error logs") { + if (utils::runningAsUnixRoot()) + SKIP("Cannot test insufficient permissions with root user"); TestController test_controller; - auto dir = test_controller.createTempDirectory(); - auto path_to_permissionless_file = dir / "permissionless_file.txt"; + const auto dir = test_controller.createTempDirectory(); + const auto path_to_permissionless_file = dir / "permissionless_file.txt"; { std::ofstream outfile(path_to_permissionless_file); outfile << "this file has been just created" << std::endl; @@ -285,8 +285,8 @@ TEST_CASE("Opening file without permission creates error logs") { TEST_CASE("Readonly filestream write test") { TestController test_controller; - auto dir = test_controller.createTempDirectory(); - auto path_to_file = dir / "file_to_seek_in.txt"; + const auto dir = test_controller.createTempDirectory(); + const auto path_to_file = dir / "file_to_seek_in.txt"; { std::ofstream outfile(path_to_file); outfile << "lorem ipsum" << std::endl; diff --git a/libminifi/test/unit/FileSystemRepositoryTests.cpp b/libminifi/test/unit/FileSystemRepositoryTests.cpp index 52c40a6dd..383efeffa 100644 --- a/libminifi/test/unit/FileSystemRepositoryTests.cpp +++ b/libminifi/test/unit/FileSystemRepositoryTests.cpp @@ -96,6 +96,8 @@ TEST_CASE("FileSystemRepository can clear orphan entries") { } TEST_CASE("FileSystemRepository can retry removing entry that previously failed to be removed") { + if (utils::runningAsUnixRoot()) + SKIP("Cannot test insufficient permissions with root user"); TestController testController; auto dir = testController.createTempDirectory(); auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>(); @@ -103,14 +105,12 @@ TEST_CASE("FileSystemRepository can retry removing entry that previously failed auto content_repo = std::make_shared<TestFileSystemRepository>(); REQUIRE(content_repo->initialize(configuration)); - std::string filename; { minifi::ResourceClaim claim(content_repo); content_repo->write(claim)->write("hi"); auto files = minifi::utils::file::list_dir_all(dir, testController.getLogger()); REQUIRE(files.size() == 1); // ensure that the content is not deleted during resource claim destruction - filename = (files[0].first / files[0].second).string(); utils::makeFileOrDirectoryNotWritable(dir); } @@ -127,6 +127,8 @@ TEST_CASE("FileSystemRepository can retry removing entry that previously failed } TEST_CASE("FileSystemRepository removes non-existing resource file from purge list") { + if (utils::runningAsUnixRoot()) + SKIP("Cannot test insufficient permissions with root user"); TestController testController; auto dir = testController.createTempDirectory(); auto configuration = std::make_shared<org::apache::nifi::minifi::Configure>();
