From 0af9a3092b80f5ea40be40a62f5782242d35905a Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 10 Oct 2026 15:55:28 +0200 Subject: [PATCH] tests: allocate ports independently in every STCP scenario --- tests/test_stcp.c | 76 ++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 43 deletions(-) diff --git a/tests/test_stcp.c b/tests/test_stcp.c index c5e854e2..6ec4c9fd 100644 --- a/tests/test_stcp.c +++ b/tests/test_stcp.c @@ -17,7 +17,6 @@ static int tests_passed = 0, tests_total = 0; static struct SC_MYKEYS s_keys, c_keys; -#define BASE_PORT 23456 #ifdef __linux__ #define WIRE_PADDING 32 @@ -205,9 +204,8 @@ static int peer_send(struct test_peer *p, const uint8_t *data, size_t len) { static int test1_sizes(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 1; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, NULL); TASSERT(sc); size_t sizes[] = {0, 1, 16, 17, 255, 256, 1000, 65535}; @@ -245,9 +243,8 @@ static int test1_sizes(void) { static int test2_many(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 2; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, NULL); TASSERT(sc); int sent = 0, ticks = 0; @@ -283,9 +280,8 @@ static int test2_many(void) { static int test3_wrong_key(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 3; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct SC_MYKEYS rogue; TASSERT(sc_generate_keypair(&rogue) == SC_OK); @@ -311,9 +307,8 @@ static int test3_wrong_key(void) { static int test4_close(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 4; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, NULL); TASSERT(sc); int closed = 0, ticks = 0; @@ -352,7 +347,6 @@ static void multi_connect_cb(struct stcp_conn *conn, void *arg) { static int test5_multi(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); - uint16_t port = BASE_PORT + 5; #define NCLI 3 struct test_peer srvp[NCLI]; @@ -360,7 +354,8 @@ static int test5_multi(void) { memset(srvp, 0, sizeof(srvp)); memset(clip, 0, sizeof(clip)); g_multi_peers = srvp; g_multi_idx = 0; g_multi_max = NCLI; - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, multi_connect_cb, NULL, NULL, NULL, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, multi_connect_cb, NULL, NULL, NULL, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *clients[NCLI] = {0}; for (int i = 0; i < NCLI; i++) { @@ -410,9 +405,8 @@ static int test5_multi(void) { static int test6_interleaved(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 6; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, NULL); TASSERT(sc); int round = 0, ticks = 0; @@ -444,9 +438,8 @@ static int test6_interleaved(void) { static int test7_bulk_4mb(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 7; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, NULL); TASSERT(sc); #define N_BULK 64 @@ -483,9 +476,8 @@ static int test7_bulk_4mb(void) { static int test8_srv_recv_close(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 8; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, NULL); TASSERT(sc); int ticks = 0; @@ -574,9 +566,8 @@ static int build_malicious_handshake(uint16_t padding_size, uint8_t *out) { static int test9_raw_handshake_ok(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}; - uint16_t port = BASE_PORT + 9; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); uint8_t buf[SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT + 8]; TASSERT(build_malicious_handshake(8, buf) == 0); @@ -601,9 +592,8 @@ static int test9_raw_handshake_ok(void) { static int test10_oversized_padding(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}; - uint16_t port = BASE_PORT + 10; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); uint8_t buf[SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT]; TASSERT(build_malicious_handshake(0xFFFF, buf) == 0); @@ -628,9 +618,8 @@ static int test10_oversized_padding(void) { static int test11_garbage_handshake(void) { struct UASYNC *ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}; - uint16_t port = BASE_PORT + 11; - - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); uint8_t buf[SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT]; for (int i = 0; i < (int)sizeof(buf); i++) buf[i] = (uint8_t)(i * 31 + 7); @@ -660,9 +649,9 @@ static int test12_padding_boundaries(void) { si.padding.min = si.padding.max = i ? ETCP_PADDING_MAX : 0; ci.padding.min = ci.padding.max = i ? 0 : ETCP_PADDING_MAX; struct test_peer srv = {0}, cli = {0}; - uint16_t port = BASE_PORT + 12 + i; - struct stcp_server* ss = stcp_server_create(ua, port, &s_keys, NULL, &si, + struct stcp_server* ss = stcp_server_create(ua, 0, &s_keys, NULL, &si, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); struct stcp_client* sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 0, NULL, NULL, &ci); TASSERT(sc); @@ -700,9 +689,9 @@ static int test13_salted_handshakes(void) { struct test_peer srv[2] = {{0}}, cli[2] = {{0}}; struct stcp_client* clients[2] = {0}; g_multi_peers = srv; g_multi_idx = 0; g_multi_max = 2; - capture_port = BASE_PORT + 14 + round; - struct stcp_server* ss = stcp_server_create(ua, capture_port, &s_keys, ed_server, &si, + struct stcp_server* ss = stcp_server_create(ua, 0, &s_keys, ed_server, &si, multi_connect_cb, NULL, NULL, NULL, AF_INET); TASSERT(ss); + capture_port = stcp_server_get_port(ss); TASSERT(capture_port); memset(wire, 0, sizeof(wire)); wire_count = 0; capture_wire = 1; for (int i = 0; i < 2; i++) { clients[i] = stcp_client_connect(ua, "127.0.0.1", capture_port, &c_keys, s_keys.public_key, @@ -765,9 +754,9 @@ static int test13_salted_handshakes(void) { static int test14_modified_salt(void) { struct UASYNC* ua = uasync_create(); TASSERT(ua); struct test_peer srv = {0}; - uint16_t port = BASE_PORT + 16; - struct stcp_server* ss = stcp_server_create(ua, port, &s_keys, NULL, NULL, + struct stcp_server* ss = stcp_server_create(ua, 0, &s_keys, NULL, NULL, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); uint8_t packet[STCP_HS_CLIENT_MIN + 8]; TASSERT(build_malicious_handshake(8, packet) == 0); packet[0] ^= 1; @@ -792,9 +781,9 @@ static int test15_reality_records(void) { cfg.enabled = 1; cfg.short_id_count = 1; TASSERT(!reality_generate_keypair(cfg.private_key, cc.server_static_pubkey)); strcpy(cc.server_name, "www.microsoft.com"); - uint16_t port = BASE_PORT + 17; - struct stcp_server *ss = stcp_server_create(ua, port, &s_keys, NULL, &si, + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, &si, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); stcp_server_set_reality(ss, &cfg); #ifdef __linux__ capture_port = port; reality_capture = 1; reality_send_calls = 0; reality_tamper = round == 2; @@ -886,11 +875,12 @@ static int test16_reality_allocation_failures(void) { cfg.enabled = 1; cfg.short_id_count = 1; TASSERT(!reality_generate_keypair(cfg.private_key, cc.server_static_pubkey)); strcpy(cc.server_name, "www.microsoft.com"); - struct stcp_server *ss = stcp_server_create(ua, BASE_PORT + 18, &s_keys, NULL, &si, + struct stcp_server *ss = stcp_server_create(ua, 0, &s_keys, NULL, &si, server_connect_cb, &srv, peer_close_cb, &srv, AF_INET); TASSERT(ss); + uint16_t port = stcp_server_get_port(ss); TASSERT(port); stcp_server_set_reality(ss, &cfg); reality_fault = failure; - struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", BASE_PORT + 18, &c_keys, s_keys.public_key, + struct stcp_client *sc = stcp_client_connect(ua, "127.0.0.1", port, &c_keys, s_keys.public_key, NULL, 0, NULL, 0, 200, 0, client_ready_cb, &cli, NULL, NULL, peer_close_cb, &cli, NULL, 3000, &cc, NULL, NULL); TASSERT(sc); for (unsigned i = 0; !cli.closed && !srv.closed && i < 1000; i++) uasync_poll(ua, 1);