diff --git a/src/file_manager/file_manager.cpp b/src/file_manager/file_manager.cpp index 7a127ad7..ea00fb1c 100644 --- a/src/file_manager/file_manager.cpp +++ b/src/file_manager/file_manager.cpp @@ -711,6 +711,10 @@ auto file_manager::rename_file(const std::string &from_api_path, } void file_manager::start() { + polling::instance().set_callback( + {"timed_out_close", polling::frequency::second, + [this]() { this->close_timed_out_files(); }}); + if (provider_.is_direct_only()) { stop_requested_ = false; return; @@ -791,9 +795,6 @@ void file_manager::start() { upload_thread_ = std::make_unique([this] { upload_handler(); }); - polling::instance().set_callback( - {"timed_out_close", polling::frequency::second, - [this]() { this->close_timed_out_files(); }}); event_system::instance().raise("file_manager"); } } diff --git a/tests/file_manager_test.cpp b/tests/file_manager_test.cpp index 108cbdc7..a72c36cf 100644 --- a/tests/file_manager_test.cpp +++ b/tests/file_manager_test.cpp @@ -94,10 +94,13 @@ TEST(file_manager, can_create_and_close_file) { mock_provider mp; EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false)); + polling::instance().start(&cfg); file_manager fm(cfg, mp); + fm.start(); event_capture capture({ + "item_timeout", "filesystem_item_opened", "filesystem_item_handle_opened", "filesystem_item_handle_closed", @@ -184,12 +187,16 @@ TEST(file_manager, can_create_and_close_file) { fm.close(handle); - EXPECT_EQ(std::size_t(0u), fm.get_open_file_count()); + EXPECT_EQ(std::size_t(1u), fm.get_open_file_count()); EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count()); capture.wait_for_empty(); + EXPECT_EQ(std::size_t(0u), fm.get_open_file_count()); + + fm.stop(); } + polling::instance().stop(); event_system::instance().stop(); EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); } @@ -205,9 +212,12 @@ TEST(file_manager, can_open_and_close_file) { EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false)); + polling::instance().start(&cfg); file_manager fm(cfg, mp); + fm.start(); event_capture capture({ + "item_timeout", "filesystem_item_opened", "filesystem_item_handle_opened", "filesystem_item_handle_closed", @@ -293,12 +303,16 @@ TEST(file_manager, can_open_and_close_file) { fm.close(handle); - EXPECT_EQ(std::size_t(0u), fm.get_open_file_count()); + EXPECT_EQ(std::size_t(1u), fm.get_open_file_count()); EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count()); capture.wait_for_empty(); + EXPECT_EQ(std::size_t(0u), fm.get_open_file_count()); + + fm.stop(); } + polling::instance().stop(); event_system::instance().stop(); EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); } @@ -314,7 +328,9 @@ TEST(file_manager, can_open_and_close_multiple_handles_for_same_file) { EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false)); + polling::instance().start(&cfg); file_manager fm(cfg, mp); + fm.start(); { const auto source_path = utils::path::combine( @@ -362,12 +378,14 @@ TEST(file_manager, can_open_and_close_multiple_handles_for_same_file) { EXPECT_EQ(std::size_t(handles.size() - i), fm.get_open_handle_count()); fm.close(handles[i]); } + fm.stop(); } EXPECT_EQ(std::size_t(0u), fm.get_open_file_count()); EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count()); } + polling::instance().stop(); event_system::instance().stop(); EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); } @@ -537,6 +555,7 @@ TEST(file_manager, upload_occurs_after_write_if_fully_downloaded) { EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false)); + polling::instance().start(&cfg); file_manager fm(cfg, mp); fm.start(); @@ -624,7 +643,8 @@ TEST(file_manager, upload_occurs_after_write_if_fully_downloaded) { upload_file("/test_write_full_download.txt", source_path, _)) .WillOnce(Return(api_error::success)); - event_capture ec2({"file_upload_queued", "file_upload_completed"}); + event_capture ec2( + {"item_timeout", "file_upload_queued", "file_upload_completed"}); fm.close(handle); ec2.wait_for_empty(); @@ -637,6 +657,7 @@ TEST(file_manager, upload_occurs_after_write_if_fully_downloaded) { nf->close(); } + polling::instance().stop(); event_system::instance().stop(); EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); }