Skip to content

Commit b3e13ca

Browse files
authored
fix unsteable ut (Ehco1996#428)
1 parent c7a5dcf commit b3e13ca

3 files changed

Lines changed: 27 additions & 49 deletions

File tree

.github/dependabot.yml

Lines changed: 0 additions & 35 deletions
This file was deleted.

test/echo/echo.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ func SendTcpMsg(msg []byte, address string) []byte {
159159
if _, err := conn.Write(msg); err != nil {
160160
log.Fatal(err)
161161
}
162-
time.Sleep(time.Second * 1)
163162
buf := make([]byte, len(msg))
164163
n, err := conn.Read(buf)
165164
if err != nil {
@@ -197,17 +196,21 @@ func EchoTcpMsgLong(msg []byte, sleepTime time.Duration, address string) error {
197196
return nil
198197
}
199198

200-
func SendUdpMsg(msg []byte, address string) []byte {
199+
func SendUdpMsg(msg []byte, address string) ([]byte, error) {
201200
conn, err := net.Dial("udp", address)
202201
if err != nil {
203-
log.Fatal(err)
202+
return nil, fmt.Errorf("dial udp: %w", err)
204203
}
205204
defer conn.Close()
206205
if _, err := conn.Write(msg); err != nil {
207-
log.Fatal(err)
206+
return nil, fmt.Errorf("write udp: %w", err)
208207
}
209208
buf := make([]byte, len(msg))
210-
time.Sleep(time.Second * 1)
211-
n, _ := conn.Read(buf)
212-
return buf[:n]
209+
// set a read deadline to avoid hanging forever if the UDP response is lost
210+
conn.SetReadDeadline(time.Now().Add(5 * time.Second))
211+
n, err := conn.Read(buf)
212+
if err != nil {
213+
return nil, fmt.Errorf("read udp: %w", err)
214+
}
215+
return buf[:n], nil
213216
}

test/relay_test.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ func TestMain(m *testing.M) {
6464
func startRelayServers() []*relay.Relay {
6565
options := conf.Options{
6666
EnableUDP: true,
67-
IdleTimeoutSec: 1,
68-
ReadTimeoutSec: 1,
67+
IdleTimeoutSec: 3,
68+
ReadTimeoutSec: 3,
6969
}
7070
cfg := config.Config{
7171
RelayConfigs: []*conf.Config{
@@ -216,11 +216,21 @@ func testUDPRelay(t *testing.T, address string, concurrent bool, concurrency ...
216216
msg := []byte("hello udp")
217217

218218
runTest := func() error {
219-
res := echo.SendUdpMsg(msg, address)
220-
if !bytes.Equal(msg, res) {
221-
return fmt.Errorf("response mismatch: got %s, want %s", res, msg)
219+
// UDP is unreliable, retry up to 3 times
220+
var lastErr error
221+
for attempt := 0; attempt < 3; attempt++ {
222+
res, err := echo.SendUdpMsg(msg, address)
223+
if err != nil {
224+
lastErr = err
225+
continue
226+
}
227+
if !bytes.Equal(msg, res) {
228+
lastErr = fmt.Errorf("response mismatch: got %s, want %s", res, msg)
229+
continue
230+
}
231+
return nil
222232
}
223-
return nil
233+
return fmt.Errorf("failed after 3 attempts: %w", lastErr)
224234
}
225235

226236
if concurrent {
@@ -247,6 +257,6 @@ func testUDPRelay(t *testing.T, address string, concurrent bool, concurrency ...
247257
}
248258

249259
func TestRelayIdleTimeout(t *testing.T) {
250-
err := echo.EchoTcpMsgLong([]byte("hello"), time.Second*2, RAW_LISTEN)
260+
err := echo.EchoTcpMsgLong([]byte("hello"), time.Second*4, RAW_LISTEN)
251261
require.Error(t, err, "Connection should be rejected")
252262
}

0 commit comments

Comments
 (0)