Skip to content

Commit

Permalink
Add configuration file unit test (infiniflow#1715)
Browse files Browse the repository at this point in the history
### What problem does this PR solve?

Add test cases to unit tests for configuration files, including:
1. Invalid configuration fields.
2. Invalid value.
3. Out of bound value.
4. Correct value

### Type of change

- [x] Test cases

---------

Co-authored-by: Jin Hai <[email protected]>
  • Loading branch information
vsian and JinHai-CN authored Aug 26, 2024
1 parent 8a083e9 commit 080a8b7
Show file tree
Hide file tree
Showing 14 changed files with 754 additions and 0 deletions.
125 changes: 125 additions & 0 deletions src/unit_test/main/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
// limitations under the License.

#include "unit_test/base_test.h"
#include <gtest/gtest.h>

import stl;
import config;
import infinity_exception;
import third_party;
import status;
import compilation_config;

class ConfigTest : public BaseTest {};
Expand Down Expand Up @@ -100,3 +102,126 @@ TEST_F(ConfigTest, test2) {
EXPECT_EQ(config.TempDir(), "/tmp");
EXPECT_EQ(config.MemIndexMemoryQuota(), 2 * 1024l * 1024l * 1024l);
}

TEST_F(ConfigTest, TestWrongParamNames) {
using namespace infinity;
SharedPtr<String> path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_param.toml");
Config config;
auto status = config.Init(path, nullptr);
ASSERT_FALSE(status.ok());
}

TEST_F(ConfigTest, TestConfInvalidValues) {
using namespace infinity;
SharedPtr<String> path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_version.toml");
Config config_invalid_version;
auto status = config_invalid_version.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kMismatchVersion);

Config config_invalid_timezone;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_timezone.toml");
status = config_invalid_timezone.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidTimezone);

Config config_invalid_server_address;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_server_address.toml");
status = config_invalid_server_address.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidIPAddr);

Config config_invalid_bytesize;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_bytesize.toml");
status = config_invalid_bytesize.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidByteSize);

Config config_invalid_log_level;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_log_level.toml");
status = config_invalid_log_level.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidLogLevel);

Config config_invalid_timeinfo;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_invalid_timeinfo.toml");
status = config_invalid_timeinfo.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidTimeInfo);
}

TEST_F(ConfigTest, TestOutofRangeValues) {

using namespace infinity;
SharedPtr<String> path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_out_of_bound_bytesize.toml");
Config config_bytesize;
auto status = config_bytesize.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidConfig);

Config config_number;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_out_of_bound_number.toml");
status = config_number.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidConfig);

Config config_timeinfo;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_out_of_bound_timeinfo.toml");
status = config_timeinfo.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidConfig);

Config config_timezone;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_out_of_bound_timezone.toml");
status = config_timezone.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidConfig);

Config config_walflush;
path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_out_of_bound_walflush.toml");
status = config_walflush.Init(path, nullptr);
EXPECT_EQ(status.code(), ErrorCode::kInvalidConfig);

}

