From d1432b7d197b37ad9d8f1ff85a6ad3167697f51c Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 20 Sep 2026 20:21:50 +0300 Subject: [PATCH] =?UTF-8?q?tests:=20fix=20Windows=20build=20=E2=80=94=20SK?= =?UTF-8?q?IP=20fork-based=20e2e,=20cross-platform=20mkdtemp/setenv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_call.c | 5 +++-- tests/test_call_headless.c | 5 +++-- tests/test_chat_join.c | 3 ++- tests/test_chat_join_e2e.c | 13 +++++++++++++ tests/test_dm_e2e.c | 9 +++++---- tests/test_radio.c | 5 +++-- tests/test_radio_headless.c | 5 +++-- tests/test_radio_mesh.c | 5 +++-- tests/test_utils.h | 10 ++++++++++ 9 files changed, 45 insertions(+), 15 deletions(-) diff --git a/tests/test_call.c b/tests/test_call.c index 33a6760e..677ad08f 100644 --- a/tests/test_call.c +++ b/tests/test_call.c @@ -25,6 +25,7 @@ #include "../lib/debug_config.h" #include "../lib/mem.h" #include "../lib/platform_compat.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -408,8 +409,8 @@ int main(int argc, char** argv) { srand((unsigned)time(NULL)); char dir[512]; snprintf(dir, sizeof(dir), "/tmp/utun_call_XXXXXX"); - if (!mkdtemp(dir)) { fprintf(stderr, "mkdtemp failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir, 1); + if (test_mkdtemp(dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir, 1); fill_shared(56000 + (getpid() % 2000)); write_configs(dir); diff --git a/tests/test_call_headless.c b/tests/test_call_headless.c index 3cb4a4db..e803b555 100644 --- a/tests/test_call_headless.c +++ b/tests/test_call_headless.c @@ -29,6 +29,7 @@ #include "../lib/mem.h" #include "../lib/socket_compat.h" #include "../lib/platform_compat.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -456,8 +457,8 @@ int main(int argc, char** argv) { srand((unsigned)time(NULL)); char dir[512]; snprintf(dir, sizeof(dir), "/tmp/utun_call_hl_XXXXXX"); - if (!mkdtemp(dir)) { fprintf(stderr, "mkdtemp failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir, 1); + if (test_mkdtemp(dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir, 1); fill_shared(56000 + (getpid() % 2000)); write_configs(dir); diff --git a/tests/test_chat_join.c b/tests/test_chat_join.c index 5d2d3b01..0bc0420c 100644 --- a/tests/test_chat_join.c +++ b/tests/test_chat_join.c @@ -23,6 +23,7 @@ #include "../lib/u_async.h" #include "../lib/debug_config.h" #include "../lib/mem.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -558,7 +559,7 @@ int main(void) { srand((unsigned)time(NULL)); printf("=== test_chat_join ===\n"); { char t[256] = "/tmp/utun_cj_XXXXXX"; - (void)!mkdtemp(t); snprintf(g_tdir, sizeof(g_tdir), "%s", t); } + (void)test_mkdtemp(t); snprintf(g_tdir, sizeof(g_tdir), "%s", t); } g_ua = uasync_create(); if (!g_ua) { printf("FAIL: uasync_create\n"); return 1; } diff --git a/tests/test_chat_join_e2e.c b/tests/test_chat_join_e2e.c index 890699b9..f2cf3f58 100644 --- a/tests/test_chat_join_e2e.c +++ b/tests/test_chat_join_e2e.c @@ -38,8 +38,19 @@ #include #include #include +#ifndef _WIN32 #include #include +#endif + +#ifdef _WIN32 + +int main(void) { + printf("[SKIP] test_chat_join_e2e — fork() not available on Windows\n"); + return 0; +} + +#else #define POLL_MS 5 #define CH_NAME "test-channel" @@ -481,3 +492,5 @@ int main(int argc, char** argv) { } return parent_main(); } + +#endif /* !_WIN32 */ diff --git a/tests/test_dm_e2e.c b/tests/test_dm_e2e.c index 8e66c773..f42ef6eb 100644 --- a/tests/test_dm_e2e.c +++ b/tests/test_dm_e2e.c @@ -26,6 +26,7 @@ #include "../lib/debug_config.h" #include "../lib/mem.h" #include "../lib/platform_compat.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -497,8 +498,8 @@ int main(int argc, char** argv) { srand((unsigned)time(NULL)); char dir[512]; snprintf(dir, sizeof(dir), "/tmp/utun_dm_e2e_XXXXXX"); - if (!mkdtemp(dir)) { fprintf(stderr, "mkdtemp failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir, 1); + if (test_mkdtemp(dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir, 1); fill_shared(58000 + (getpid() % 2000)); write_configs(dir); @@ -551,8 +552,8 @@ int main(int argc, char** argv) { /* сценарий 2: отдельная топология (свежие ключи/БД) */ char dir2[512]; snprintf(dir2, sizeof(dir2), "/tmp/utun_dm_e2e2_XXXXXX"); - if (!mkdtemp(dir2)) { fprintf(stderr, "mkdtemp dir2 failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir2, 1); + if (test_mkdtemp(dir2) != 0) { fprintf(stderr, "mkdtemp dir2 failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir2, 1); fill_shared(70000 + (getpid() % 2000)); write_configs(dir2); diff --git a/tests/test_radio.c b/tests/test_radio.c index 35f7b0d7..4ab201fa 100644 --- a/tests/test_radio.c +++ b/tests/test_radio.c @@ -26,6 +26,7 @@ #include "../lib/debug_config.h" #include "../lib/mem.h" #include "../lib/platform_compat.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -388,8 +389,8 @@ int main(int argc, char** argv) { srand((unsigned)time(NULL)); char dir[512]; snprintf(dir, sizeof(dir), "/tmp/utun_radio_XXXXXX"); - if (!mkdtemp(dir)) { fprintf(stderr, "mkdtemp failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir, 1); + if (test_mkdtemp(dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir, 1); fill_shared(58000 + (getpid() % 2000)); write_configs(dir); diff --git a/tests/test_radio_headless.c b/tests/test_radio_headless.c index f1e248b4..15696d11 100644 --- a/tests/test_radio_headless.c +++ b/tests/test_radio_headless.c @@ -27,6 +27,7 @@ #include "../lib/mem.h" #include "../lib/socket_compat.h" #include "../lib/platform_compat.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -415,8 +416,8 @@ int main(int argc, char** argv) { srand((unsigned)time(NULL)); char dir[512]; snprintf(dir, sizeof(dir), "/tmp/utun_radio_hl_XXXXXX"); - if (!mkdtemp(dir)) { fprintf(stderr, "mkdtemp failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir, 1); + if (test_mkdtemp(dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir, 1); fill_shared(59000 + (getpid() % 2000)); write_configs(dir); diff --git a/tests/test_radio_mesh.c b/tests/test_radio_mesh.c index 1a124a8d..93d181f7 100644 --- a/tests/test_radio_mesh.c +++ b/tests/test_radio_mesh.c @@ -30,6 +30,7 @@ #include "../lib/debug_config.h" #include "../lib/mem.h" #include "../lib/platform_compat.h" +#include "test_utils.h" #include #define OPENSSL_API_COMPAT 0x10100000L @@ -418,8 +419,8 @@ int main(int argc, char** argv) { srand((unsigned)time(NULL)); char dir[512]; snprintf(dir, sizeof(dir), "/tmp/utun_radio_mesh_XXXXXX"); - if (!mkdtemp(dir)) { fprintf(stderr, "mkdtemp failed\n"); return 1; } - setenv("UTUN_TEST_DIR", dir, 1); + if (test_mkdtemp(dir) != 0) { fprintf(stderr, "mkdtemp failed\n"); return 1; } + test_setenv("UTUN_TEST_DIR", dir, 1); fill_shared(59000 + (getpid() % 2000)); write_configs(dir); diff --git a/tests/test_utils.h b/tests/test_utils.h index 1d45c357..2b21a314 100644 --- a/tests/test_utils.h +++ b/tests/test_utils.h @@ -42,6 +42,12 @@ static inline int test_mkdtemp(char *template_str) { return -1; // Failed after 100 attempts } +// Cross-platform setenv for Windows (updates _environ, видим через getenv) +static inline int test_setenv(const char *name, const char *value, int overwrite) { + if (!overwrite && getenv(name)) return 0; + return _putenv_s(name, value); /* 0 = success, errno_t != 0 = error */ +} + // Cross-platform unlink for Windows static inline int test_unlink(const char *path) { return _unlink(path); @@ -60,6 +66,10 @@ static inline int test_mkdtemp(char *template_str) { return (mkdtemp(template_str) == NULL) ? -1 : 0; } +static inline int test_setenv(const char *name, const char *value, int overwrite) { + return setenv(name, value, overwrite); +} + static inline int test_unlink(const char *path) { return unlink(path); }