meta db unit tests and fixes

This commit is contained in:
Scott E. Graves 2024-12-04 14:44:41 -06:00
parent 89d4b4245d
commit cf1ee8db02
3 changed files with 85 additions and 6 deletions

View File

@ -375,12 +375,14 @@ auto rdb_meta_db::update_item_meta(const std::string &api_path, json json_data)
auto directory = auto directory =
utils::string::to_bool(json_data.at(META_DIRECTORY).get<std::string>()); utils::string::to_bool(json_data.at(META_DIRECTORY).get<std::string>());
auto pinned = auto pinned = directory ? false
utils::string::to_bool(json_data.at(META_PINNED).get<std::string>()); : utils::string::to_bool(
json_data.at(META_PINNED).get<std::string>());
auto size = directory ? std::uint64_t(0U) auto size = directory ? std::uint64_t(0U)
: utils::string::to_uint64( : utils::string::to_uint64(
json_data.at(META_SIZE).get<std::string>()); json_data.at(META_SIZE).get<std::string>());
auto source_path = json_data.at(META_SOURCE).get<std::string>(); auto source_path =
directory ? "" : json_data.at(META_SOURCE).get<std::string>();
if (orig_source_path != source_path && not orig_source_path.empty()) { if (orig_source_path != source_path && not orig_source_path.empty()) {
ret = perform_action(function_name, [&]() -> rocksdb::Status { ret = perform_action(function_name, [&]() -> rocksdb::Status {
return db_->Delete(rocksdb::WriteOptions(), source_family_, return db_->Delete(rocksdb::WriteOptions(), source_family_,

View File

@ -318,10 +318,11 @@ auto sqlite_meta_db::update_item_meta(const std::string &api_path,
} }
auto directory = utils::string::to_bool(meta.at(META_DIRECTORY)); auto directory = utils::string::to_bool(meta.at(META_DIRECTORY));
auto pinned = utils::string::to_bool(meta.at(META_PINNED)); auto pinned =
directory ? false : utils::string::to_bool(meta.at(META_PINNED));
auto size = directory ? std::uint64_t(0U) auto size = directory ? std::uint64_t(0U)
: utils::string::to_uint64(meta.at(META_SIZE)); : utils::string::to_uint64(meta.at(META_SIZE));
auto source_path = meta.at(META_SOURCE); auto source_path = directory ? "" : meta.at(META_SOURCE);
meta.erase(META_DIRECTORY); meta.erase(META_DIRECTORY);
meta.erase(META_PINNED); meta.erase(META_PINNED);

View File

@ -76,7 +76,7 @@ TYPED_TEST(meta_db_test, can_change_source_path) {
} }
TYPED_TEST(meta_db_test, TYPED_TEST(meta_db_test,
get_api_path_return_item_not_found_if_source_does_not_exist) { get_api_path_returns_item_not_found_if_source_does_not_exist) {
std::string api_path; std::string api_path;
EXPECT_EQ(api_error::item_not_found, EXPECT_EQ(api_error::item_not_found,
this->meta_db->get_api_path(create_test_file(), api_path)); this->meta_db->get_api_path(create_test_file(), api_path));
@ -93,4 +93,80 @@ TYPED_TEST(meta_db_test, set_item_meta_fails_with_missing_directory_meta) {
EXPECT_EQ(api_error::error, EXPECT_EQ(api_error::error,
this->meta_db->set_item_meta(test_file, META_SOURCE, test_source)); this->meta_db->set_item_meta(test_file, META_SOURCE, test_source));
} }
TYPED_TEST(meta_db_test, can_get_api_file_list) {
std::vector<std::string> directories{};
for (auto idx = 0U; idx < 5U; ++idx) {
auto test_dir = create_test_file();
directories.push_back(test_dir);
EXPECT_EQ(
api_error::success,
this->meta_db->set_item_meta(
test_dir, {
{META_DIRECTORY, utils::string::from_bool(true)},
}));
}
std::vector<std::string> files{};
for (auto idx = 0U; idx < 5U; ++idx) {
auto test_file = create_test_file();
files.push_back(test_file);
EXPECT_EQ(
api_error::success,
this->meta_db->set_item_meta(
test_file, {
{META_DIRECTORY, utils::string::from_bool(false)},
}));
}
auto file_list = this->meta_db->get_api_path_list();
for (const auto &api_path : directories) {
EXPECT_TRUE(utils::collection::includes(file_list, api_path));
}
for (const auto &api_path : files) {
EXPECT_TRUE(utils::collection::includes(file_list, api_path));
}
}
TYPED_TEST(meta_db_test, can_get_full_item_meta_for_directory) {
auto api_path = create_test_file();
auto source_path = create_test_file();
EXPECT_EQ(api_error::success,
this->meta_db->set_item_meta(
api_path, {
{META_DIRECTORY, utils::string::from_bool(true)},
{META_PINNED, utils::string::from_bool(true)},
{META_SIZE, std::to_string(2ULL)},
{META_SOURCE, source_path},
}));
api_meta_map meta;
EXPECT_EQ(api_error::success, this->meta_db->get_item_meta(api_path, meta));
EXPECT_TRUE(utils::string::to_bool(meta[META_DIRECTORY]));
EXPECT_FALSE(utils::string::to_bool(meta[META_PINNED]));
EXPECT_EQ(0U, utils::string::to_uint64(meta[META_SIZE]));
EXPECT_TRUE(meta[META_SOURCE].empty());
}
TYPED_TEST(meta_db_test, can_get_full_item_meta_for_file) {
auto api_path = create_test_file();
auto source_path = create_test_file();
EXPECT_EQ(api_error::success,
this->meta_db->set_item_meta(
api_path, {
{META_DIRECTORY, utils::string::from_bool(false)},
{META_PINNED, utils::string::from_bool(true)},
{META_SIZE, std::to_string(2ULL)},
{META_SOURCE, source_path},
}));
api_meta_map meta;
EXPECT_EQ(api_error::success, this->meta_db->get_item_meta(api_path, meta));
EXPECT_FALSE(utils::string::to_bool(meta[META_DIRECTORY]));
EXPECT_TRUE(utils::string::to_bool(meta[META_PINNED]));
EXPECT_EQ(2ULL, utils::string::to_uint64(meta[META_SIZE]));
EXPECT_STREQ(source_path.c_str(), meta[META_SOURCE].c_str());
}
} // namespace repertory } // namespace repertory