TEST_F(ConfigTest, TestValidValues) {
using namespace infinity;
SharedPtr<String> path = MakeShared<String>(String(test_data_path()) + "/config/test_conf_valid_value.toml");
Config config;
auto status = config.Init(path, nullptr);
ASSERT_TRUE(status.ok());

EXPECT_EQ(config.Version(), "0.3.0");
EXPECT_EQ(config.TimeZone(), "UTC");
EXPECT_EQ(config.TimeZoneBias(), -8);
EXPECT_EQ(config.CPULimit(), 2);

// Network
EXPECT_EQ(config.ServerAddress(), "0.0.0.0");
EXPECT_EQ(config.PostgresPort(), 5432);
EXPECT_EQ(config.HTTPPort(), 23820u);
EXPECT_EQ(config.ClientPort(), 23817u);
EXPECT_EQ(config.ConnectionPoolSize(), 128);

// Log
EXPECT_EQ(config.LogFileName(), "infinity.log");
EXPECT_EQ(config.LogDir(), "/var/infinity/log");
EXPECT_EQ(config.LogFilePath(), "/var/infinity/log/infinity.log");
EXPECT_EQ(config.LogToStdout(), false);
EXPECT_EQ(config.LogFileMaxSize(), 1024l * 1024l * 1024l);
EXPECT_EQ(config.LogFileRotateCount(), 10l);
EXPECT_EQ(config.GetLogLevel(), LogLevel::kInfo);

//storage
EXPECT_EQ(config.DataDir(), "/var/infinity/data");
EXPECT_EQ(config.OptimizeIndexInterval(), 10);
EXPECT_EQ(config.CleanupInterval(), 60);
EXPECT_EQ(config.CompactInterval(), 120);
EXPECT_EQ(config.MemIndexCapacity(), 1048576);

// buffer
EXPECT_EQ(config.BufferManagerSize(), 4 * 1024l * 1024l * 1024l);
EXPECT_EQ(config.LRUNum(), 7);
EXPECT_EQ(config.TempDir(), "/var/infinity/tmp");
EXPECT_EQ(config.MemIndexMemoryQuota(), 1024l * 1024l * 1024l);

//wal
EXPECT_EQ(config.WALDir(), "/var/infinity/wal");
EXPECT_EQ(config.FullCheckpointInterval(), 86400l);
EXPECT_EQ(config.DeltaCheckpointInterval(), 60l);
EXPECT_EQ(config.WALCompactThreshold(), 1024l * 1024l * 1024l);
//resource
EXPECT_EQ(config.ResourcePath(), "/var/infinity/resource");
//persistence
EXPECT_EQ(config.PersistenceDir(), "/var/infinity/persistence");
}
49 changes: 49 additions & 0 deletions test/data/config/test_conf_invalid_bytesize.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
[general]
version = "0.3.0"
time_zone = "utc-8"

[network]
server_address = "0.0.0.0"
postgres_port = 5432
http_port = 23820
client_port = 23817
connection_pool_size = 128

[log]
log_filename = "infinity.log"
log_dir = "/var/infinity/log"
log_to_stdout = false
log_file_max_size = "10GB"
log_file_rotate_count = 10

log_level = "info"

[storage]
data_dir = "/var/infinity/data"

optimize_interval = "10s"
cleanup_interval = "60s"
compact_interval = "120s"

mem_index_capacity = 1048576

[buffer]
buffer_manager_size = "1TB" # Changed to "1TB"
lru_num = 7
temp_dir = "/var/infinity/tmp"

memindex_memory_quota = "1GB"

[wal]
wal_dir = "/var/infinity/wal"
full_checkpoint_interval = "86400s"
delta_checkpoint_interval = "60s"
wal_compact_threshold = "1GB"

wal_flush = "only_write"

[resource]
resource_dir = "/var/infinity/resource"

[persistence]
persistence_dir = "/var/infinity/persistence"
49 changes: 49 additions & 0 deletions test/data/config/test_conf_invalid_log_level.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
[general]
version = "0.3.0"
time_zone = "utc-8"

[network]
server_address = "0.0.0.0"
postgres_port = 5432
http_port = 23820
client_port = 23817
connection_pool_size = 128

[log]
log_filename = "infinity.log"
log_dir = "/var/infinity/log"
log_to_stdout = false
log_file_max_size = "10GB"
log_file_rotate_count = 10

log_level = "invalid_level" # Changed to "invalid_level"

[storage]
data_dir = "/var/infinity/data"

optimize_interval = "10s"
cleanup_interval = "60s"
compact_interval = "120s"

mem_index_capacity = 1048576

[buffer]
buffer_manager_size = "4GB"
lru_num = 7
temp_dir = "/var/infinity/tmp"

memindex_memory_quota = "1GB"

