unit tests and fixes
All checks were successful
BlockStorage/repertory_osx_builds/pipeline/head This commit looks good
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good

This commit is contained in:
Scott E. Graves 2023-11-30 13:32:06 -06:00
parent 5911d370e5
commit dfa5e0e005
2 changed files with 28 additions and 6 deletions

View File

@ -711,6 +711,10 @@ auto file_manager::rename_file(const std::string &from_api_path,
} }
void file_manager::start() { 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()) { if (provider_.is_direct_only()) {
stop_requested_ = false; stop_requested_ = false;
return; return;
@ -791,9 +795,6 @@ void file_manager::start() {
upload_thread_ = upload_thread_ =
std::make_unique<std::thread>([this] { upload_handler(); }); std::make_unique<std::thread>([this] { upload_handler(); });
polling::instance().set_callback(
{"timed_out_close", polling::frequency::second,
[this]() { this->close_timed_out_files(); }});
event_system::instance().raise<service_started>("file_manager"); event_system::instance().raise<service_started>("file_manager");
} }
} }

View File

@ -94,10 +94,13 @@ TEST(file_manager, can_create_and_close_file) {
mock_provider mp; mock_provider mp;
EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false)); EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false));
polling::instance().start(&cfg);
file_manager fm(cfg, mp); file_manager fm(cfg, mp);
fm.start();
event_capture capture({ event_capture capture({
"item_timeout",
"filesystem_item_opened", "filesystem_item_opened",
"filesystem_item_handle_opened", "filesystem_item_handle_opened",
"filesystem_item_handle_closed", "filesystem_item_handle_closed",
@ -184,12 +187,16 @@ TEST(file_manager, can_create_and_close_file) {
fm.close(handle); 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()); EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count());
capture.wait_for_empty(); capture.wait_for_empty();
EXPECT_EQ(std::size_t(0u), fm.get_open_file_count());
fm.stop();
} }
polling::instance().stop();
event_system::instance().stop(); event_system::instance().stop();
EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); 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)); EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false));
polling::instance().start(&cfg);
file_manager fm(cfg, mp); file_manager fm(cfg, mp);
fm.start();
event_capture capture({ event_capture capture({
"item_timeout",
"filesystem_item_opened", "filesystem_item_opened",
"filesystem_item_handle_opened", "filesystem_item_handle_opened",
"filesystem_item_handle_closed", "filesystem_item_handle_closed",
@ -293,12 +303,16 @@ TEST(file_manager, can_open_and_close_file) {
fm.close(handle); 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()); EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count());
capture.wait_for_empty(); capture.wait_for_empty();
EXPECT_EQ(std::size_t(0u), fm.get_open_file_count());
fm.stop();
} }
polling::instance().stop();
event_system::instance().stop(); event_system::instance().stop();
EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); 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)); EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false));
polling::instance().start(&cfg);
file_manager fm(cfg, mp); file_manager fm(cfg, mp);
fm.start();
{ {
const auto source_path = utils::path::combine( 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()); EXPECT_EQ(std::size_t(handles.size() - i), fm.get_open_handle_count());
fm.close(handles[i]); 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_file_count());
EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count()); EXPECT_EQ(std::size_t(0u), fm.get_open_handle_count());
} }
polling::instance().stop();
event_system::instance().stop(); event_system::instance().stop();
EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); 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)); EXPECT_CALL(mp, is_direct_only()).WillRepeatedly(Return(false));
polling::instance().start(&cfg);
file_manager fm(cfg, mp); file_manager fm(cfg, mp);
fm.start(); 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, _)) upload_file("/test_write_full_download.txt", source_path, _))
.WillOnce(Return(api_error::success)); .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); fm.close(handle);
ec2.wait_for_empty(); ec2.wait_for_empty();
@ -637,6 +657,7 @@ TEST(file_manager, upload_occurs_after_write_if_fully_downloaded) {
nf->close(); nf->close();
} }
polling::instance().stop();
event_system::instance().stop(); event_system::instance().stop();
EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test")); EXPECT_TRUE(utils::file::delete_directory_recursively("./fm_test"));
} }