Compare commits
18 Commits
3917a3d160
...
51d094a385
Author | SHA1 | Date | |
---|---|---|---|
51d094a385 | |||
0fffbb672a | |||
442e694d09 | |||
e8365f4896 | |||
7f957c04dd | |||
0eb28f3124 | |||
6242a5478e | |||
542a80542a | |||
a244781b8d | |||
0398696e54 | |||
315db0b662 | |||
1b4c1db44d | |||
fc573e165b | |||
d3bf1d5f2f | |||
db76b728fd | |||
dc1322c0c4 | |||
b02d524d10 | |||
c70b896521 |
@ -192,6 +192,7 @@ secp256k1
|
||||
secur32
|
||||
sfml_project
|
||||
shlwapi
|
||||
skynet
|
||||
source_subdir
|
||||
spdlog
|
||||
spdlog_project
|
||||
|
@ -7,9 +7,15 @@
|
||||
* ~~\#12 [Unit Test] Complete all providers unit tests~~
|
||||
* ~~\#21 [Unit Test] Complete WinFSP unit tests~~
|
||||
* ~~\#22 [Unit Test] Complete FUSE unit tests~~
|
||||
* \#35 [bug] Low frequency check is set to '0' instead of 1 hour by default
|
||||
* \#36 [bug] Max cache size bytes is set to '0' by default
|
||||
|
||||
### Changes from v2.0.3-rc
|
||||
|
||||
* Continue documentation updates
|
||||
* Refactored app_config unit tests
|
||||
* Refactored polling to be more accurate on scheduling tasks
|
||||
|
||||
## v2.0.3-rc
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
|
@ -31,26 +31,26 @@ private:
|
||||
static stop_type stop_requested;
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto
|
||||
default_agent_name(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto default_agent_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_api_port(const provider_type &prov) -> std::uint16_t;
|
||||
[[nodiscard]] static auto default_api_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_data_directory(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto default_data_directory(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_remote_api_port(const provider_type &prov) -> std::uint16_t;
|
||||
[[nodiscard]] static auto default_remote_api_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_rpc_port(const provider_type &prov) -> std::uint16_t;
|
||||
[[nodiscard]] static auto default_rpc_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_display_name(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto get_provider_display_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_name(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto get_provider_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto get_stop_requested() -> bool;
|
||||
@ -192,8 +192,11 @@ public:
|
||||
|
||||
[[nodiscard]] auto get_task_wait_ms() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto
|
||||
get_value_by_name(const std::string &name) const -> std::string;
|
||||
[[nodiscard]] auto get_value_by_name(const std::string &name) const
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto get_raw_value_by_name(const std::string &name) const
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto get_version() const -> std::uint64_t;
|
||||
|
||||
|
@ -57,7 +57,7 @@ using json = nlohmann::json;
|
||||
inline constexpr const std::string_view REPERTORY = "repertory";
|
||||
inline constexpr const std::wstring_view REPERTORY_W = L"repertory";
|
||||
|
||||
inline constexpr const std::uint64_t REPERTORY_CONFIG_VERSION = 0ULL;
|
||||
inline constexpr const std::uint64_t REPERTORY_CONFIG_VERSION = 1ULL;
|
||||
inline constexpr const std::string_view REPERTORY_DATA_NAME = "repertory2";
|
||||
inline constexpr const std::string_view REPERTORY_MIN_REMOTE_VERSION = "2.0.0";
|
||||
|
||||
@ -221,44 +221,25 @@ using WCHAR = wchar_t;
|
||||
|
||||
#define MAX_PATH 260
|
||||
|
||||
#define STATUS_SUCCESS \
|
||||
std::uint32_t { 0U }
|
||||
#define STATUS_ACCESS_DENIED \
|
||||
std::uint32_t { 0xC0000022L }
|
||||
#define STATUS_DEVICE_BUSY \
|
||||
std::uint32_t { 0x80000011L }
|
||||
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES \
|
||||
std::uint32_t { 0xC0000468L }
|
||||
#define STATUS_DIRECTORY_NOT_EMPTY \
|
||||
std::uint32_t { 0xC0000101L }
|
||||
#define STATUS_FILE_IS_A_DIRECTORY \
|
||||
std::uint32_t { 0xC00000BAL }
|
||||
#define STATUS_FILE_TOO_LARGE \
|
||||
std::uint32_t { 0xC0000904L }
|
||||
#define STATUS_INSUFFICIENT_RESOURCES \
|
||||
std::uint32_t { 0xC000009AL }
|
||||
#define STATUS_INTERNAL_ERROR \
|
||||
std::uint32_t { 0xC00000E5L }
|
||||
#define STATUS_INVALID_ADDRESS \
|
||||
std::uint32_t { 0xC0000141L }
|
||||
#define STATUS_INVALID_HANDLE \
|
||||
std::uint32_t { 0xC0000006L }
|
||||
#define STATUS_INVALID_IMAGE_FORMAT \
|
||||
std::uint32_t { 0xC000007BL }
|
||||
#define STATUS_INVALID_PARAMETER \
|
||||
std::uint32_t { 0xC000000DL }
|
||||
#define STATUS_NO_MEMORY \
|
||||
std::uint32_t { 0xC0000017L }
|
||||
#define STATUS_NOT_IMPLEMENTED \
|
||||
std::uint32_t { 0xC0000002L }
|
||||
#define STATUS_OBJECT_NAME_EXISTS \
|
||||
std::uint32_t { 0x40000000L }
|
||||
#define STATUS_OBJECT_NAME_NOT_FOUND \
|
||||
std::uint32_t { 0xC0000034L }
|
||||
#define STATUS_OBJECT_PATH_INVALID \
|
||||
std::uint32_t { 0xC0000039L }
|
||||
#define STATUS_UNEXPECTED_IO_ERROR \
|
||||
std::uint32_t { 0xC00000E9L }
|
||||
#define STATUS_SUCCESS std::uint32_t{0U}
|
||||
#define STATUS_ACCESS_DENIED std::uint32_t{0xC0000022L}
|
||||
#define STATUS_DEVICE_BUSY std::uint32_t{0x80000011L}
|
||||
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES std::uint32_t{0xC0000468L}
|
||||
#define STATUS_DIRECTORY_NOT_EMPTY std::uint32_t{0xC0000101L}
|
||||
#define STATUS_FILE_IS_A_DIRECTORY std::uint32_t{0xC00000BAL}
|
||||
#define STATUS_FILE_TOO_LARGE std::uint32_t{0xC0000904L}
|
||||
#define STATUS_INSUFFICIENT_RESOURCES std::uint32_t{0xC000009AL}
|
||||
#define STATUS_INTERNAL_ERROR std::uint32_t{0xC00000E5L}
|
||||
#define STATUS_INVALID_ADDRESS std::uint32_t{0xC0000141L}
|
||||
#define STATUS_INVALID_HANDLE std::uint32_t{0xC0000006L}
|
||||
#define STATUS_INVALID_IMAGE_FORMAT std::uint32_t{0xC000007BL}
|
||||
#define STATUS_INVALID_PARAMETER std::uint32_t{0xC000000DL}
|
||||
#define STATUS_NO_MEMORY std::uint32_t{0xC0000017L}
|
||||
#define STATUS_NOT_IMPLEMENTED std::uint32_t{0xC0000002L}
|
||||
#define STATUS_OBJECT_NAME_EXISTS std::uint32_t{0x40000000L}
|
||||
#define STATUS_OBJECT_NAME_NOT_FOUND std::uint32_t{0xC0000034L}
|
||||
#define STATUS_OBJECT_PATH_INVALID std::uint32_t{0xC0000039L}
|
||||
#define STATUS_UNEXPECTED_IO_ERROR std::uint32_t{0xC00000E9L}
|
||||
|
||||
#define CONVERT_STATUS_NOT_IMPLEMENTED(e) \
|
||||
((std::uint32_t(e) == STATUS_NOT_IMPLEMENTED) ? -ENOTSUP : e)
|
||||
|
@ -24,12 +24,12 @@
|
||||
|
||||
namespace repertory {
|
||||
constexpr const auto default_api_auth_size{48U};
|
||||
constexpr const auto default_download_timeout_ces{30U};
|
||||
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_low_freq_interval_secs{0U * 60U};
|
||||
constexpr const auto default_low_freq_interval_secs{std::uint16_t(60U * 60U)};
|
||||
constexpr const auto default_max_cache_size_bytes{
|
||||
std::uint64_t(20UL * 1024UL * 1024UL * 1024UL),
|
||||
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};
|
||||
@ -43,7 +43,7 @@ constexpr const auto max_orphaned_file_retention_days{std::uint16_t(31U)};
|
||||
constexpr const auto max_ring_buffer_file_size{std::uint16_t(1024U)};
|
||||
constexpr const auto max_s3_object_name_length{1024U};
|
||||
constexpr const auto min_cache_size_bytes{
|
||||
std::uint64_t(100UL * 1024UL * 1024UL),
|
||||
std::uint64_t(100ULL * 1024ULL * 1024ULL),
|
||||
};
|
||||
constexpr const auto min_download_timeout_secs{std::uint8_t(5U)};
|
||||
constexpr const auto min_online_check_retry_secs{std::uint16_t(15U)};
|
||||
@ -619,6 +619,16 @@ template <typename data_t> struct adl_serializer<repertory::atomic<data_t>> {
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct adl_serializer<std::atomic<std::uint64_t>> {
|
||||
static void to_json(json &data, const std::atomic<std::uint64_t> &value) {
|
||||
data = value.load();
|
||||
}
|
||||
|
||||
static void from_json(const json &data, std::atomic<std::uint64_t> &value) {
|
||||
value.store(data.get<std::uint64_t>());
|
||||
}
|
||||
};
|
||||
|
||||
template <typename primitive_t>
|
||||
struct adl_serializer<std::atomic<primitive_t>> {
|
||||
static void to_json(json &data, const std::atomic<primitive_t> &value) {
|
||||
@ -642,6 +652,18 @@ template <> struct adl_serializer<std::atomic<repertory::database_type>> {
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct adl_serializer<std::atomic<repertory::event_level>> {
|
||||
static void to_json(json &data,
|
||||
const std::atomic<repertory::event_level> &value) {
|
||||
data = repertory::event_level_to_string(value.load());
|
||||
}
|
||||
|
||||
static void from_json(const json &data,
|
||||
std::atomic<repertory::event_level> &value) {
|
||||
value.store(repertory::event_level_from_string(data.get<std::string>()));
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct adl_serializer<std::atomic<repertory::download_type>> {
|
||||
static void to_json(json &data,
|
||||
const std::atomic<repertory::download_type> &value) {
|
||||
@ -674,15 +696,13 @@ template <> struct adl_serializer<repertory::download_type> {
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct adl_serializer<std::atomic<repertory::event_level>> {
|
||||
static void to_json(json &data,
|
||||
const std::atomic<repertory::event_level> &value) {
|
||||
data = repertory::event_level_to_string(value.load());
|
||||
template <> struct adl_serializer<repertory::event_level> {
|
||||
static void to_json(json &data, const repertory::event_level &value) {
|
||||
data = repertory::event_level_to_string(value);
|
||||
}
|
||||
|
||||
static void from_json(const json &data,
|
||||
std::atomic<repertory::event_level> &value) {
|
||||
value.store(repertory::event_level_from_string(data.get<std::string>()));
|
||||
static void from_json(const json &data, repertory::event_level &value) {
|
||||
value = repertory::event_level_from_string(data.get<std::string>());
|
||||
}
|
||||
};
|
||||
NLOHMANN_JSON_NAMESPACE_END
|
||||
|
@ -70,7 +70,7 @@ app_config::app_config(const provider_type &prov,
|
||||
api_port_(default_rpc_port(prov)),
|
||||
api_user_(std::string{REPERTORY}),
|
||||
config_changed_(false),
|
||||
download_timeout_secs_(default_download_timeout_ces),
|
||||
download_timeout_secs_(default_download_timeout_secs),
|
||||
enable_download_timeout_(true),
|
||||
enable_drive_events_(false),
|
||||
#if defined(_WIN32)
|
||||
@ -250,7 +250,7 @@ app_config::app_config(const provider_type &prov,
|
||||
|
||||
value_set_lookup_ = {
|
||||
{
|
||||
JSON_API_PATH,
|
||||
JSON_API_AUTH,
|
||||
[this](const std::string &value) {
|
||||
set_api_auth(value);
|
||||
return get_api_auth();
|
||||
@ -1069,10 +1069,17 @@ auto app_config::load() -> bool {
|
||||
std::uint64_t version{};
|
||||
get_value(json_document, JSON_VERSION, version, found);
|
||||
|
||||
// Handle configuration defaults for new config versions
|
||||
if (version != REPERTORY_CONFIG_VERSION) {
|
||||
version_ = REPERTORY_CONFIG_VERSION;
|
||||
// TODO upgrade future version
|
||||
if (version_ == 1U) {
|
||||
if (low_freq_interval_secs_ == 0UL) {
|
||||
set_value(low_freq_interval_secs_, default_low_freq_interval_secs);
|
||||
}
|
||||
|
||||
if (max_cache_size_bytes_ == 0UL) {
|
||||
set_value(max_cache_size_bytes_, default_max_cache_size_bytes);
|
||||
}
|
||||
}
|
||||
found = false;
|
||||
}
|
||||
|
||||
|
@ -69,8 +69,8 @@ void base_provider::add_all_items(stop_type &stop_requested) {
|
||||
}
|
||||
|
||||
auto base_provider::create_api_file(std::string path, std::string key,
|
||||
std::uint64_t size,
|
||||
std::uint64_t file_time) -> api_file {
|
||||
std::uint64_t size, std::uint64_t file_time)
|
||||
-> api_file {
|
||||
api_file file{};
|
||||
file.api_path = utils::path::create_api_path(path);
|
||||
file.api_parent = utils::path::get_parent_api_path(file.api_path);
|
||||
@ -102,8 +102,8 @@ auto base_provider::create_api_file(std::string path, std::uint64_t size,
|
||||
}
|
||||
|
||||
auto base_provider::create_directory_clone_source_meta(
|
||||
const std::string &source_api_path,
|
||||
const std::string &api_path) -> api_error {
|
||||
const std::string &source_api_path, const std::string &api_path)
|
||||
-> api_error {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
bool exists{};
|
||||
@ -201,8 +201,8 @@ auto base_provider::create_directory(const std::string &api_path,
|
||||
return api_error::error;
|
||||
}
|
||||
|
||||
auto base_provider::create_file(const std::string &api_path,
|
||||
api_meta_map &meta) -> api_error {
|
||||
auto base_provider::create_file(const std::string &api_path, api_meta_map &meta)
|
||||
-> api_error {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
try {
|
||||
@ -259,8 +259,9 @@ auto base_provider::create_file(const std::string &api_path,
|
||||
return api_error::error;
|
||||
}
|
||||
|
||||
auto base_provider::get_api_path_from_source(
|
||||
const std::string &source_path, std::string &api_path) const -> api_error {
|
||||
auto base_provider::get_api_path_from_source(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
if (source_path.empty()) {
|
||||
@ -273,8 +274,9 @@ auto base_provider::get_api_path_from_source(
|
||||
return db3_->get_api_path(source_path, api_path);
|
||||
}
|
||||
|
||||
auto base_provider::get_directory_items(
|
||||
const std::string &api_path, directory_item_list &list) const -> api_error {
|
||||
auto base_provider::get_directory_items(const std::string &api_path,
|
||||
directory_item_list &list) const
|
||||
-> api_error {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
try {
|
||||
@ -342,9 +344,10 @@ auto base_provider::get_file_size(const std::string &api_path,
|
||||
return api_error::success;
|
||||
}
|
||||
|
||||
auto base_provider::get_filesystem_item(
|
||||
const std::string &api_path, bool directory,
|
||||
filesystem_item &fsi) const -> api_error {
|
||||
auto base_provider::get_filesystem_item(const std::string &api_path,
|
||||
bool directory,
|
||||
filesystem_item &fsi) const
|
||||
-> api_error {
|
||||
bool exists{};
|
||||
auto res = is_directory(api_path, exists);
|
||||
if (res != api_error::success) {
|
||||
@ -377,9 +380,10 @@ auto base_provider::get_filesystem_item(
|
||||
return api_error::success;
|
||||
}
|
||||
|
||||
auto base_provider::get_filesystem_item_and_file(
|
||||
const std::string &api_path, api_file &file,
|
||||
filesystem_item &fsi) const -> api_error {
|
||||
auto base_provider::get_filesystem_item_and_file(const std::string &api_path,
|
||||
api_file &file,
|
||||
filesystem_item &fsi) const
|
||||
-> api_error {
|
||||
auto res = get_file(api_path, file);
|
||||
if (res != api_error::success) {
|
||||
return res;
|
||||
|
@ -38,47 +38,57 @@ void polling::frequency_thread(
|
||||
std::function<std::uint32_t()> get_frequency_seconds, frequency freq) {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
auto last_run = std::chrono::system_clock::time_point::min();
|
||||
while (not get_stop_requested()) {
|
||||
unique_mutex_lock lock(mutex_);
|
||||
auto futures = std::accumulate(
|
||||
items_.begin(), items_.end(), std::deque<tasks::task_ptr>{},
|
||||
[this, &freq](auto &&list, auto &&item) -> auto {
|
||||
if (item.second.freq != freq) {
|
||||
auto elapsed = std::chrono::system_clock::now() - last_run;
|
||||
auto max_elapsed = std::chrono::seconds(get_frequency_seconds());
|
||||
|
||||
if (std::chrono::duration_cast<std::chrono::seconds>(elapsed) >=
|
||||
max_elapsed) {
|
||||
unique_mutex_lock lock(mutex_);
|
||||
auto futures = std::accumulate(
|
||||
items_.begin(), items_.end(), std::deque<tasks::task_ptr>{},
|
||||
[this, &freq](auto &&list, auto &&item) -> auto {
|
||||
if (item.second.freq != freq) {
|
||||
return list;
|
||||
}
|
||||
|
||||
auto future = tasks::instance().schedule({
|
||||
[this, &freq, item](auto &&task_stopped) {
|
||||
if (config_->get_event_level() == event_level::trace ||
|
||||
freq != frequency::second) {
|
||||
event_system::instance().raise<polling_item_begin>(
|
||||
function_name, item.first);
|
||||
}
|
||||
item.second.action(task_stopped);
|
||||
if (config_->get_event_level() == event_level::trace ||
|
||||
freq != frequency::second) {
|
||||
event_system::instance().raise<polling_item_end>(
|
||||
function_name, item.first);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
list.emplace_back(future);
|
||||
return list;
|
||||
}
|
||||
|
||||
auto future = tasks::instance().schedule({
|
||||
[this, &freq, item](auto &&task_stopped) {
|
||||
if (config_->get_event_level() == event_level::trace ||
|
||||
freq != frequency::second) {
|
||||
event_system::instance().raise<polling_item_begin>(
|
||||
function_name, item.first);
|
||||
}
|
||||
item.second.action(task_stopped);
|
||||
if (config_->get_event_level() == event_level::trace ||
|
||||
freq != frequency::second) {
|
||||
event_system::instance().raise<polling_item_end>(
|
||||
function_name, item.first);
|
||||
}
|
||||
},
|
||||
});
|
||||
lock.unlock();
|
||||
|
||||
list.emplace_back(future);
|
||||
return list;
|
||||
});
|
||||
lock.unlock();
|
||||
while (not futures.empty()) {
|
||||
futures.front()->wait();
|
||||
futures.pop_front();
|
||||
}
|
||||
|
||||
while (not futures.empty()) {
|
||||
futures.front()->wait();
|
||||
futures.pop_front();
|
||||
last_run = std::chrono::system_clock::now();
|
||||
elapsed = std::chrono::seconds(0U);
|
||||
}
|
||||
|
||||
unique_mutex_lock lock(mutex_);
|
||||
if (get_stop_requested()) {
|
||||
return;
|
||||
}
|
||||
|
||||
lock.lock();
|
||||
notify_.wait_for(lock, std::chrono::seconds(get_frequency_seconds()));
|
||||
notify_.wait_for(lock, max_elapsed - elapsed);
|
||||
}
|
||||
}
|
||||
|
||||
|
364
repertory/repertory_test/src/app_config_test.cpp
Normal file
364
repertory/repertory_test/src/app_config_test.cpp
Normal file
@ -0,0 +1,364 @@
|
||||
/*
|
||||
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#include "test_common.hpp"
|
||||
|
||||
#include "app_config.hpp"
|
||||
#include "events/event_system.hpp"
|
||||
#include "utils/common.hpp"
|
||||
#include "utils/file_utils.hpp"
|
||||
#include "utils/path.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config_test : public ::testing::Test {
|
||||
public:
|
||||
console_consumer cs;
|
||||
|
||||
static std::atomic<std::uint64_t> idx;
|
||||
|
||||
std::string encrypt_directory;
|
||||
std::string s3_directory;
|
||||
std::string sia_directory;
|
||||
|
||||
void SetUp() override {
|
||||
encrypt_directory = utils::path::combine(test::get_test_output_dir(),
|
||||
{
|
||||
"app_config_test",
|
||||
"encrypt",
|
||||
std::to_string(++idx),
|
||||
});
|
||||
|
||||
s3_directory = utils::path::combine(test::get_test_output_dir(),
|
||||
{
|
||||
"app_config_test",
|
||||
"s3",
|
||||
std::to_string(++idx),
|
||||
});
|
||||
|
||||
sia_directory = utils::path::combine(test::get_test_output_dir(),
|
||||
{
|
||||
"app_config_test",
|
||||
"sia",
|
||||
std::to_string(++idx),
|
||||
});
|
||||
event_system::instance().start();
|
||||
}
|
||||
|
||||
void TearDown() override { event_system::instance().stop(); }
|
||||
};
|
||||
|
||||
std::atomic<std::uint64_t> app_config_test::idx{0U};
|
||||
|
||||
static void defaults_tests(const json &json_data, provider_type prov) {
|
||||
json json_defaults = {
|
||||
{JSON_API_PORT, app_config::default_rpc_port(prov)},
|
||||
{JSON_API_USER, std::string{REPERTORY}},
|
||||
{JSON_DOWNLOAD_TIMEOUT_SECS, default_download_timeout_secs},
|
||||
{JSON_DATABASE_TYPE, database_type::rocksdb},
|
||||
{JSON_ENABLE_DOWNLOAD_TIMEOUT, true},
|
||||
{JSON_ENABLE_DRIVE_EVENTS, false},
|
||||
#if defined(_WIN32)
|
||||
{JSON_ENABLE_MOUNT_MANAGER, false},
|
||||
#endif // defined(_WIN32)
|
||||
{JSON_ENCRYPT_CONFIG, encrypt_config{}},
|
||||
{JSON_EVENT_LEVEL, event_level::info},
|
||||
{JSON_EVICTION_DELAY_MINS, default_eviction_delay_mins},
|
||||
{JSON_EVICTION_USE_ACCESS_TIME, false},
|
||||
{JSON_HIGH_FREQ_INTERVAL_SECS, default_high_freq_interval_secs},
|
||||
{JSON_HOST_CONFIG, host_config{}},
|
||||
{JSON_LOW_FREQ_INTERVAL_SECS, default_low_freq_interval_secs},
|
||||
{JSON_MAX_CACHE_SIZE_BYTES, default_max_cache_size_bytes},
|
||||
{JSON_MAX_UPLOAD_COUNT, default_max_upload_count},
|
||||
{JSON_MED_FREQ_INTERVAL_SECS, default_med_freq_interval_secs},
|
||||
{JSON_ONLINE_CHECK_RETRY_SECS, default_online_check_retry_secs},
|
||||
{JSON_ORPHANED_FILE_RETENTION_DAYS, default_orphaned_file_retention_days},
|
||||
{JSON_PREFERRED_DOWNLOAD_TYPE, download_type::default_},
|
||||
{JSON_REMOTE_CONFIG, remote::remote_config{}},
|
||||
{JSON_REMOTE_MOUNT, remote::remote_mount{}},
|
||||
{JSON_RETRY_READ_COUNT, default_retry_read_count},
|
||||
{JSON_RING_BUFFER_FILE_SIZE, default_ring_buffer_file_size},
|
||||
{JSON_S3_CONFIG, s3_config{}},
|
||||
{JSON_SIA_CONFIG, sia_config{}},
|
||||
{JSON_TASK_WAIT_MS, default_task_wait_ms},
|
||||
{JSON_VERSION, REPERTORY_CONFIG_VERSION},
|
||||
};
|
||||
|
||||
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_ORPHANED_FILE_RETENTION_DAYS);
|
||||
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_ORPHANED_FILE_RETENTION_DAYS);
|
||||
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] =
|
||||
app_config::default_agent_name(prov);
|
||||
json_defaults[JSON_REMOTE_MOUNT][JSON_API_PORT] =
|
||||
app_config::default_remote_api_port(prov);
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
fmt::println("testing default|{}-{}", app_config::get_provider_name(prov),
|
||||
JSON_API_AUTH);
|
||||
ASSERT_EQ(std::size_t(default_api_auth_size),
|
||||
json_data.at(JSON_API_AUTH).get<std::string>().size());
|
||||
for (const auto &[key, value] : json_defaults.items()) {
|
||||
fmt::println("testing default|{}-{}", app_config::get_provider_name(prov),
|
||||
key);
|
||||
EXPECT_EQ(value, json_data.at(key));
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
}},
|
||||
{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());
|
||||
}},
|
||||
{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());
|
||||
}},
|
||||
{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());
|
||||
|
||||
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) {}},
|
||||
#if defined(_WIN32)
|
||||
{JSON_ENABLE_MOUNT_MANAGER, [](auto &&cfg) {}},
|
||||
#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_HOST_CONFIG, [](auto &&cfg) {}},
|
||||
{JSON_LOW_FREQ_INTERVAL_SECS, [](auto &&cfg) {}},
|
||||
{JSON_MAX_CACHE_SIZE_BYTES, [](auto &&cfg) {}},
|
||||
{JSON_MAX_UPLOAD_COUNT, [](auto &&cfg) {}},
|
||||
{JSON_MED_FREQ_INTERVAL_SECS, [](auto &&cfg) {}},
|
||||
{JSON_ONLINE_CHECK_RETRY_SECS, [](auto &&cfg) {}},
|
||||
{JSON_ORPHANED_FILE_RETENTION_DAYS, [](auto &&cfg) {}},
|
||||
{JSON_PREFERRED_DOWNLOAD_TYPE, [](auto &&cfg) {}},
|
||||
{JSON_REMOTE_CONFIG, [](auto &&cfg) {}},
|
||||
{JSON_REMOTE_MOUNT, [](auto &&cfg) {}},
|
||||
{JSON_RETRY_READ_COUNT, [](auto &&cfg) {}},
|
||||
{JSON_RING_BUFFER_FILE_SIZE, [](auto &&cfg) {}},
|
||||
{JSON_S3_CONFIG, [](auto &&cfg) {}},
|
||||
{JSON_SIA_CONFIG, [](auto &&cfg) {}},
|
||||
{JSON_TASK_WAIT_MS, [](auto &&cfg) {}},
|
||||
};
|
||||
|
||||
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_ORPHANED_FILE_RETENTION_DAYS);
|
||||
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_ORPHANED_FILE_RETENTION_DAYS);
|
||||
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) {
|
||||
fmt::println("testing setting|{}-{}", app_config::get_provider_name(prov),
|
||||
key);
|
||||
test_function(config);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(app_config_test, encrypt_config) {
|
||||
app_config config(provider_type::encrypt, encrypt_directory);
|
||||
defaults_tests(config.get_json(), provider_type::encrypt);
|
||||
common_tests(config, provider_type::encrypt);
|
||||
}
|
||||
|
||||
TEST_F(app_config_test, s3_config) {
|
||||
app_config config(provider_type::s3, s3_directory);
|
||||
defaults_tests(config.get_json(), provider_type::s3);
|
||||
common_tests(config, provider_type::s3);
|
||||
}
|
||||
|
||||
TEST_F(app_config_test, sia_config) {
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
defaults_tests(config.get_json(), provider_type::sia);
|
||||
common_tests(config, provider_type::sia);
|
||||
}
|
||||
} // namespace repertory
|
@ -24,7 +24,7 @@
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
TEST(atomic, atomic_primitive) {
|
||||
TEST(atomic_test, atomic_primitive) {
|
||||
atomic<std::uint16_t> value;
|
||||
value = 5U;
|
||||
EXPECT_EQ(5U, static_cast<std::uint16_t>(value));
|
||||
@ -35,7 +35,7 @@ TEST(atomic, atomic_primitive) {
|
||||
EXPECT_EQ(6U, value.load());
|
||||
}
|
||||
|
||||
TEST(atomic, atomic_primitive_equality) {
|
||||
TEST(atomic_test, atomic_primitive_equality) {
|
||||
atomic<std::uint16_t> value1{5U};
|
||||
atomic<std::uint16_t> value2{5U};
|
||||
EXPECT_EQ(value1, value1);
|
||||
@ -45,7 +45,7 @@ TEST(atomic, atomic_primitive_equality) {
|
||||
EXPECT_EQ(static_cast<std::uint16_t>(value2), 5U);
|
||||
}
|
||||
|
||||
TEST(atomic, atomic_primitive_inequality) {
|
||||
TEST(atomic_test, atomic_primitive_inequality) {
|
||||
atomic<std::uint16_t> value1{5U};
|
||||
atomic<std::uint16_t> value2{6U};
|
||||
EXPECT_NE(value1, value2);
|
||||
@ -53,7 +53,7 @@ TEST(atomic, atomic_primitive_inequality) {
|
||||
EXPECT_NE(static_cast<std::uint16_t>(value2), 5U);
|
||||
}
|
||||
|
||||
TEST(atomic, atomic_struct) {
|
||||
TEST(atomic_test, atomic_struct) {
|
||||
atomic<encrypt_config> value{
|
||||
encrypt_config{
|
||||
.encryption_token = "token",
|
||||
|
@ -1,696 +0,0 @@
|
||||
/*
|
||||
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#include "test_common.hpp"
|
||||
|
||||
#include "app_config.hpp"
|
||||
#include "events/event_system.hpp"
|
||||
#include "utils/common.hpp"
|
||||
#include "utils/file_utils.hpp"
|
||||
#include "utils/path.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class config_test : public ::testing::Test {
|
||||
public:
|
||||
console_consumer cs;
|
||||
|
||||
static std::atomic<std::uint64_t> idx;
|
||||
|
||||
std::string s3_directory;
|
||||
std::string sia_directory;
|
||||
|
||||
void SetUp() override {
|
||||
s3_directory = utils::path::combine(test::get_test_output_dir(),
|
||||
{
|
||||
"config_test",
|
||||
"s3",
|
||||
std::to_string(++idx),
|
||||
});
|
||||
|
||||
sia_directory = utils::path::combine(test::get_test_output_dir(),
|
||||
{
|
||||
"config_test",
|
||||
"sia",
|
||||
std::to_string(++idx),
|
||||
});
|
||||
event_system::instance().start();
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
event_system::instance().stop();
|
||||
}
|
||||
};
|
||||
|
||||
std::atomic<std::uint64_t> config_test::idx{0U};
|
||||
|
||||
TEST_F(config_test, api_path) {
|
||||
std::string original_value;
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_api_auth();
|
||||
EXPECT_EQ(48U, original_value.size());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, api_auth) {
|
||||
std::string original_value;
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_api_auth();
|
||||
config.set_api_auth(original_value.substr(0, 20));
|
||||
EXPECT_EQ(original_value.substr(0, 20), config.get_api_auth());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value.substr(0, 20), config.get_api_auth());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, api_port) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_api_port();
|
||||
config.set_api_port(original_value + 5);
|
||||
EXPECT_EQ(original_value + 5, config.get_api_port());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5, config.get_api_port());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, api_user) {
|
||||
std::string original_value;
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_api_user();
|
||||
config.set_api_user(original_value.substr(0, 2));
|
||||
EXPECT_EQ(original_value.substr(0, 2), config.get_api_user());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value.substr(0, 2), config.get_api_user());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, download_timeout_secs) {
|
||||
std::uint8_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_download_timeout_secs();
|
||||
config.set_download_timeout_secs(original_value + 5);
|
||||
EXPECT_EQ(original_value + 5, config.get_download_timeout_secs());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5, config.get_download_timeout_secs());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, enable_download_timeout) {
|
||||
bool original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_enable_download_timeout();
|
||||
config.set_enable_download_timeout(not original_value);
|
||||
EXPECT_EQ(not original_value, config.get_enable_download_timeout());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(not original_value, config.get_enable_download_timeout());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, enable_drive_events) {
|
||||
bool original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_enable_drive_events();
|
||||
config.set_enable_drive_events(not original_value);
|
||||
EXPECT_EQ(not original_value, config.get_enable_drive_events());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(not original_value, config.get_enable_drive_events());
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
TEST_F(config_test, enable_mount_manager) {
|
||||
bool original_value;
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_enable_mount_manager();
|
||||
config.set_enable_mount_manager(not original_value);
|
||||
EXPECT_EQ(not original_value, config.get_enable_mount_manager());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(not original_value, config.get_enable_mount_manager());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
TEST_F(config_test, event_level) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_event_level(event_level::debug);
|
||||
EXPECT_EQ(event_level::debug, config.get_event_level());
|
||||
config.set_event_level(event_level::warn);
|
||||
EXPECT_EQ(event_level::warn, config.get_event_level());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(event_level::warn, config.get_event_level());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, eviction_delay_mins) {
|
||||
std::uint32_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_eviction_delay_mins();
|
||||
config.set_eviction_delay_mins(original_value + 5);
|
||||
EXPECT_EQ(original_value + 5, config.get_eviction_delay_mins());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5, config.get_eviction_delay_mins());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, eviction_uses_accessed_time) {
|
||||
bool original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_eviction_uses_accessed_time();
|
||||
config.set_eviction_uses_accessed_time(not original_value);
|
||||
EXPECT_EQ(not original_value, config.get_eviction_uses_accessed_time());
|
||||
}
|
||||
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(not original_value, config.get_eviction_uses_accessed_time());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, high_frequency_interval_secs) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_high_frequency_interval_secs();
|
||||
config.set_high_frequency_interval_secs(original_value + 5U);
|
||||
EXPECT_EQ(original_value + 5U, config.get_high_frequency_interval_secs());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5U, config.get_high_frequency_interval_secs());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, low_frequency_interval_secs) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_low_frequency_interval_secs();
|
||||
config.set_low_frequency_interval_secs(original_value + 5U);
|
||||
EXPECT_EQ(original_value + 5U, config.get_low_frequency_interval_secs());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5U, config.get_low_frequency_interval_secs());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, med_frequency_interval_secs) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_med_frequency_interval_secs();
|
||||
config.set_med_frequency_interval_secs(original_value + 5U);
|
||||
EXPECT_EQ(original_value + 5U, config.get_med_frequency_interval_secs());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5U, config.get_med_frequency_interval_secs());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, max_cache_size_bytes) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_max_cache_size_bytes(100 * 1024 * 1024);
|
||||
EXPECT_EQ(100U * 1024 * 1024, config.get_max_cache_size_bytes());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(100U * 1024 * 1024, config.get_max_cache_size_bytes());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, max_upload_count) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_max_upload_count(8U);
|
||||
EXPECT_EQ(std::uint8_t(8U), config.get_max_upload_count());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(std::uint8_t(8U), config.get_max_upload_count());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_max_upload_count(0U);
|
||||
EXPECT_EQ(std::uint8_t(1U), config.get_max_upload_count());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, online_check_retry_secs) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_online_check_retry_secs();
|
||||
config.set_online_check_retry_secs(original_value + 1);
|
||||
EXPECT_EQ(original_value + 1, config.get_online_check_retry_secs());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 1, config.get_online_check_retry_secs());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, online_check_retry_secs_minimum_value) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_online_check_retry_secs(14);
|
||||
EXPECT_EQ(15, config.get_online_check_retry_secs());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, orphaned_file_retention_days) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_orphaned_file_retention_days();
|
||||
config.set_orphaned_file_retention_days(original_value + 1);
|
||||
EXPECT_EQ(original_value + 1, config.get_orphaned_file_retention_days());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 1, config.get_orphaned_file_retention_days());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, orphaned_file_retention_days_minimum_value) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_orphaned_file_retention_days(0);
|
||||
EXPECT_EQ(1, config.get_orphaned_file_retention_days());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, orphaned_file_retention_days_maximum_value) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_orphaned_file_retention_days(32);
|
||||
EXPECT_EQ(31, config.get_orphaned_file_retention_days());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_cache_directory) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_STREQ(utils::path::combine(sia_directory, {"cache"}).c_str(),
|
||||
config.get_cache_directory().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_config_file_path) {
|
||||
{
|
||||
const auto config_file = utils::path::absolute(
|
||||
utils::path::combine(sia_directory, {"config.json"}));
|
||||
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_STREQ(config_file.c_str(), config.get_config_file_path().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_data_directory) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_STREQ(sia_directory.c_str(), config.get_data_directory().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_log_directory) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_STREQ(utils::path::combine(sia_directory, {"logs"}).c_str(),
|
||||
config.get_log_directory().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, ring_buffer_file_size) {
|
||||
std::uint16_t original_value;
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_ring_buffer_file_size();
|
||||
config.set_ring_buffer_file_size(original_value + 5u);
|
||||
EXPECT_EQ(original_value + 5u, config.get_ring_buffer_file_size());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 5u, config.get_ring_buffer_file_size());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, ring_buffer_file_size_minimum_size) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_ring_buffer_file_size(63u);
|
||||
EXPECT_EQ(64u, config.get_ring_buffer_file_size());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(64u, config.get_ring_buffer_file_size());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, ring_buffer_file_size_maximum_size) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_ring_buffer_file_size(1025u);
|
||||
EXPECT_EQ(1024u, config.get_ring_buffer_file_size());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(1024u, config.get_ring_buffer_file_size());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, preferred_download_type) {
|
||||
download_type original_value;
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_preferred_download_type();
|
||||
config.set_preferred_download_type(download_type::ring_buffer);
|
||||
EXPECT_NE(original_value, config.get_preferred_download_type());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_NE(original_value, config.get_preferred_download_type());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, default_agent_name) {
|
||||
EXPECT_STREQ("Sia-Agent",
|
||||
app_config::default_agent_name(provider_type::sia).c_str());
|
||||
}
|
||||
|
||||
TEST_F(config_test, default_api_port) {
|
||||
EXPECT_EQ(9980U, app_config::default_api_port(provider_type::sia));
|
||||
}
|
||||
|
||||
TEST_F(config_test, default_data_directory) {
|
||||
const std::array<std::string, 1U> data_directory = {
|
||||
app_config::default_data_directory(provider_type::sia),
|
||||
};
|
||||
|
||||
#if defined(_WIN32)
|
||||
const auto local_app_data = utils::get_environment_variable("localappdata");
|
||||
#endif
|
||||
#if defined(__linux__)
|
||||
const auto local_app_data =
|
||||
utils::path::combine(utils::get_environment_variable("HOME"), {".local"});
|
||||
#endif
|
||||
#if defined(__APPLE__)
|
||||
const auto local_app_data = utils::path::combine(
|
||||
utils::get_environment_variable("HOME"), {"Library/Application Support"});
|
||||
#endif
|
||||
auto expected_directory =
|
||||
utils::path::combine(local_app_data, {"/repertory2/sia"});
|
||||
EXPECT_STREQ(expected_directory.c_str(), data_directory[0].c_str());
|
||||
}
|
||||
|
||||
TEST_F(config_test, default_rpc_port) {
|
||||
EXPECT_EQ(10000U, app_config::default_rpc_port(provider_type::sia));
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_provider_display_name) {
|
||||
EXPECT_STREQ(
|
||||
"Sia", app_config::get_provider_display_name(provider_type::sia).c_str());
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_provider_name) {
|
||||
EXPECT_STREQ("sia",
|
||||
app_config::get_provider_name(provider_type::sia).c_str());
|
||||
}
|
||||
|
||||
TEST_F(config_test, get_version) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(REPERTORY_CONFIG_VERSION, config.get_version());
|
||||
}
|
||||
}
|
||||
|
||||
// TEST_F(config_test, enable_remote_mount) {
|
||||
// bool original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_enable_remote_mount();
|
||||
// config.set_enable_remote_mount(not original_value);
|
||||
// EXPECT_EQ(not original_value, config.get_enable_remote_mount());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(not original_value, config.get_enable_remote_mount());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, is_remote_mount) {
|
||||
// bool original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_is_remote_mount();
|
||||
// config.set_is_remote_mount(not original_value);
|
||||
// EXPECT_EQ(not original_value, config.get_is_remote_mount());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(not original_value, config.get_is_remote_mount());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, enable_remote_mount_fails_if_remote_mount_is_true) {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// config.set_is_remote_mount(true);
|
||||
// config.set_enable_remote_mount(true);
|
||||
// EXPECT_FALSE(config.get_enable_remote_mount());
|
||||
// EXPECT_TRUE(config.get_is_remote_mount());
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, set_is_remote_mount_fails_if_enable_remote_mount_is_true)
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// config.set_enable_remote_mount(true);
|
||||
// config.set_is_remote_mount(true);
|
||||
// EXPECT_FALSE(config.get_is_remote_mount());
|
||||
// EXPECT_TRUE(config.get_enable_remote_mount());
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_host_name_or_ip) {
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// config.set_remote_host_name_or_ip("my.host.name");
|
||||
// EXPECT_STREQ("my.host.name",
|
||||
// config.get_remote_host_name_or_ip().c_str());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_STREQ("my.host.name",
|
||||
// config.get_remote_host_name_or_ip().c_str());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_api_port) {
|
||||
// std::uint16_t original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_remote_api_port();
|
||||
// config.set_remote_api_port(original_value + 5);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_api_port());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_api_port());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_receive_timeout_secs) {
|
||||
// std::uint16_t original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_remote_receive_timeout_secs();
|
||||
// config.set_remote_receive_timeout_secs(original_value + 5);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_receive_timeout_secs());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_receive_timeout_secs());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_send_timeout_secs) {
|
||||
// std::uint16_t original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_remote_send_timeout_secs();
|
||||
// config.set_remote_send_timeout_secs(original_value + 5);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_send_timeout_secs());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_send_timeout_secs());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_encryption_token) {
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// config.set_remote_encryption_token("myToken");
|
||||
// EXPECT_STREQ("myToken", config.get_remote_encryption_token().c_str());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_STREQ("myToken", config.get_remote_encryption_token().c_str());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// TEST_F(config_test, remote_client_pool_size) {
|
||||
// std::uint8_t original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_remote_client_pool_size();
|
||||
// config.set_remote_client_pool_size(original_value + 5);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_client_pool_size());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_client_pool_size());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// TEST_F(config_test, remote_client_pool_size_minimum_value) {
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// config.set_remote_client_pool_size(0);
|
||||
// EXPECT_EQ(5, config.get_remote_client_pool_size());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(5, config.get_remote_client_pool_size());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_max_connections) {
|
||||
// std::uint8_t original_value{};
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// original_value = config.get_remote_max_connections();
|
||||
// config.set_remote_max_connections(original_value + 5);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_max_connections());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(original_value + 5, config.get_remote_max_connections());
|
||||
// }
|
||||
// }
|
||||
|
||||
// TEST_F(config_test, remote_max_connections_minimum_value) {
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// config.set_remote_max_connections(0);
|
||||
// EXPECT_EQ(1, config.get_remote_max_connections());
|
||||
// }
|
||||
// {
|
||||
// app_config config(provider_type::sia, sia_directory);
|
||||
// EXPECT_EQ(1, config.get_remote_max_connections());
|
||||
// }
|
||||
// }
|
||||
|
||||
TEST_F(config_test, retry_read_count) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_retry_read_count();
|
||||
config.set_retry_read_count(original_value + 1);
|
||||
EXPECT_EQ(original_value + 1, config.get_retry_read_count());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 1, config.get_retry_read_count());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, retry_read_count_minimum_value) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_retry_read_count(1);
|
||||
EXPECT_EQ(2, config.get_retry_read_count());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, task_wait_ms) {
|
||||
std::uint16_t original_value{};
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
original_value = config.get_task_wait_ms();
|
||||
config.set_task_wait_ms(original_value + 1U);
|
||||
EXPECT_EQ(original_value + 1U, config.get_task_wait_ms());
|
||||
}
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
EXPECT_EQ(original_value + 1U, config.get_task_wait_ms());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, task_wait_ms_minimum_value) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_task_wait_ms(1U);
|
||||
EXPECT_EQ(50U, config.get_task_wait_ms());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, can_set_database_type) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_database_type(database_type::rocksdb);
|
||||
EXPECT_EQ(database_type::rocksdb, config.get_database_type());
|
||||
|
||||
config.set_database_type(database_type::sqlite);
|
||||
EXPECT_EQ(database_type::sqlite, config.get_database_type());
|
||||
|
||||
config.set_database_type(database_type::rocksdb);
|
||||
EXPECT_EQ(database_type::rocksdb, config.get_database_type());
|
||||
}
|
||||
}
|
||||
} // namespace repertory
|
@ -25,7 +25,7 @@
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
TEST(curl_comm, can_create_s3_host_config) {
|
||||
TEST(curl_comm_test, can_create_s3_host_config) {
|
||||
s3_config config{};
|
||||
config.bucket = "repertory";
|
||||
config.url = "https://s3.test.com";
|
||||
@ -37,7 +37,7 @@ TEST(curl_comm, can_create_s3_host_config) {
|
||||
EXPECT_TRUE(hc.path.empty());
|
||||
}
|
||||
|
||||
TEST(curl_comm, can_create_s3_host_config_with_path_style) {
|
||||
TEST(curl_comm_test, can_create_s3_host_config_with_path_style) {
|
||||
s3_config config{};
|
||||
config.bucket = "repertory";
|
||||
config.url = "https://s3.test.com";
|
||||
@ -49,7 +49,7 @@ TEST(curl_comm, can_create_s3_host_config_with_path_style) {
|
||||
EXPECT_STREQ("/repertory", hc.path.c_str());
|
||||
}
|
||||
|
||||
TEST(curl_comm, can_create_s3_host_config_with_region) {
|
||||
TEST(curl_comm_test, can_create_s3_host_config_with_region) {
|
||||
s3_config config{};
|
||||
config.bucket = "repertory";
|
||||
config.url = "https://s3.test.com";
|
||||
@ -62,7 +62,7 @@ TEST(curl_comm, can_create_s3_host_config_with_region) {
|
||||
EXPECT_TRUE(hc.path.empty());
|
||||
}
|
||||
|
||||
TEST(curl_comm, can_create_s3_host_config_with_region_and_path_style) {
|
||||
TEST(curl_comm_test, can_create_s3_host_config_with_region_and_path_style) {
|
||||
s3_config config{};
|
||||
config.bucket = "repertory";
|
||||
config.url = "https://s3.test.com";
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
TEST(json_serialize, can_handle_directory_item) {
|
||||
TEST(json_serialize_test, can_handle_directory_item) {
|
||||
directory_item cfg{
|
||||
"api", "parent", true, 2U, {{META_DIRECTORY, "true"}},
|
||||
};
|
||||
@ -47,7 +47,7 @@ TEST(json_serialize, can_handle_directory_item) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_encrypt_config) {
|
||||
TEST(json_serialize_test, can_handle_encrypt_config) {
|
||||
encrypt_config cfg{
|
||||
"token",
|
||||
"path",
|
||||
@ -65,7 +65,7 @@ TEST(json_serialize, can_handle_encrypt_config) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_host_config) {
|
||||
TEST(json_serialize_test, can_handle_host_config) {
|
||||
host_config cfg{
|
||||
"agent", "pwd", "user", 1024U, "host", "path", "http", 11U,
|
||||
};
|
||||
@ -94,7 +94,7 @@ TEST(json_serialize, can_handle_host_config) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_remote_config) {
|
||||
TEST(json_serialize_test, can_handle_remote_config) {
|
||||
remote::remote_config cfg{
|
||||
1024U, "token", "host", 11U, 20U, 21U,
|
||||
};
|
||||
@ -120,7 +120,7 @@ TEST(json_serialize, can_handle_remote_config) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_remote_mount) {
|
||||
TEST(json_serialize_test, can_handle_remote_mount) {
|
||||
remote::remote_mount cfg{1024U, 21U, true, "token"};
|
||||
|
||||
json data(cfg);
|
||||
@ -139,7 +139,7 @@ TEST(json_serialize, can_handle_remote_mount) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_s3_config) {
|
||||
TEST(json_serialize_test, can_handle_s3_config) {
|
||||
s3_config cfg{
|
||||
"access", "bucket", "token", "region", "secret", 31U, "url", true, false,
|
||||
};
|
||||
@ -170,7 +170,7 @@ TEST(json_serialize, can_handle_s3_config) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_sia_config) {
|
||||
TEST(json_serialize_test, can_handle_sia_config) {
|
||||
sia_config cfg{
|
||||
"bucket",
|
||||
};
|
||||
@ -184,7 +184,7 @@ TEST(json_serialize, can_handle_sia_config) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_atomic) {
|
||||
TEST(json_serialize_test, can_handle_atomic) {
|
||||
atomic<sia_config> cfg({
|
||||
"bucket",
|
||||
});
|
||||
@ -198,7 +198,7 @@ TEST(json_serialize, can_handle_atomic) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_database_type) {
|
||||
TEST(json_serialize_test, can_handle_database_type) {
|
||||
json data(database_type::rocksdb);
|
||||
EXPECT_EQ(database_type::rocksdb, data.get<database_type>());
|
||||
EXPECT_STREQ("rocksdb", data.get<std::string>().c_str());
|
||||
@ -208,7 +208,7 @@ TEST(json_serialize, can_handle_database_type) {
|
||||
EXPECT_STREQ("sqlite", data.get<std::string>().c_str());
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_download_type) {
|
||||
TEST(json_serialize_test, can_handle_download_type) {
|
||||
json data(download_type::direct);
|
||||
EXPECT_EQ(download_type::direct, data.get<download_type>());
|
||||
EXPECT_STREQ("direct", data.get<std::string>().c_str());
|
||||
@ -222,7 +222,7 @@ TEST(json_serialize, can_handle_download_type) {
|
||||
EXPECT_STREQ("ring_buffer", data.get<std::string>().c_str());
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_atomic_database_type) {
|
||||
TEST(json_serialize_test, can_handle_atomic_database_type) {
|
||||
json data(atomic<database_type>{database_type::rocksdb});
|
||||
EXPECT_EQ(database_type::rocksdb, data.get<atomic<database_type>>());
|
||||
EXPECT_STREQ("rocksdb", data.get<std::string>().c_str());
|
||||
@ -232,7 +232,7 @@ TEST(json_serialize, can_handle_atomic_database_type) {
|
||||
EXPECT_STREQ("sqlite", data.get<std::string>().c_str());
|
||||
}
|
||||
|
||||
TEST(json_serialize, can_handle_atomic_download_type) {
|
||||
TEST(json_serialize_test, can_handle_atomic_download_type) {
|
||||
json data(atomic<download_type>{download_type::direct});
|
||||
EXPECT_EQ(download_type::direct, data.get<atomic<download_type>>());
|
||||
EXPECT_STREQ("direct", data.get<std::string>().c_str());
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "platform/platform.hpp"
|
||||
|
||||
namespace repertory {
|
||||
TEST(lock_data, lock_and_unlock) {
|
||||
TEST(lock_data_test, lock_and_unlock) {
|
||||
{
|
||||
lock_data l(provider_type::sia, "1");
|
||||
EXPECT_EQ(lock_result::success, l.grab_lock());
|
||||
@ -50,7 +50,7 @@ TEST(lock_data, lock_and_unlock) {
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
TEST(lock_data, set_and_unset_mount_state) {
|
||||
TEST(lock_data_test, set_and_unset_mount_state) {
|
||||
lock_data l(provider_type::sia, "1");
|
||||
EXPECT_TRUE(l.set_mount_state(true, "C:", 99));
|
||||
|
||||
@ -83,7 +83,7 @@ TEST(lock_data, set_and_unset_mount_state) {
|
||||
mount_state["Remote2"].dump().c_str());
|
||||
}
|
||||
#else
|
||||
TEST(lock_data, set_and_unset_mount_state) {
|
||||
TEST(lock_data_test, set_and_unset_mount_state) {
|
||||
lock_data l(provider_type::sia, "1");
|
||||
EXPECT_TRUE(l.set_mount_state(true, "/mnt/1", 99));
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "comm/packet/packet.hpp"
|
||||
|
||||
namespace repertory {
|
||||
TEST(packet, encrypt_and_decrypt) {
|
||||
TEST(packet_test, encrypt_and_decrypt) {
|
||||
packet test_packet;
|
||||
test_packet.encode("test");
|
||||
test_packet.encrypt("moose");
|
||||
|
@ -629,7 +629,7 @@ static void run_tests(const app_config &cfg, i_provider &provider) {
|
||||
upload_file(provider); */
|
||||
}
|
||||
|
||||
TEST(providers, encrypt_provider) {
|
||||
TEST(providers_test, encrypt_provider) {
|
||||
const auto config_path =
|
||||
utils::path::combine(test::get_test_output_dir(), {"encrypt_provider"});
|
||||
|
||||
@ -673,7 +673,7 @@ TEST(providers, encrypt_provider) {
|
||||
event_system::instance().stop();
|
||||
}
|
||||
|
||||
TEST(providers, s3_provider) {
|
||||
TEST(providers_test, s3_provider) {
|
||||
const auto config_path =
|
||||
utils::path::combine(test::get_test_output_dir(), {"s3_provider"});
|
||||
|
||||
@ -713,7 +713,7 @@ TEST(providers, s3_provider) {
|
||||
event_system::instance().stop();
|
||||
}
|
||||
|
||||
TEST(providers, sia_provider) {
|
||||
TEST(providers_test, sia_provider) {
|
||||
const auto config_path =
|
||||
utils::path::combine(test::get_test_output_dir(), {"sia_provider"});
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
namespace repertory {
|
||||
static constexpr const std::size_t test_chunk_size{1024U};
|
||||
|
||||
TEST(upload, can_upload_a_valid_file) {
|
||||
TEST(upload_test, can_upload_a_valid_file) {
|
||||
console_consumer con;
|
||||
|
||||
event_system::instance().start();
|
||||
@ -71,7 +71,7 @@ TEST(upload, can_upload_a_valid_file) {
|
||||
event_system::instance().stop();
|
||||
}
|
||||
|
||||
TEST(upload, can_cancel_upload) {
|
||||
TEST(upload_test, can_cancel_upload) {
|
||||
console_consumer con;
|
||||
|
||||
event_system::instance().start();
|
||||
@ -135,7 +135,7 @@ TEST(upload, can_cancel_upload) {
|
||||
event_system::instance().stop();
|
||||
}
|
||||
|
||||
TEST(upload, can_stop_upload) {
|
||||
TEST(upload_test, can_stop_upload) {
|
||||
console_consumer con;
|
||||
|
||||
event_system::instance().start();
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "utils/file.hpp"
|
||||
|
||||
namespace repertory {
|
||||
TEST(utils, convert_api_date) {
|
||||
TEST(utils_test, convert_api_date) {
|
||||
#if defined(_WIN32)
|
||||
auto file_time = utils::time::unix_time_to_filetime(
|
||||
s3_provider::convert_api_date("2009-10-12T17:50:30.111Z"));
|
||||
@ -63,7 +63,7 @@ TEST(utils, convert_api_date) {
|
||||
#endif // defined(_WIN32)
|
||||
}
|
||||
|
||||
TEST(utils, generate_sha256) {
|
||||
TEST(utils_test, generate_sha256) {
|
||||
auto res = utils::file::file{__FILE__}.sha256();
|
||||
EXPECT_TRUE(res.has_value());
|
||||
if (res.has_value()) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user