refactor: config_create(), main(), send_files() - reduce duplication and complexity
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
This commit is contained in:
2026-07-29 18:34:10 +02:00
parent 269ce0749b
commit 0021ca3fcd
8 changed files with 234 additions and 229 deletions
+51 -12
View File
@@ -7,9 +7,17 @@
#include <stdlib.h>
static void test_config_lifecycle() {
Config* cfg = config_create(str_dup("1.0"), str_dup("/src"), str_dup("/dst"), true, true, false,
false, false, 1, false, 0);
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");
@@ -23,9 +31,14 @@ static void test_config_lifecycle() {
}
static void test_config_ssh_dest() {
Config* cfg = config_create(str_dup("1.0"), str_dup("/src"), str_dup("user@host:/dst"), true,
false, false, false, false, 1, false, 0);
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");
@@ -38,8 +51,14 @@ static void test_config_ssh_dest() {
}
static void test_config_ssh_dest_local_path() {
Config* cfg = config_create(str_dup("1.0"), str_dup("/src"), str_dup("/local/path"), true, false,
false, false, false, 1, false, 0);
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);
@@ -48,8 +67,14 @@ static void test_config_ssh_dest_local_path() {
}
static void test_config_ssh_dest_no_user() {
Config* cfg = config_create(str_dup("1.0"), str_dup("/src"), str_dup("host:/remote"), true, false,
false, false, false, 1, false, 0);
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");
@@ -58,8 +83,14 @@ static void test_config_ssh_dest_no_user() {
}
static void test_pipeline_sender_lifecycle() {
Config* cfg = config_create(str_dup("2.0"), str_dup("/src2"), str_dup("/dst2"), false, false,
true, true, false, 1, false, 0);
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);
@@ -75,8 +106,16 @@ static void test_pipeline_sender_lifecycle() {
}
static void test_pipeline_receiver_lifecycle() {
Config* cfg = config_create(str_dup("3.0"), str_dup("/src3"), str_dup("/dst3"), true, true, true,
true, false, 1, false, 0);
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);