[wal]
wal_dir = "/var/infinity/wal"
full_checkpoint_interval = "86400s"
delta_checkpoint_interval = "60s"
wal_compact_threshold = "1GB"

wal_flush = "only_write"

[resource]
resource_dir = "/var/infinity/resource"

[persistence]
persistence_dir = "/var/infinity/persistence"
41 changes: 41 additions & 0 deletions test/data/config/test_conf_invalid_param.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# testing invalid items in config
# result should be same as default
[ygenera1]
versi0n = "0.4.0"
time_z0ne = "utc-123"
cpu_1imit = 123

# right list name, but arguments all wrong
[network]
5erver_address = "127.wrong.0.0.1"
postgre5_port = 254333
http_p0rt = 24123
client_p0rt = 1234
connection_p00l_size = 144

# wrong list name, right arguments
[l0g]
log_filename = "info.logwrong"
log_dir = "/var/infinity/logwrong"
log_to_stdout = true
log_file_max_size = "2GB"
log_file_rotate_count = 101
log_1evel = "tracewrong"

[st0rage]
data_dir = "/var/infinity/datawrong"

[bufferrrr]
buffer_mAnager_size = "50GB"
1ru_num = 100
temp_dIIIr = "/tmpwrong"
memindex_mem0ry_quota = "1GB"

[wal]
wa1_dir = "/var/infinity/wawrong"

[resourCEEe]
resource_dffir = "/var/infinity/resourcewrong"

[persistence]
persistence_dirrr = "/var/infinity/persistencewrong"
49 changes: 49 additions & 0 deletions test/data/config/test_conf_invalid_server_address.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
[general]
version = "0.3.0"
time_zone = "utc-8"

[network]
server_address = "999.999.999.999" # Changed to an invalid IP address
postgres_port = 5432
http_port = 23820
client_port = 23817
connection_pool_size = 128

[log]
log_filename = "infinity.log"
log_dir = "/var/infinity/log"
log_to_stdout = false
log_file_max_size = "10GB"
log_file_rotate_count = 10

log_level = "info"

[storage]
data_dir = "/var/infinity/data"

optimize_interval = "10s"
cleanup_interval = "60s"
compact_interval = "120s"

mem_index_capacity = 1048576

[buffer]
buffer_manager_size = "4GB"
lru_num = 7
temp_dir = "/var/infinity/tmp"

memindex_memory_quota = "1GB"

[wal]
wal_dir = "/var/infinity/wal"
full_checkpoint_interval = "86400s"
delta_checkpoint_interval = "60s"
wal_compact_threshold = "1GB"

wal_flush = "only_write"

[resource]
resource_dir = "/var/infinity/resource"

[persistence]
persistence_dir = "/var/infinity/persistence"
49 changes: 49 additions & 0 deletions test/data/config/test_conf_invalid_timeinfo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
[general]
version = "0.3.0"
time_zone = "utc-8"

[network]
server_address = "0.0.0.0"
postgres_port = 5432
http_port = 23820
client_port = 23817
connection_pool_size = 128

[log]
log_filename = "infinity.log"
log_dir = "/var/infinity/log"
log_to_stdout = false
log_file_max_size = "10GB"
log_file_rotate_count = 10

log_level = "info"

[storage]
data_dir = "/var/infinity/data"

optimize_interval = "1day" # Changed to "1day"
cleanup_interval = "60s"
compact_interval = "120s"

mem_index_capacity = 1048576

[buffer]
buffer_manager_size = "4GB"
lru_num = 7
temp_dir = "/var/infinity/tmp"

memindex_memory_quota = "1GB"

[wal]
wal_dir = "/var/infinity/wal"
full_checkpoint_interval = "86400s"
delta_checkpoint_interval = "60s"
wal_compact_threshold = "1GB"

wal_flush = "only_write"

[resource]
resource_dir = "/var/infinity/resource"

[persistence]
persistence_dir = "/var/infinity/persistence"
Loading

0 comments on commit 080a8b7

Please sign in to comment.