From e25d5cc22053a03b034f2a8253d8a9654541a1eb Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 10 Oct 2026 16:11:00 +0200 Subject: [PATCH] tests: use bound endpoints for CM and database synchronization --- tests/test_conn_mgr.c | 27 +++++++++++++++------------ tests/test_db_sync.c | 22 +++++++++++----------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/tests/test_conn_mgr.c b/tests/test_conn_mgr.c index badf9531..da3dc15a 100644 --- a/tests/test_conn_mgr.c +++ b/tests/test_conn_mgr.c @@ -12,6 +12,7 @@ #include #include "../lib/platform_compat.h" #include "test_utils.h" +#include "test_net.h" #ifndef _WIN32 #include #endif @@ -39,7 +40,6 @@ static volatile int result = 0; static void* ttimer = NULL; static char tdir[] = "/tmp/utun_cm_XXXXXX"; static char ca[256], cb[256]; -static int pa = 0, pb = 0; static volatile int cdone = 0, cevent = 0; static int wf(const char* p, const char* f, ...) { @@ -84,17 +84,19 @@ static void test2(void* arg) { /* ---- phase 1: setup/cleanup ---- */ static void setup(void) { test_mkdtemp(tdir); - int base = 47000 + (getpid() % 15000); pa = base; pb = base + 1; snprintf(ca, sizeof(ca), "%s/a.conf", tdir); snprintf(cb, sizeof(cb), "%s/b.conf", tdir); - wf(ca, "[global]\ntun_ip=10.99.0.1/24\ntun_ifname=tun99\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", pa); - wf(cb, "[global]\ntun_ip=10.99.0.2/24\ntun_ifname=tun98\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", pb); + wf(ca, "[global]\ntun_ip=10.99.0.1/24\ntun_ifname=tun99\n[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n"); + wf(cb, "[global]\ntun_ip=10.99.0.2/24\ntun_ifname=tun98\n[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n"); config_ensure_keys_and_node_id(ca); config_ensure_keys_and_node_id(cb); { struct utun_config* cfa = parse_config(ca); struct utun_config* cfb = parse_config(cb); g_nid_a = cfa->global.my_node_id; g_nid_b = cfb->global.my_node_id; free_config(cfa); free_config(cfb); } char *p0 = gv(ca,"pub"), *r0 = gv(ca,"priv"), *p1 = gv(cb,"pub"), *r1 = gv(cb,"priv"); - wf(ca, "[global]\nmy_private_key=%s\nmy_public_key=%s\ntun_ip=10.99.0.1/24\ntun_ifname=tun99\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[client: to_b]\nkeepalive=1\npeer_public_key=%s\nlink=s1:127.0.0.1:%d\n[allowed_keys]\nallow_all=1\n", r0, p0, pa, p1, pb); - wf(cb, "[global]\nmy_private_key=%s\nmy_public_key=%s\ntun_ip=10.99.0.2/24\ntun_ifname=tun98\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", r1, p1, pb); + wf(ca, "[global]\nmy_private_key=%s\nmy_public_key=%s\ntun_ip=10.99.0.1/24\ntun_ifname=tun99\n" + "[server: s1]\naddr=127.0.0.1:0\ntype=public\n[client: to_b]\nkeepalive=1\npeer_public_key=%s\n" + "link=s1:127.0.0.1:0\n[allowed_keys]\nallow_all=1\n", r0, p0, p1); + wf(cb, "[global]\nmy_private_key=%s\nmy_public_key=%s\ntun_ip=10.99.0.2/24\ntun_ifname=tun98\n" + "[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n", r1, p1); u_free(p0); u_free(r0); u_free(p1); u_free(r1); } static void cleanup(void) { test_unlink(ca); test_unlink(cb); test_rmdir(tdir); } @@ -106,7 +108,7 @@ static uint64_t g_nid_a2 = 0, g_nid_b2 = 0, g_nid_c = 0; static volatile int cdone2 = 0, cevent2 = 0; static char tdir2[] = "/tmp/utun_cm_db_XXXXXX"; static char ca2[256], cb2[256]; -static int pa2 = 0, pb2 = 0; +static int pb2 = 0; static void ccb2(struct CONN_MGR_HANDLE* h, uint64_t id, uint64_t gid, enum conn_mgr_event event, void* arg) { @@ -159,24 +161,23 @@ static void test3_check(void* arg) { static void setup_db_test(void) { test_mkdtemp(tdir2); - int base = 48000 + (getpid() % 10000); pa2 = base; pb2 = base + 1; char dbdir_a[320], dbdir_b[320]; snprintf(dbdir_a, sizeof(dbdir_a), "%s/db_a", tdir2); utun_mkdir(dbdir_a, 0755); snprintf(dbdir_b, sizeof(dbdir_b), "%s/db_b", tdir2); utun_mkdir(dbdir_b, 0755); snprintf(ca2, sizeof(ca2), "%s/a2.conf", tdir2); snprintf(cb2, sizeof(cb2), "%s/b2.conf", tdir2); wf(ca2, "[global]\ntun_ip=10.98.0.1/24\ntun_ifname=tun97\n" - "db_path=%s\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", dbdir_a, pa2); + "db_path=%s\n[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n", dbdir_a); wf(cb2, "[global]\ntun_ip=10.98.0.2/24\ntun_ifname=tun96\n" - "db_path=%s\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", dbdir_b, pb2); + "db_path=%s\n[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n", dbdir_b); config_ensure_keys_and_node_id(ca2); config_ensure_keys_and_node_id(cb2); { struct utun_config* cfa = parse_config(ca2); g_nid_a2 = cfa->global.my_node_id; free_config(cfa); struct utun_config* cfb = parse_config(cb2); g_nid_b2 = cfb->global.my_node_id; free_config(cfb); } char *r0 = gv(ca2,"priv"), *p0 = gv(ca2,"pub"); char *r1 = gv(cb2,"priv"), *p1 = gv(cb2,"pub"); wf(ca2, "[global]\nmy_private_key=%s\nmy_public_key=%s\ntun_ip=10.98.0.1/24\ntun_ifname=tun97\n" - "db_path=%s\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", r0, p0, dbdir_a, pa2); + "db_path=%s\n[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n", r0, p0, dbdir_a); wf(cb2, "[global]\nmy_private_key=%s\nmy_public_key=%s\ntun_ip=10.98.0.2/24\ntun_ifname=tun96\n" - "db_path=%s\n[server: s1]\naddr=127.0.0.1:%d\ntype=public\n[allowed_keys]\nallow_all=1\n", r1, p1, dbdir_b, pb2); + "db_path=%s\n[server: s1]\naddr=127.0.0.1:0\ntype=public\n[allowed_keys]\nallow_all=1\n", r1, p1, dbdir_b); u_free(r0); u_free(p0); u_free(r1); u_free(p1); g_nid_c = 0xC0DEC0DEC0DEC0DEULL; } @@ -192,6 +193,7 @@ int main(void) { ua = uasync_create(); g_a = utun_instance_create(ua, ca); g_b = utun_instance_create(ua, cb); if (!g_a || !g_b) goto phase1_cleanup; + test_etcp_set_peer(g_a, "to_b", g_b, "s1"); utun_instance_init(g_a); utun_instance_init(g_b); uasync_call_soon(ua, NULL, test1); ttimer = uasync_set_timeout(ua, TIMEOUT_TB, NULL, to_cb, "to1"); @@ -212,6 +214,7 @@ phase1_cleanup: ua2 = uasync_create(); g_a2 = utun_instance_create(ua2, ca2); g_b2 = utun_instance_create(ua2, cb2); if (!g_a2 || !g_b2) goto done; + pb2 = ss_get_port(&test_etcp_bound_socket(g_b2, "s1")->local_addr); utun_instance_init(g_a2); utun_instance_init(g_b2); { diff --git a/tests/test_db_sync.c b/tests/test_db_sync.c index 30af5bf3..11e801e2 100644 --- a/tests/test_db_sync.c +++ b/tests/test_db_sync.c @@ -7,6 +7,7 @@ #include #include "../lib/platform_compat.h" #include "test_utils.h" +#include "test_net.h" #ifdef _WIN32 #include #include @@ -58,7 +59,6 @@ static void reset_done_flags(void) { g_done_a = g_done_b = g_done_c = 0; } static char temp_dir[] = "/tmp/utun_dbsync_XXXXXX"; static char config_a[256], config_b[256], config_c[256]; -static int port_a_srv, port_b_srv, port_c_srv; static uint32_t ca_target, cb_target, cc_target; static int write_file(const char* path, const char* fmt, ...) { @@ -76,8 +76,6 @@ static char* get_pubkey(const char* path) { static int create_temp_configs(void) { if (test_mkdtemp(temp_dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return -1; } - int base = 42000 + (getpid() % 15000); - port_a_srv = base; port_b_srv = base + 1; port_c_srv = base + 2; snprintf(config_a, sizeof(config_a), "%s/a.conf", temp_dir); snprintf(config_b, sizeof(config_b), "%s/b.conf", temp_dir); snprintf(config_c, sizeof(config_c), "%s/c.conf", temp_dir); @@ -89,24 +87,24 @@ static int create_temp_configs(void) { write_file(config_a, "[global]\nmy_node_id=0xAAAAAAAAAAAAAAAA\ntun_ip=10.200.0.1/24\n" "tun_ifname=tun200\nkeepalive_adaptive=0\ndb_path=%s/db_a\ndb_sync_enabled=1\n\n" - "[server: srv_a]\naddr=127.0.0.1:%d\ntype=public\n\n" - "[allowed_keys]\nallow_all=1\n", temp_dir, port_a_srv); + "[server: srv_a]\naddr=127.0.0.1:0\ntype=public\n\n" + "[allowed_keys]\nallow_all=1\n", temp_dir); config_ensure_keys_and_node_id(config_a); char* pub_a = get_pubkey(config_a); if (!pub_a) { fprintf(stderr, "pub_a fail\n"); return -1; } write_file(config_b, "[global]\nmy_node_id=0xBBBBBBBBBBBBBBBB\ntun_ip=10.200.0.2/24\n" "tun_ifname=tun201\nkeepalive_adaptive=0\ndb_path=%s/db_b\ndb_sync_enabled=1\n\n" - "[server: srv_b]\naddr=127.0.0.1:%d\ntype=public\n\n" - "[client: to_a]\nkeepalive=1\npeer_public_key=%s\nlink=srv_b:127.0.0.1:%d\n\n" - "[allowed_keys]\nallow_all=1\n", temp_dir, port_b_srv, pub_a, port_a_srv); + "[server: srv_b]\naddr=127.0.0.1:0\ntype=public\n\n" + "[client: to_a]\nkeepalive=1\npeer_public_key=%s\nlink=srv_b:127.0.0.1:0\n\n" + "[allowed_keys]\nallow_all=1\n", temp_dir, pub_a); write_file(config_c, "[global]\nmy_node_id=0xCCCCCCCCCCCCCCCC\ntun_ip=10.200.0.3/24\n" "tun_ifname=tun202\nkeepalive_adaptive=0\ndb_path=%s/db_c\ndb_sync_enabled=1\n\n" - "[server: srv_c]\naddr=127.0.0.1:%d\ntype=public\n\n" - "[client: to_a]\nkeepalive=1\npeer_public_key=%s\nlink=srv_c:127.0.0.1:%d\n\n" - "[allowed_keys]\nallow_all=1\n", temp_dir, port_c_srv, pub_a, port_a_srv); + "[server: srv_c]\naddr=127.0.0.1:0\ntype=public\n\n" + "[client: to_a]\nkeepalive=1\npeer_public_key=%s\nlink=srv_c:127.0.0.1:0\n\n" + "[allowed_keys]\nallow_all=1\n", temp_dir, pub_a); free(pub_a); config_ensure_keys_and_node_id(config_b); config_ensure_keys_and_node_id(config_c); @@ -231,6 +229,7 @@ int main(void) { inst_a = utun_instance_create(ua, config_a); inst_b = utun_instance_create(ua, config_b); + if (inst_a && inst_b) test_etcp_set_peer(inst_b, "to_a", inst_a, "srv_a"); if (!inst_a || !inst_b || utun_instance_init(inst_a) != 0 || utun_instance_init(inst_b) != 0) { fprintf(stderr, "init fail\n"); cleanup_temp_configs(); return 1; } seed_members(inst_a, &inst_b, 1); @@ -378,6 +377,7 @@ int main(void) { reset_done_flags(); remove_si(&si_a); remove_si(&si_b); inst_c = utun_instance_create(ua, config_c); + if (inst_c) test_etcp_set_peer(inst_c, "to_a", inst_a, "srv_a"); if (!inst_c || utun_instance_init(inst_c) != 0) { fprintf(stderr, "inst_c fail\n"); test_phase = 2; goto done; } { struct UTUN_INSTANCE* p_ab[2] = { inst_b, inst_c }; struct UTUN_INSTANCE* p_ac[2] = { inst_a, inst_c };