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(); }
};
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};
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},
};
remove_unused_types(json_defaults, prov);
switch (prov) {
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] =
app_config::default_remote_api_port(prov);
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] =
app_config::default_remote_api_port(prov);
break;
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] =
app_config::default_api_port(prov);
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");
}},
#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,
[](app_config &cfg) {
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::remote_config remote_cfg3{};
remote_cfg1.api_port = 1U;
remote_cfg1.encryption_token = "2";
remote_cfg1.host_name_or_ip = "3";
remote_cfg1.max_connections = 4U;
remote_cfg1.recv_timeout_ms = 5U;
remote_cfg1.send_timeout_ms = 6U;
remote_cfg1.api_port = 7U;
remote_cfg1.encryption_token = "8";
remote_cfg1.host_name_or_ip = "9";
remote_cfg1.max_connections = 10U;
remote_cfg1.recv_timeout_ms = 11U;
remote_cfg1.send_timeout_ms = 12U;
auto value = cfg.set_value_by_name(
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{};
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(
fmt::format("{}.{}", JSON_REMOTE_MOUNT, JSON_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());
}},
{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,
[](app_config &cfg) {
test_getter_setter(
@ -510,62 +578,7 @@ static void common_tests(app_config &config, provider_type prov) {
}},
};
switch (config.get_provider_type()) {
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;
}
remove_unused_types(methods, prov);
for (const auto &[key, test_function] : methods) {
fmt::println("testing setting|{}-{}", app_config::get_provider_name(prov),