From 1f6f815917261eee45e05c41c5f018afd4fce7c9 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 24 Oct 2026 19:56:01 +0200 Subject: [PATCH] Reproduce NCD teardown during synchronous CLOSE queue notification --- tests/test_ncd_faults.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/test_ncd_faults.c b/tests/test_ncd_faults.c index a9b8c6f0..5c294362 100644 --- a/tests/test_ncd_faults.c +++ b/tests/test_ncd_faults.c @@ -334,6 +334,17 @@ static void snapshot_replaced(void) { node_conn_direct_force_close(handle); teardown(); } +static void close_during_send(struct ll_queue* queue, void* arg) { (void)queue; etcp_connection_close(arg); } + +static void synchronous_close(void) { + setup(); struct ETCP_CONN* conn = connection(1); struct NODE_CONN_DIRECT* handle = NULL; + CHECK(node_conn_direct_open(inst, 42, NULL, NULL, &handle, NULL) == NCD_REUSED); + queue_set_callback(conn->send_input_q, close_during_send, conn); + node_conn_direct_close(handle); + uasync_drain_immediate(ua); CHECK(!inst->ncd_registry && !inst->connections->count); + teardown(); +} + int main(int argc, char** argv) { debug_config_init(); debug_set_level(DEBUG_LEVEL_WARN); debug_set_category_level(DEBUG_CATEGORY_DEBUG, DEBUG_LEVEL_INFO); if (getenv("UTUN_TEST_DEBUG")) debug_set_category_level(DEBUG_CATEGORY_ETCP, DEBUG_LEVEL_DEBUG); @@ -343,7 +354,7 @@ int main(int argc, char** argv) { {"fin_wait", fin_wait_failure}, {"nested", nested_events}, {"control", control_length}, {"new", new_transport_failures}, {"policy", candidate_policy}, {"capacity", socket_capacity}, {"cancel", open_cancelled}, {"remove", nested_remove}, {"ipv6", ipv6_candidates}, - {"reality", missing_reality}, {"snapshot", snapshot_replaced} + {"reality", missing_reality}, {"snapshot", snapshot_replaced}, {"send_close", synchronous_close} }; unsigned selected = 0; for (unsigned i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {