Browse Source

Decouple file network test from temporary packet logs

stream-multiview
evgeny 6 days ago
parent
commit
f6f8647091
  1. 13
      tests/test_member_files_network.c
  2. 4
      tools/chatgui/src/mainwindow.cpp
  3. 3
      tools/chatgui/tests/test_member_files_browser.cpp

13
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.

4
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);
});

3
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 = {}; }

Loading…
Cancel
Save