tests/e2e: concurrent UDP endpoints must share a reverse tunnel intact

Covers gost#911 at the wire level: four UDP source sockets send through one
RUDP reverse tunnel bound on a relay server, and every datagram must come
back byte-identical to its own endpoint.

A frame torn by an interleaved writer shows up twice — as a corrupted
payload, and as the torn frame leaving half a header in the stream, which the
far end reads as "unexpected EOF" and answers by rebuilding the whole tunnel.
So the suite asserts both: no endpoint sees a corrupted datagram, and no
endpoint sees a receive gap long enough to be a teardown and rebind.

Verified against a binary built before the fix (4 endpoints, 35% loss, 1.4s
gaps, suite fails) and after it (0% loss, no corruption, 0.2s gaps, passes).
This commit is contained in:
ginuerzh
2026-10-03 16:27:05 +08:00
parent e9fab95872
commit d7656ef3de
5 changed files with 346 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
# Internal client behind NAT for gost#911: a UDP forward service that sends all
# traffic to the port the host bound through the reverse tunnel.
#
# The forwarder target is gost-server:8432 — that is where the reverse tunnel is
# actually bound (the host's rudp listener asked the relay server to bind it, so
# the port lives on the relay server, not on the host). Datagrams go there and
# are carried back to the internal host over the one shared tunnel stream.
services:
- name: service-0
addr: ":8432"
handler:
type: udp
listener:
type: udp
metadata:
keepalive: true
ttl: 5m
forwarder:
nodes:
- name: tunnel
addr: gost-server:8432
chains:
- name: chain-0
hops:
- nodes:
- addr: gost-server:8430
connector:
type: relay
dialer:
type: tcp
log:
level: debug