Refactored app_config unit tests

This commit is contained in:
Scott E. Graves 2025-02-15 11:37:38 -06:00
parent 85c769009a
commit c61afabbea

View File

@ -73,6 +73,65 @@ public:
void TearDown() override { event_system::instance().stop(); } void TearDown() override { event_system::instance().stop(); }
}; };
static void remove_unused_types(auto &data, provider_type prov) {
switch (prov) {
case provider_type::encrypt:
data.erase(JSON_DOWNLOAD_TIMEOUT_SECS);
data.erase(JSON_ENABLE_DOWNLOAD_TIMEOUT);
data.erase(JSON_EVICTION_DELAY_MINS);
data.erase(JSON_EVICTION_USE_ACCESS_TIME);
data.erase(JSON_HOST_CONFIG);
data.erase(JSON_MAX_CACHE_SIZE_BYTES);
data.erase(JSON_MAX_UPLOAD_COUNT);
data.erase(JSON_ONLINE_CHECK_RETRY_SECS);
data.erase(JSON_PREFERRED_DOWNLOAD_TYPE);
data.erase(JSON_REMOTE_CONFIG);
data.erase(JSON_RETRY_READ_COUNT);
data.erase(JSON_RING_BUFFER_FILE_SIZE);
data.erase(JSON_S3_CONFIG);
data.erase(JSON_SIA_CONFIG);
break;
case provider_type::remote:
data.erase(JSON_DATABASE_TYPE);
data.erase(JSON_DOWNLOAD_TIMEOUT_SECS);
data.erase(JSON_ENABLE_DOWNLOAD_TIMEOUT);
data.erase(JSON_ENCRYPT_CONFIG);
data.erase(JSON_EVICTION_DELAY_MINS);
data.erase(JSON_EVICTION_USE_ACCESS_TIME);
data.erase(JSON_HIGH_FREQ_INTERVAL_SECS);
data.erase(JSON_HOST_CONFIG);
data.erase(JSON_LOW_FREQ_INTERVAL_SECS);
data.erase(JSON_MAX_CACHE_SIZE_BYTES);
data.erase(JSON_MAX_UPLOAD_COUNT);
data.erase(JSON_MED_FREQ_INTERVAL_SECS);
data.erase(JSON_ONLINE_CHECK_RETRY_SECS);
data.erase(JSON_PREFERRED_DOWNLOAD_TYPE);
data.erase(JSON_REMOTE_MOUNT);
data.erase(JSON_RETRY_READ_COUNT);
data.erase(JSON_RING_BUFFER_FILE_SIZE);
data.erase(JSON_S3_CONFIG);
data.erase(JSON_SIA_CONFIG);
break;
case provider_type::s3:
data.erase(JSON_ENCRYPT_CONFIG);
data.erase(JSON_HOST_CONFIG);
data.erase(JSON_REMOTE_CONFIG);
data.erase(JSON_SIA_CONFIG);
break;
case provider_type::sia:
data.erase(JSON_ENCRYPT_CONFIG);
data.erase(JSON_REMOTE_CONFIG);
data.erase(JSON_S3_CONFIG);
break;
default:
return;
}
}
std::atomic<std::uint64_t> app_config_test::idx{0U}; std::atomic<std::uint64_t> app_config_test::idx{0U};
static void defaults_tests(const json &json_data, provider_type prov) { static void defaults_tests(const json &json_data, provider_type prov) {
@ -108,61 +167,19 @@ static void defaults_tests(const json &json_data, provider_type prov) {
{JSON_VERSION, REPERTORY_CONFIG_VERSION}, {JSON_VERSION, REPERTORY_CONFIG_VERSION},
}; };
remove_unused_types(json_defaults, prov);
switch (prov) { switch (prov) {
case provider_type::encrypt: case provider_type::encrypt:
json_defaults.erase(JSON_DOWNLOAD_TIMEOUT_SECS);
json_defaults.erase(JSON_ENABLE_DOWNLOAD_TIMEOUT);
json_defaults.erase(JSON_EVICTION_DELAY_MINS);
json_defaults.erase(JSON_EVICTION_USE_ACCESS_TIME);
json_defaults.erase(JSON_HOST_CONFIG);
json_defaults.erase(JSON_MAX_CACHE_SIZE_BYTES);
json_defaults.erase(JSON_MAX_UPLOAD_COUNT);
json_defaults.erase(JSON_ONLINE_CHECK_RETRY_SECS);
json_defaults.erase(JSON_PREFERRED_DOWNLOAD_TYPE);
json_defaults.erase(JSON_REMOTE_CONFIG);
json_defaults.erase(JSON_RETRY_READ_COUNT);
json_defaults.erase(JSON_RING_BUFFER_FILE_SIZE);
json_defaults.erase(JSON_S3_CONFIG);
json_defaults.erase(JSON_SIA_CONFIG);
json_defaults[JSON_REMOTE_MOUNT][JSON_API_PORT] = json_defaults[JSON_REMOTE_MOUNT][JSON_API_PORT] =
app_config::default_remote_api_port(prov); app_config::default_remote_api_port(prov);
break; break;
case provider_type::remote:
json_defaults.erase(JSON_DATABASE_TYPE);
json_defaults.erase(JSON_DOWNLOAD_TIMEOUT_SECS);
json_defaults.erase(JSON_ENABLE_DOWNLOAD_TIMEOUT);
json_defaults.erase(JSON_ENCRYPT_CONFIG);
json_defaults.erase(JSON_EVICTION_DELAY_MINS);
json_defaults.erase(JSON_EVICTION_USE_ACCESS_TIME);
json_defaults.erase(JSON_HIGH_FREQ_INTERVAL_SECS);
json_defaults.erase(JSON_HOST_CONFIG);
json_defaults.erase(JSON_LOW_FREQ_INTERVAL_SECS);
json_defaults.erase(JSON_MAX_CACHE_SIZE_BYTES);
json_defaults.erase(JSON_MAX_UPLOAD_COUNT);
json_defaults.erase(JSON_MED_FREQ_INTERVAL_SECS);
json_defaults.erase(JSON_ONLINE_CHECK_RETRY_SECS);
json_defaults.erase(JSON_PREFERRED_DOWNLOAD_TYPE);
json_defaults.erase(JSON_REMOTE_MOUNT);
json_defaults.erase(JSON_RETRY_READ_COUNT);
json_defaults.erase(JSON_RING_BUFFER_FILE_SIZE);
json_defaults.erase(JSON_S3_CONFIG);
json_defaults.erase(JSON_SIA_CONFIG);
break;
case provider_type::s3:
json_defaults.erase(JSON_ENCRYPT_CONFIG);
json_defaults.erase(JSON_HOST_CONFIG);
json_defaults.erase(JSON_REMOTE_CONFIG);
json_defaults.erase(JSON_SIA_CONFIG);
json_defaults[JSON_REMOTE_MOUNT][JSON_API_PORT] = json_defaults[JSON_REMOTE_MOUNT][JSON_API_PORT] =
app_config::default_remote_api_port(prov); app_config::default_remote_api_port(prov);
break; break;
case provider_type::sia: case provider_type::sia:
json_defaults.erase(JSON_ENCRYPT_CONFIG);
json_defaults.erase(JSON_REMOTE_CONFIG);
json_defaults.erase(JSON_S3_CONFIG);
json_defaults[JSON_HOST_CONFIG][JSON_API_PORT] = json_defaults[JSON_HOST_CONFIG][JSON_API_PORT] =
app_config::default_api_port(prov); app_config::default_api_port(prov);
json_defaults[JSON_HOST_CONFIG][JSON_AGENT_STRING] = json_defaults[JSON_HOST_CONFIG][JSON_AGENT_STRING] =
@ -264,7 +281,34 @@ static void common_tests(app_config &config, provider_type prov) {
JSON_ENABLE_REMOTE_MOUNT, "1"); JSON_ENABLE_REMOTE_MOUNT, "1");
}}, }},
#endif // defined(_WIN32) #endif // defined(_WIN32)
{JSON_ENCRYPT_CONFIG, [](auto &&cfg) {}}, {JSON_ENCRYPT_CONFIG,
[](app_config &cfg) {
encrypt_config cfg1{};
cfg1.encryption_token = "1";
cfg1.path = "2";
encrypt_config cfg2{};
cfg2.encryption_token = "2";
cfg2.path = "1";
ASSERT_NE(cfg1, cfg2);
test_getter_setter(cfg, &app_config::get_encrypt_config,
&app_config::set_encrypt_config, cfg1, cfg2, "",
"");
encrypt_config cfg3{};
cfg3.encryption_token = "3";
cfg3.path = "4";
auto value = cfg.set_value_by_name(
fmt::format("{}.{}", JSON_ENCRYPT_CONFIG, JSON_ENCRYPTION_TOKEN),
cfg3.encryption_token);
EXPECT_STREQ(cfg3.encryption_token.c_str(), value.c_str());
value = cfg.set_value_by_name(
fmt::format("{}.{}", JSON_ENCRYPT_CONFIG, JSON_PATH), cfg3.path);
EXPECT_STREQ(cfg3.path.c_str(), value.c_str());
}},
{JSON_EVENT_LEVEL, {JSON_EVENT_LEVEL,
[](app_config &cfg) { [](app_config &cfg) {
test_getter_setter(cfg, &app_config::get_event_level, test_getter_setter(cfg, &app_config::get_event_level,
@ -389,12 +433,12 @@ static void common_tests(app_config &config, provider_type prov) {
remote_cfg2, "", ""); remote_cfg2, "", "");
remote::remote_config remote_cfg3{}; remote::remote_config remote_cfg3{};
remote_cfg1.api_port = 1U; remote_cfg1.api_port = 7U;
remote_cfg1.encryption_token = "2"; remote_cfg1.encryption_token = "8";
remote_cfg1.host_name_or_ip = "3"; remote_cfg1.host_name_or_ip = "9";
remote_cfg1.max_connections = 4U; remote_cfg1.max_connections = 10U;
remote_cfg1.recv_timeout_ms = 5U; remote_cfg1.recv_timeout_ms = 11U;
remote_cfg1.send_timeout_ms = 6U; remote_cfg1.send_timeout_ms = 12U;
auto value = cfg.set_value_by_name( auto value = cfg.set_value_by_name(
fmt::format("{}.{}", JSON_REMOTE_CONFIG, JSON_API_PORT), fmt::format("{}.{}", JSON_REMOTE_CONFIG, JSON_API_PORT),
@ -451,6 +495,11 @@ static void common_tests(app_config &config, provider_type prov) {
"", ""); "", "");
remote::remote_mount mnt_cfg3{}; remote::remote_mount mnt_cfg3{};
mnt_cfg3.api_port = 9U;
mnt_cfg3.client_pool_size = 10U;
mnt_cfg3.enable = false;
mnt_cfg3.encryption_token = "11";
auto value = cfg.set_value_by_name( auto value = cfg.set_value_by_name(
fmt::format("{}.{}", JSON_REMOTE_MOUNT, JSON_API_PORT), fmt::format("{}.{}", JSON_REMOTE_MOUNT, JSON_API_PORT),
std::to_string(mnt_cfg3.api_port)); std::to_string(mnt_cfg3.api_port));
@ -496,7 +545,26 @@ static void common_tests(app_config &config, provider_type prov) {
EXPECT_EQ(max_ring_buffer_file_size, cfg.get_ring_buffer_file_size()); EXPECT_EQ(max_ring_buffer_file_size, cfg.get_ring_buffer_file_size());
}}, }},
{JSON_S3_CONFIG, [](auto &&cfg) {}}, {JSON_S3_CONFIG, [](auto &&cfg) {}},
{JSON_SIA_CONFIG, [](app_config &cfg) {}}, {JSON_SIA_CONFIG,
[](app_config &cfg) {
sia_config cfg1{};
cfg1.bucket = "1";
sia_config cfg2{};
cfg2.bucket = "2";
ASSERT_NE(cfg1, cfg2);
test_getter_setter(cfg, &app_config::get_sia_config,
&app_config::set_sia_config, cfg1, cfg2, "", "");
sia_config cfg3{};
cfg3.bucket = "3";
auto value = cfg.set_value_by_name(
fmt::format("{}.{}", JSON_SIA_CONFIG, JSON_BUCKET), cfg3.bucket);
EXPECT_STREQ(cfg3.bucket.c_str(), value.c_str());
}},
{JSON_TASK_WAIT_MS, {JSON_TASK_WAIT_MS,
[](app_config &cfg) { [](app_config &cfg) {
test_getter_setter( test_getter_setter(
@ -510,62 +578,7 @@ static void common_tests(app_config &config, provider_type prov) {
}}, }},
}; };
switch (config.get_provider_type()) { remove_unused_types(methods, prov);
case provider_type::encrypt:
methods.erase(JSON_DOWNLOAD_TIMEOUT_SECS);
methods.erase(JSON_ENABLE_DOWNLOAD_TIMEOUT);
methods.erase(JSON_EVICTION_DELAY_MINS);
methods.erase(JSON_EVICTION_USE_ACCESS_TIME);
methods.erase(JSON_HOST_CONFIG);
methods.erase(JSON_MAX_CACHE_SIZE_BYTES);
methods.erase(JSON_MAX_UPLOAD_COUNT);
methods.erase(JSON_ONLINE_CHECK_RETRY_SECS);
methods.erase(JSON_PREFERRED_DOWNLOAD_TYPE);
methods.erase(JSON_REMOTE_CONFIG);
methods.erase(JSON_RETRY_READ_COUNT);
methods.erase(JSON_RING_BUFFER_FILE_SIZE);
methods.erase(JSON_S3_CONFIG);
methods.erase(JSON_SIA_CONFIG);
break;
case provider_type::remote:
methods.erase(JSON_DATABASE_TYPE);
methods.erase(JSON_DOWNLOAD_TIMEOUT_SECS);
methods.erase(JSON_ENABLE_DOWNLOAD_TIMEOUT);
methods.erase(JSON_ENCRYPT_CONFIG);
methods.erase(JSON_EVICTION_DELAY_MINS);
methods.erase(JSON_EVICTION_USE_ACCESS_TIME);
methods.erase(JSON_HIGH_FREQ_INTERVAL_SECS);
methods.erase(JSON_HOST_CONFIG);
methods.erase(JSON_LOW_FREQ_INTERVAL_SECS);
methods.erase(JSON_MAX_CACHE_SIZE_BYTES);
methods.erase(JSON_MAX_UPLOAD_COUNT);
methods.erase(JSON_MED_FREQ_INTERVAL_SECS);
methods.erase(JSON_ONLINE_CHECK_RETRY_SECS);
methods.erase(JSON_PREFERRED_DOWNLOAD_TYPE);
methods.erase(JSON_REMOTE_MOUNT);
methods.erase(JSON_RETRY_READ_COUNT);
methods.erase(JSON_RING_BUFFER_FILE_SIZE);
methods.erase(JSON_S3_CONFIG);
methods.erase(JSON_SIA_CONFIG);
break;
case provider_type::s3:
methods.erase(JSON_ENCRYPT_CONFIG);
methods.erase(JSON_HOST_CONFIG);
methods.erase(JSON_REMOTE_CONFIG);
methods.erase(JSON_SIA_CONFIG);
break;
case provider_type::sia:
methods.erase(JSON_ENCRYPT_CONFIG);
methods.erase(JSON_REMOTE_CONFIG);
methods.erase(JSON_S3_CONFIG);
break;
default:
return;
}
for (const auto &[key, test_function] : methods) { for (const auto &[key, test_function] : methods) {
fmt::println("testing setting|{}-{}", app_config::get_provider_name(prov), fmt::println("testing setting|{}-{}", app_config::get_provider_name(prov),