Test stream announcements after foreground wake and packet reordering

This commit is contained in:
evgeny committed 2026-10-16 12:55:10 +02:00
1 parent 919c3d76fe
commit fc526d16c0
3 files changed
+89 -3

No files matched your search

+17
View File
@@ -284,6 +284,22 @@ static void check_peer_wake_new_link(int tcp, int active_window) {
DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "PASS peer wake via new link tcp=%d active_window=%d: phase cancelled, TX preserved", tcp, active_window);
}
/* Потеря первого normal и запоздалый SLEEP исправляются следующим normal без ожидания конца сна. */
static void check_peer_wake_reordered(void) {
setup(); struct ETCP_CONN* conn = ready_conn(0); struct ETCP_LINK* link = conn->links;
receive_keepalive(link, KA_FLAG_SLEEP, 0);
test_clock_run_for(inst.ua, 2000); // первый normal потерян в сети
CHECK(conn->peer_sleep_phase && conn->peer_phase_timer);
receive_keepalive(link, 0, 0);
CHECK(!conn->peer_sleep_phase && !conn->peer_phase_timer && link->keepalive_timer);
receive_keepalive(link, KA_FLAG_SLEEP, 0); // старый анонс пришёл после пробуждения
CHECK(conn->peer_sleep_phase && conn->peer_phase_timer);
test_clock_run_for(inst.ua, 2000);
receive_keepalive(link, 0, 0);
CHECK(!conn->peer_sleep_phase && !conn->peer_phase_timer && link->keepalive_timer);
teardown(); DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "PASS normal keepalive restores awake state after loss and reordered sleep");
}
/* Мягкое закрытие работает без NCD entry; KEEP_ALIVE сохраняет транспорт дольше прежних 5 секунд. */
static void check_graceful(void) {
setup(); struct ETCP_CONN* conn = ready_conn(0);
@@ -320,6 +336,7 @@ int main(void) {
for (int tcp = 0; tcp <= 1; tcp++) for (int active = 0; active <= 1; active++) {
check_peer_wake_new_link(tcp, active); CHECK(u_get_allocated_count() == baseline);
}
check_peer_wake_reordered(); CHECK(u_get_allocated_count() == baseline);
check_remote_down(); CHECK(u_get_allocated_count() == baseline);
check_graceful(); CHECK(u_get_allocated_count() == baseline);
test_clock_finish(); return 0;