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

Reply via email to