|
|
|
|
@ -158,6 +158,19 @@ static void check_sleep(void) {
|
|
|
|
|
teardown(); DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "PASS sleeping peer deadline, FIN_WAIT and disappearance"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* UDP flag_up=0 переводит весь транспорт в DOWN, обратный переход отменяет удаление. */ |
|
|
|
|
static void check_remote_down(void) { |
|
|
|
|
setup(); struct ETCP_CONN* conn = ready_conn(0); struct ETCP_LINK* link = conn->links; |
|
|
|
|
for (int up = 0; up <= 1; up++) { |
|
|
|
|
struct ETCP_DGRAM* pkt = memory_pool_alloc(inst.pkt_pool); CHECK(pkt); |
|
|
|
|
memset(pkt, 0, sizeof(*pkt) + 4); pkt->flag_up = up; |
|
|
|
|
pkt->data[0] = ETCP_KEEPALIVE; pkt->data[2] = 200; |
|
|
|
|
CHECK(etcp_packet_decrypted(&sock, pkt, link, 7) == 0); |
|
|
|
|
CHECK(conn->links_up == up && !!conn->down_timer == !up); |
|
|
|
|
} |
|
|
|
|
teardown(); DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "PASS remote DOWN flag and recovered UDP transport"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Пробуждение сокращает RX timeout сразу, не оставляя таймер прежнего длинного сна. */ |
|
|
|
|
static void check_wake_deadline(void) { |
|
|
|
|
setup(); struct ETCP_CONN* conn = ready_conn(1); struct ETCP_LINK* link = conn->links; |
|
|
|
|
@ -205,6 +218,7 @@ int main(void) {
|
|
|
|
|
check_silent_peer(1); CHECK(u_get_allocated_count() == baseline); |
|
|
|
|
check_sleep(); CHECK(u_get_allocated_count() == baseline); |
|
|
|
|
check_wake_deadline(); 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; |
|
|
|
|
} |
|
|
|
|
|