This is an automated email from the ASF dual-hosted git repository. martinzink pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit ab396b7aa67e60355c69017bdce6065c852c418b Author: Gabor Gyimesi <gamezb...@gmail.com> AuthorDate: Mon Mar 6 09:28:12 2023 +0100 MINIFICPP-2066 Close handle when querying file owner on Windows Closes #1523 Signed-off-by: Martin Zink <martinz...@apache.org> --- extensions/http-curl/tests/C2UpdateAssetTest.cpp | 3 +++ libminifi/include/utils/file/FileUtils.h | 2 ++ libminifi/test/TestBase.h | 4 ++-- libminifi/test/keyvalue-tests/PersistentStateStorageTest.cpp | 5 +++-- libminifi/test/keyvalue-tests/VolatileMapStateStorageTest.cpp | 2 ++ libminifi/test/unit/FileStreamTests.cpp | 1 + 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extensions/http-curl/tests/C2UpdateAssetTest.cpp b/extensions/http-curl/tests/C2UpdateAssetTest.cpp index 9c606c989..ac545d180 100644 --- a/extensions/http-curl/tests/C2UpdateAssetTest.cpp +++ b/extensions/http-curl/tests/C2UpdateAssetTest.cpp @@ -26,6 +26,7 @@ #include "HTTPHandlers.h" #include "utils/IntegrationTestUtils.h" #include "utils/Environment.h" +#include "utils/file/FileUtils.h" class FileProvider : public ServerAwareHandler { public: @@ -257,4 +258,6 @@ int main() { assert(false); } } + + std::filesystem::current_path(minifi::utils::file::get_executable_dir()); } diff --git a/libminifi/include/utils/file/FileUtils.h b/libminifi/include/utils/file/FileUtils.h index e4fb301d5..db37d861b 100644 --- a/libminifi/include/utils/file/FileUtils.h +++ b/libminifi/include/utils/file/FileUtils.h @@ -480,6 +480,8 @@ inline std::optional<std::string> get_file_owner(const std::filesystem::path& fi return std::nullopt; } + auto close_file_handle = gsl::finally([&file_handle] { CloseHandle(file_handle); }); + // Get the owner SID of the file. return_code = GetSecurityInfo( file_handle, diff --git a/libminifi/test/TestBase.h b/libminifi/test/TestBase.h index e2118144e..57d9bb159 100644 --- a/libminifi/test/TestBase.h +++ b/libminifi/test/TestBase.h @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#undef NDEBUG #pragma once #include <chrono> @@ -188,7 +188,7 @@ class TempDirectory { ~TempDirectory() { if (is_owner_) { - minifi::utils::file::FileUtils::delete_dir(path_, true); + assert(minifi::utils::file::FileUtils::delete_dir(path_, true) == 0); } } diff --git a/libminifi/test/keyvalue-tests/PersistentStateStorageTest.cpp b/libminifi/test/keyvalue-tests/PersistentStateStorageTest.cpp index 6c945ef3c..1d494708d 100644 --- a/libminifi/test/keyvalue-tests/PersistentStateStorageTest.cpp +++ b/libminifi/test/keyvalue-tests/PersistentStateStorageTest.cpp @@ -32,6 +32,7 @@ #include "controllers/keyvalue/AutoPersistor.h" #include "unit/ProvenanceTestHelper.h" #include "repository/VolatileContentRepository.h" +#include "utils/file/FileUtils.h" static std::string config_yaml; // NOLINT @@ -70,6 +71,7 @@ class PersistentStateStorageTestsFixture { virtual ~PersistentStateStorageTestsFixture() { LogTestController::getInstance().reset(); + std::filesystem::current_path(minifi::utils::file::get_executable_dir()); } void loadYaml() { @@ -108,6 +110,7 @@ class PersistentStateStorageTestsFixture { } protected: + TestController testController; std::shared_ptr<minifi::Configure> configuration; std::shared_ptr<core::Repository> test_repo; std::shared_ptr<core::Repository> test_flow_repo; @@ -119,8 +122,6 @@ class PersistentStateStorageTestsFixture { std::shared_ptr<core::controller::ControllerServiceNode> persistable_key_value_store_service_node; std::shared_ptr<minifi::controllers::KeyValueStateStorage> controller; - - TestController testController; }; diff --git a/libminifi/test/keyvalue-tests/VolatileMapStateStorageTest.cpp b/libminifi/test/keyvalue-tests/VolatileMapStateStorageTest.cpp index 6edc57df0..7681bab92 100644 --- a/libminifi/test/keyvalue-tests/VolatileMapStateStorageTest.cpp +++ b/libminifi/test/keyvalue-tests/VolatileMapStateStorageTest.cpp @@ -27,6 +27,7 @@ #include "core/yaml/YamlConfiguration.h" #include "unit/ProvenanceTestHelper.h" #include "repository/VolatileContentRepository.h" +#include "utils/file/FileUtils.h" namespace { std::string config_yaml; // NOLINT @@ -77,6 +78,7 @@ class VolatileMapStateStorageTestFixture { } virtual ~VolatileMapStateStorageTestFixture() { + std::filesystem::current_path(minifi::utils::file::get_executable_dir()); LogTestController::getInstance().reset(); } diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp index c29bddf7e..7032be269 100644 --- a/libminifi/test/unit/FileStreamTests.cpp +++ b/libminifi/test/unit/FileStreamTests.cpp @@ -280,6 +280,7 @@ TEST_CASE("Opening file without permission creates error logs") { minifi::io::FileStream stream(path_to_permissionless_file, 0, true); // write_enabled, because permissionless file only means read-only on Windows REQUIRE(test_controller.getLog().getInstance().contains("Error opening file", std::chrono::seconds(0))); REQUIRE(test_controller.getLog().getInstance().contains("Permission denied", std::chrono::seconds(0))); + utils::file::FileUtils::set_permissions(path_to_permissionless_file, 0777); } TEST_CASE("Readonly filestream write test") {