mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-10-26 16:00:15 +00:00
* test(connector): label the convergence waits of the direct connect test foreign_network_advertises_listeners_for_direct_connect failed in run 39903378976 with a bare "Timeout" from wait_for_condition, so the log cannot tell which convergence gate was hit: each of the two node pairs has four waits (remote sees client-net, client learns the route, remote learns the client peer, direct connection established). Add wait_for_condition_with_reason and use it for all four waits, with the node pair and the step in the message. Timeouts and assertions are unchanged. * test(connector): wait for the reply route the router actually uses The reverse-route wait added in #2738 checked the foreign network peer list, which only holds direct connections. The packet router also routes through the route table, so the wait could time out although a reply would have been routed, and a direct connection often appears only later in the flow. Call the router lookup (get_gateway_peer_id for the client peer on the remote foreign network) through a test accessor and wait until any gateway is available. CI run 39911533854 timed out on the previous condition for both tcp and udp. * test(connector): wait for the reply route the router actually uses The reverse-route wait added in #2738 checked the foreign network peer list, which only holds direct connections. The packet router routes through the route table as well (get_gateway_peer_id), so the wait could time out although a reply would have been routed, and a direct connection often appears only later in the flow. Add a test accessor that performs the router lookup on the remote foreign network and wait until any gateway is available. Drops the gate labels from this branch, they are covered by #2749. CI run 39911533854 timed out on the previous condition for both tcp and udp. * test(connector): report remote routing state when get_ip_list times out CI run 39921692334 failed after the gateway wait succeeded: the RPC itself timed out with all waits green, so the gateway was available but the reply still did not arrive. On RPC error, print the remote client-net state next to the error: the gateway chosen for the client, whether that gateway is a direct peer, and the peer ids currently connected. This makes the next failure attributable without changing any assertion or timeout. * test(connector): also report the origin mapping of the chosen gateway A wrapped foreign network packet is forwarded by mapping the gateway foreign peer id to its origin (parent network) peer id and sending it through the parent peer map, so a gateway that is not directly connected does not by itself mean the reply is dropped. Extend the RPC failure snapshot with get_origin_my_peer_id for the chosen gateway and whether the parent peer map can route to that origin id. * test(connector): capture the foreign network forwarding decisions The routing snapshot taken after the timeout cannot explain a lost RPC reply: it is sampled after the timeout, re-queries the state (which may converge later) and does not show whether the request reached the remote at all. Install a test-scoped tracing subscriber that keeps debug events from easytier_core::peers, so a failing run prints the forwarding decisions (dropped relay data, missing origin peer id, failed direct send) when they happen. Only this test process is affected. * test(connector): isolate foreign listener discovery The foreign DirectConnectorRpc handler collects interface addresses in the default network namespace. Although the three-node fixture gives each instance its own namespace, the RPC still observes host bridges and veth interfaces created and removed by concurrent tests. Add both protocol cases to the existing exclusive override for host interfaces. Preserve the reply route readiness check, RPC deadline, listener assertion, and final direct connection assertion. Diagnostics with 32 test threads on four CPUs showed interface enumeration delaying the RPC handler by over two seconds. With this override, the same mixed workload kept all observed handlers below 1.1 ms. Remove the temporary routing snapshot accessors, failure dump, and test tracing setup. Keep only the helpers used by the readiness check.