0021ca3fcd
CI / lint (pull_request) Failing after 11s
CI / build-and-test (pull_request) Has been skipped
CI / sanitizers (address) (pull_request) Has been skipped
CI / sanitizers (undefined) (pull_request) Has been skipped
CI / fuzz-build (pull_request) Has been skipped
CI / coverage (pull_request) Has been skipped
CI / valgrind (pull_request) Has been skipped
- #150: Replace 11-parameter config_create() with config_create() that initializes to sensible defaults; callers set fields directly - #149: Extract validate_config() from main(); reduce main() from 325 to 281 lines by extracting validation logic into separate function - #151: Extract run_dry_run(), connect_to_server(), send_manifest(), and print_progress() shared helpers from send_files()/send_files_multithreaded() to eliminate code duplication
139 lines
4.3 KiB
C
139 lines
4.3 KiB
C
#include "test_config.h"
|
|
#include "config.h"
|
|
#include "multiprocessing.h"
|
|
#include "queue.h"
|
|
#include "test_utils.h"
|
|
#include "utils.h"
|
|
#include <stdlib.h>
|
|
|
|
static void test_config_lifecycle() {
|
|
Config* cfg = config_create();
|
|
EXPECT_NOT_NULL(cfg);
|
|
free(cfg->version);
|
|
cfg->version = str_dup("1.0");
|
|
cfg->send_directory = str_dup("/src");
|
|
cfg->receive_root_directory = str_dup("/dst");
|
|
cfg->save_to_disk = true;
|
|
cfg->use_multithreading = true;
|
|
cfg->use_chunk_serialization = false;
|
|
cfg->use_compression = false;
|
|
cfg->compression_level = 1;
|
|
EXPECT_EQ_STR(cfg->version, "1.0");
|
|
EXPECT_EQ_STR(cfg->send_directory, "/src");
|
|
EXPECT_EQ_STR(cfg->receive_root_directory, "/dst");
|
|
EXPECT_TRUE(cfg->save_to_disk);
|
|
EXPECT_TRUE(cfg->use_multithreading);
|
|
EXPECT_FALSE(cfg->use_chunk_serialization);
|
|
EXPECT_FALSE(cfg->use_compression);
|
|
EXPECT_EQ_INT(cfg->transport, TRANSPORT_TCP);
|
|
EXPECT_NULL(cfg->ssh_destination);
|
|
config_delete(cfg);
|
|
}
|
|
|
|
static void test_config_ssh_dest() {
|
|
Config* cfg = config_create();
|
|
EXPECT_NOT_NULL(cfg);
|
|
free(cfg->version);
|
|
cfg->version = str_dup("1.0");
|
|
cfg->send_directory = str_dup("/src");
|
|
cfg->receive_root_directory = str_dup("user@host:/dst");
|
|
cfg->save_to_disk = true;
|
|
cfg->compression_level = 1;
|
|
EXPECT_EQ_INT(cfg->transport, TRANSPORT_TCP);
|
|
EXPECT_NULL(cfg->ssh_destination);
|
|
EXPECT_EQ_STR(cfg->receive_root_directory, "user@host:/dst");
|
|
|
|
config_parse_ssh_dest(cfg);
|
|
EXPECT_EQ_INT(cfg->transport, TRANSPORT_SSH);
|
|
EXPECT_EQ_STR(cfg->ssh_destination, "user@host:/dst");
|
|
EXPECT_EQ_STR(cfg->receive_root_directory, "/dst");
|
|
config_delete(cfg);
|
|
}
|
|
|
|
static void test_config_ssh_dest_local_path() {
|
|
Config* cfg = config_create();
|
|
EXPECT_NOT_NULL(cfg);
|
|
free(cfg->version);
|
|
cfg->version = str_dup("1.0");
|
|
cfg->send_directory = str_dup("/src");
|
|
cfg->receive_root_directory = str_dup("/local/path");
|
|
cfg->save_to_disk = true;
|
|
cfg->compression_level = 1;
|
|
config_parse_ssh_dest(cfg);
|
|
EXPECT_EQ_INT(cfg->transport, TRANSPORT_TCP);
|
|
EXPECT_NULL(cfg->ssh_destination);
|
|
EXPECT_EQ_STR(cfg->receive_root_directory, "/local/path");
|
|
config_delete(cfg);
|
|
}
|
|
|
|
static void test_config_ssh_dest_no_user() {
|
|
Config* cfg = config_create();
|
|
EXPECT_NOT_NULL(cfg);
|
|
free(cfg->version);
|
|
cfg->version = str_dup("1.0");
|
|
cfg->send_directory = str_dup("/src");
|
|
cfg->receive_root_directory = str_dup("host:/remote");
|
|
cfg->save_to_disk = true;
|
|
cfg->compression_level = 1;
|
|
config_parse_ssh_dest(cfg);
|
|
EXPECT_EQ_INT(cfg->transport, TRANSPORT_SSH);
|
|
EXPECT_EQ_STR(cfg->ssh_destination, "host:/remote");
|
|
EXPECT_EQ_STR(cfg->receive_root_directory, "/remote");
|
|
config_delete(cfg);
|
|
}
|
|
|
|
static void test_pipeline_sender_lifecycle() {
|
|
Config* cfg = config_create();
|
|
free(cfg->version);
|
|
cfg->version = str_dup("2.0");
|
|
cfg->send_directory = str_dup("/src2");
|
|
cfg->receive_root_directory = str_dup("/dst2");
|
|
cfg->use_chunk_serialization = true;
|
|
cfg->use_compression = true;
|
|
cfg->compression_level = 1;
|
|
Queue* q1 = queue_create(5, NULL);
|
|
Queue* q2 = queue_create(15, NULL);
|
|
|
|
PipelineContextSender* pcs = pipeline_context_sender_create(cfg, q1, q2);
|
|
EXPECT_NOT_NULL(pcs);
|
|
EXPECT_EQ_STR(pcs->config->version, "2.0");
|
|
EXPECT_EQ_INT(pcs->queue_scanner->capacity, 5);
|
|
EXPECT_EQ_INT(pcs->queue_loader->capacity, 15);
|
|
EXPECT_FALSE(pcs->scanner_done);
|
|
EXPECT_FALSE(pcs->loader_done);
|
|
|
|
pipeline_context_sender_destroy(pcs);
|
|
}
|
|
|
|
static void test_pipeline_receiver_lifecycle() {
|
|
Config* cfg = config_create();
|
|
free(cfg->version);
|
|
cfg->version = str_dup("3.0");
|
|
cfg->send_directory = str_dup("/src3");
|
|
cfg->receive_root_directory = str_dup("/dst3");
|
|
cfg->save_to_disk = true;
|
|
cfg->use_multithreading = true;
|
|
cfg->use_chunk_serialization = true;
|
|
cfg->use_compression = true;
|
|
cfg->compression_level = 1;
|
|
Queue* q = queue_create(20, NULL);
|
|
|
|
PipelineContextReceiver* pcr = pipeline_context_receiver_create(cfg, q, 42);
|
|
EXPECT_NOT_NULL(pcr);
|
|
EXPECT_EQ_STR(pcr->config->version, "3.0");
|
|
EXPECT_EQ_INT(pcr->queue->capacity, 20);
|
|
EXPECT_EQ_INT(pcr->file_descriptor, 42);
|
|
EXPECT_FALSE(pcr->receiver_done);
|
|
|
|
pipeline_context_receiver_destroy(pcr);
|
|
}
|
|
|
|
void test_config() {
|
|
test_config_lifecycle();
|
|
test_config_ssh_dest();
|
|
test_config_ssh_dest_local_path();
|
|
test_config_ssh_dest_no_user();
|
|
test_pipeline_sender_lifecycle();
|
|
test_pipeline_receiver_lifecycle();
|
|
}
|