Refactored app_config unit tests

This commit is contained in:
Scott E. Graves 2025-02-15 07:39:16 -06:00
parent 264e18b842
commit 4686a42256
3 changed files with 106 additions and 65 deletions

View File

@ -26,13 +26,13 @@ namespace repertory {
constexpr const auto default_api_auth_size{48U};
constexpr const auto default_download_timeout_secs{30U};
constexpr const auto default_eviction_delay_mins{1U};
constexpr const auto default_high_freq_interval_secs{30U};
constexpr const auto default_high_freq_interval_secs{std::uint16_t{30U}};
constexpr const auto default_low_freq_interval_secs{std::uint16_t(60U * 60U)};
constexpr const auto default_max_cache_size_bytes{
std::uint64_t(20ULL * 1024ULL * 1024ULL * 1024ULL),
};
constexpr const auto default_max_upload_count{5U};
constexpr const auto default_med_freq_interval_secs{2U * 60U};
constexpr const auto default_med_freq_interval_secs{std::uint16_t{2U * 60U}};
constexpr const auto default_online_check_retry_secs{60U};
constexpr const auto default_orphaned_file_retention_days{15U};
constexpr const auto default_retry_read_count{6U};

View File

@ -349,7 +349,7 @@ app_config::app_config(const provider_type &prov,
{
JSON_HIGH_FREQ_INTERVAL_SECS,
[this](const std::string &value) {
set_high_frequency_interval_secs(utils::string::to_uint8(value));
set_high_frequency_interval_secs(utils::string::to_uint16(value));
return std::to_string(get_high_frequency_interval_secs());
},
},
@ -401,14 +401,14 @@ app_config::app_config(const provider_type &prov,
{
JSON_LOW_FREQ_INTERVAL_SECS,
[this](const std::string &value) {
set_low_frequency_interval_secs(utils::string::to_uint8(value));
set_low_frequency_interval_secs(utils::string::to_uint16(value));
return std::to_string(get_low_frequency_interval_secs());
},
},
{
JSON_MED_FREQ_INTERVAL_SECS,
[this](const std::string &value) {
set_med_frequency_interval_secs(utils::string::to_uint8(value));
set_med_frequency_interval_secs(utils::string::to_uint16(value));
return std::to_string(get_med_frequency_interval_secs());
},
},

View File

@ -181,91 +181,132 @@ static void defaults_tests(const json &json_data, provider_type prov) {
}
}
template <typename get_t, typename set_t, typename val_t>
static void test_getter_setter(app_config &cfg, get_t getter, set_t setter,
val_t val1, val_t val2, const std::string &key,
const std::string &val_str) {
(cfg.*setter)(val1);
ASSERT_TRUE((cfg.*getter)() == val1);
(cfg.*setter)(val2);
ASSERT_TRUE((cfg.*getter)() == val2);
EXPECT_STREQ(val_str.c_str(), cfg.set_value_by_name(key, val_str).c_str());
}
static void common_tests(app_config &config, provider_type prov) {
ASSERT_EQ(config.get_provider_type(), prov);
std::map<std::string_view, std::function<void(app_config &)>> methods{
{JSON_API_AUTH,
[](app_config &cfg) {
cfg.set_api_auth("");
EXPECT_STREQ("", cfg.get_api_auth().c_str());
cfg.set_api_auth("test");
EXPECT_STREQ("test", cfg.get_api_auth().c_str());
auto value = cfg.set_value_by_name(JSON_API_AUTH, "test2");
EXPECT_STREQ("test2", value.c_str());
EXPECT_STREQ("test2", cfg.get_api_auth().c_str());
value = cfg.get_value_by_name(JSON_API_AUTH);
EXPECT_STREQ("test2", value.c_str());
test_getter_setter(cfg, &app_config::get_api_auth,
&app_config::set_api_auth, "", "auth",
JSON_API_AUTH, "auth2");
}},
{JSON_API_PORT,
[](app_config &cfg) {
cfg.set_api_port(0U);
EXPECT_EQ(std::uint16_t(0U), cfg.get_api_port());
cfg.set_api_port(1024U);
EXPECT_EQ(std::uint16_t(1024U), cfg.get_api_port());
auto value = cfg.set_value_by_name(JSON_API_PORT, "1025");
EXPECT_STREQ("1025", value.c_str());
EXPECT_EQ(std::uint16_t(1025U), cfg.get_api_port());
value = cfg.get_value_by_name(JSON_API_PORT);
EXPECT_STREQ("1025", value.c_str());
test_getter_setter(cfg, &app_config::get_api_port,
&app_config::set_api_port, std::uint16_t{0U},
std::uint16_t{1024U}, JSON_API_PORT, "1025");
}},
{JSON_API_USER,
[](app_config &cfg) {
cfg.set_api_user("");
EXPECT_STREQ("", cfg.get_api_user().c_str());
cfg.set_api_user("test");
EXPECT_STREQ("test", cfg.get_api_user().c_str());
auto value = cfg.set_value_by_name(JSON_API_USER, "test2");
EXPECT_STREQ("test2", value.c_str());
EXPECT_STREQ("test2", cfg.get_api_user().c_str());
value = cfg.get_value_by_name(JSON_API_USER);
EXPECT_STREQ("test2", value.c_str());
test_getter_setter(cfg, &app_config::get_api_user,
&app_config::set_api_user, "", "user",
JSON_API_USER, "user2");
}},
{JSON_DOWNLOAD_TIMEOUT_SECS,
[](app_config &cfg) {
cfg.set_download_timeout_secs(min_download_timeout_secs);
EXPECT_EQ(std::uint8_t(min_download_timeout_secs),
cfg.get_download_timeout_secs());
cfg.set_download_timeout_secs(min_download_timeout_secs + 1U);
EXPECT_EQ(std::uint8_t(min_download_timeout_secs + 1U),
cfg.get_download_timeout_secs());
auto value = cfg.set_value_by_name(JSON_DOWNLOAD_TIMEOUT_SECS, "26");
EXPECT_STREQ("26", value.c_str());
EXPECT_EQ(std::uint8_t(26U), cfg.get_download_timeout_secs());
value = cfg.get_value_by_name(JSON_DOWNLOAD_TIMEOUT_SECS);
EXPECT_STREQ("26", value.c_str());
test_getter_setter(cfg, &app_config::get_download_timeout_secs,
&app_config::set_download_timeout_secs,
min_download_timeout_secs,
std::uint8_t{min_download_timeout_secs + 1U},
JSON_DOWNLOAD_TIMEOUT_SECS, "26");
cfg.set_download_timeout_secs(min_download_timeout_secs - 1U);
EXPECT_EQ(min_download_timeout_secs, cfg.get_download_timeout_secs());
}},
{JSON_DATABASE_TYPE, [](auto &&cfg) {}},
{JSON_ENABLE_DOWNLOAD_TIMEOUT, [](auto &&cfg) {}},
{JSON_ENABLE_DRIVE_EVENTS, [](auto &&cfg) {}},
{JSON_DATABASE_TYPE,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_database_type,
&app_config::set_database_type,
database_type::rocksdb, database_type::sqlite,
JSON_DATABASE_TYPE, "rocksdb");
}},
{JSON_ENABLE_DOWNLOAD_TIMEOUT,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_enable_download_timeout,
&app_config::set_enable_download_timeout, true,
false, JSON_ENABLE_DOWNLOAD_TIMEOUT, "1");
}},
{JSON_ENABLE_DRIVE_EVENTS,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_enable_drive_events,
&app_config::set_enable_drive_events, true, false,
JSON_ENABLE_DRIVE_EVENTS, "1");
}},
#if defined(_WIN32)
{JSON_ENABLE_MOUNT_MANAGER, [](auto &&cfg) {}},
{JSON_ENABLE_REMOTE_MOUNT,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_enable_remote_mount,
&app_config::set_enable_remote_mount, true, false,
JSON_ENABLE_REMOTE_MOUNT, "1");
}},
#endif // defined(_WIN32)
{JSON_ENCRYPT_CONFIG, [](auto &&cfg) {}},
{JSON_EVENT_LEVEL, [](auto &&cfg) {}},
{JSON_EVICTION_DELAY_MINS, [](auto &&cfg) {}},
{JSON_EVICTION_USE_ACCESS_TIME, [](auto &&cfg) {}},
{JSON_HIGH_FREQ_INTERVAL_SECS, [](auto &&cfg) {}},
{JSON_EVENT_LEVEL,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_event_level,
&app_config::set_event_level, event_level::critical,
event_level::debug, JSON_EVENT_LEVEL, "info");
}},
{JSON_EVICTION_DELAY_MINS,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_eviction_delay_mins,
&app_config::set_eviction_delay_mins,
std::uint32_t{0U}, std::uint32_t{1U},
JSON_EVICTION_DELAY_MINS, "2");
}},
{JSON_EVICTION_USE_ACCESS_TIME,
[](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_eviction_uses_accessed_time,
&app_config::set_eviction_uses_accessed_time, true,
false, JSON_EVICTION_USE_ACCESS_TIME, "1");
}},
{JSON_HIGH_FREQ_INTERVAL_SECS,
[](app_config &cfg) {
test_getter_setter(
cfg, &app_config::get_high_frequency_interval_secs,
&app_config::set_high_frequency_interval_secs,
std::uint16_t{default_high_freq_interval_secs + 1U},
std::uint16_t{default_high_freq_interval_secs + 2U},
JSON_HIGH_FREQ_INTERVAL_SECS,
std::to_string(default_high_freq_interval_secs + 3U));
}},
{JSON_HOST_CONFIG, [](auto &&cfg) {}},
{JSON_LOW_FREQ_INTERVAL_SECS, [](auto &&cfg) {}},
{JSON_LOW_FREQ_INTERVAL_SECS,
[](app_config &cfg) {
test_getter_setter(
cfg, &app_config::get_low_frequency_interval_secs,
&app_config::set_low_frequency_interval_secs,
std::uint16_t{default_low_freq_interval_secs + 1U},
std::uint16_t{default_low_freq_interval_secs + 2U},
JSON_LOW_FREQ_INTERVAL_SECS,
std::to_string(default_low_freq_interval_secs + 3U));
}},
{JSON_MAX_CACHE_SIZE_BYTES, [](auto &&cfg) {}},
{JSON_MAX_UPLOAD_COUNT, [](auto &&cfg) {}},
{JSON_MED_FREQ_INTERVAL_SECS, [](auto &&cfg) {}},
{JSON_MED_FREQ_INTERVAL_SECS,
[](app_config &cfg) {
test_getter_setter(
cfg, &app_config::get_med_frequency_interval_secs,
&app_config::set_med_frequency_interval_secs,
std::uint16_t{default_med_freq_interval_secs + 1U},
std::uint16_t{default_med_freq_interval_secs + 2U},
JSON_MED_FREQ_INTERVAL_SECS,
std::to_string(default_med_freq_interval_secs + 3U));
}},
{JSON_ONLINE_CHECK_RETRY_SECS, [](auto &&cfg) {}},
{JSON_ORPHANED_FILE_RETENTION_DAYS, [](auto &&cfg) {}},
{JSON_PREFERRED_DOWNLOAD_TYPE, [](auto &&cfg) {}},