From f6f86470910d7c7d18acd766cce0aa33d9febff7 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 18 Oct 2026 15:10:57 +0200 Subject: [PATCH] Decouple file network test from temporary packet logs --- tests/test_member_files_network.c | 13 +++++++++++-- tools/chatgui/src/mainwindow.cpp | 4 ---- tools/chatgui/tests/test_member_files_browser.cpp | 3 +-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/tests/test_member_files_network.c b/tests/test_member_files_network.c index 87bf1ddb..f5c4b891 100644 --- a/tests/test_member_files_network.c +++ b/tests/test_member_files_network.c @@ -46,6 +46,7 @@ struct network_test { uint64_t disk_started_tb; int disk_released, disk_error; unsigned peak_inflight; + int (*server_receive_ready)(struct UTUN_INSTANCE*, uint64_t, uint64_t, const uint8_t*, size_t); int (*saved_receive_ready)(struct UTUN_INSTANCE*, uint64_t, uint64_t, const uint8_t*, size_t); unsigned restart_tick; struct api_case api[8]; @@ -80,10 +81,17 @@ static void capture_log(int level, const char* category, const char* message) { (void)level; (void)category; struct network_test* t = active; if (strstr(message, "router receive paused:")) t->receive_pauses++; - if (!t->slow_queued && strstr(message, "member_files: rx") && strstr(message, "kind=1 cmd=DATA")) { +} + +/* Задержка диска начинается с первого DATA; сценарий не зависит от текста и уровня логов. */ +static int server_receive_ready(struct UTUN_INSTANCE* inst, uint64_t group, uint64_t peer, const uint8_t* payload, size_t bytes) { + struct network_test* t = active; + if (!t->slow_queued && bytes >= MF_WIRE_HEADER && payload[1] == MF_REQUEST && payload[2] == MF_STREAM_DATA) { t->slow_queued = 1; + DEBUG_INFO(DEBUG_CATEGORY_MEDIA, "member_files test: first DATA received; delaying disk worker"); mf_worker_submit(t->nodes[SERVER]->member_files->disk, slow_disk, t, slow_done, t); } + return t->server_receive_ready(inst, group, peer, payload, bytes); } static void api_event(void* arg, const struct mf_transfer_progress* p) { @@ -325,7 +333,6 @@ again: int main(void) { debug_config_init(); debug_set_level(DEBUG_LEVEL_ERROR); debug_set_category_level(DEBUG_CATEGORY_MEDIA, DEBUG_LEVEL_DEBUG); test_clock_init(1000); - debug_set_category_level(DEBUG_CATEGORY_DEBUG, DEBUG_LEVEL_TRACE); debug_set_category_level(DEBUG_CATEGORY_ETCPROUTE, DEBUG_LEVEL_DEBUG); utun_instance_set_tun_init_enabled(0); struct network_test t = { .disk_mutex = PTHREAD_MUTEX_INITIALIZER, .disk_condition = PTHREAD_COND_INITIALIZER }; active = &t; @@ -341,6 +348,8 @@ int main(void) { chat_event_set_handler(t.nodes[i], event); } if (setup(&t)) { t.failed = 1; goto stop; } + t.server_receive_ready = t.nodes[SERVER]->router_bindings.receive_ready[ETCP_RT_ID_MEMBER_FILES]; + etcp_router_set_receive_ready(t.nodes[SERVER], ETCP_RT_ID_MEMBER_FILES, server_receive_ready); t.timer = uasync_set_timeout(t.ua, 100, &t, tick, "member_files_test"); test_clock_mainloop(t.ua); if (!t.failed) { // Stop/destroy вне callbacks: server cleanup ещё использует storage после текущего I/O. diff --git a/tools/chatgui/src/mainwindow.cpp b/tools/chatgui/src/mainwindow.cpp index 61227ba3..9bdd6f43 100644 --- a/tools/chatgui/src/mainwindow.cpp +++ b/tools/chatgui/src/mainwindow.cpp @@ -464,14 +464,10 @@ void MainWindow::setupBridgeCallbacks() { s_mainWindow->m_channelList->setCpuLoad(percent); }); gui_bridge_set_member_files_response_cb([](const uint8_t* data, int length) { - DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "member_files: GUI response route bytes=%d browser=%d", - length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser)); if (s_mainWindow && s_mainWindow->m_fileBrowser) s_mainWindow->m_fileBrowser->onResponse(data, length); if (AvatarManager::instance()) AvatarManager::instance()->onResponse(data, length); }); gui_bridge_set_member_files_transfer_cb([](const uint8_t* data, int length) { - DEBUG_TRACE(DEBUG_CATEGORY_DEBUG, "member_files: GUI progress route bytes=%d browser=%d", - length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser)); if (s_mainWindow && s_mainWindow->m_fileBrowser) s_mainWindow->m_fileBrowser->onTransfer(data, length); if (AvatarManager::instance()) AvatarManager::instance()->onTransfer(data, length); }); diff --git a/tools/chatgui/tests/test_member_files_browser.cpp b/tools/chatgui/tests/test_member_files_browser.cpp index d97d0ea8..b19c2699 100644 --- a/tools/chatgui/tests/test_member_files_browser.cpp +++ b/tools/chatgui/tests/test_member_files_browser.cpp @@ -101,8 +101,7 @@ class BrowserTest : public QObject { private slots: void initTestCase() { debug_config_init(); debug_set_level(DEBUG_LEVEL_WARN); - debug_set_category_level(DEBUG_CATEGORY_DEBUG, DEBUG_LEVEL_DEBUG); - debug_set_category_level(DEBUG_CATEGORY_MEDIA, DEBUG_LEVEL_INFO); + debug_set_category_level(DEBUG_CATEGORY_MEDIA, DEBUG_LEVEL_DEBUG); } void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; requestStarted = {}; }