Files
qsc20001102 142e5dc7d6
ci / Go checks (ubuntu-latest) (push) Has been cancelled
ci / Go checks (windows-latest) (push) Has been cancelled
初版功能完成
2026-08-29 13:12:17 +08:00

45 lines
1.1 KiB
Go

package udprelay
import (
"context"
"net"
"testing"
"time"
)
func TestRelayIdleTimeoutIsNormalFlowCompletion(t *testing.T) {
leftRelay, leftPeer := net.Pipe()
rightRelay, rightPeer := net.Pipe()
defer leftPeer.Close()
defer rightPeer.Close()
done := make(chan error, 1)
go func() { done <- Relay(context.Background(), leftRelay, rightRelay, 20*time.Millisecond) }()
select {
case err := <-done:
if err != nil {
t.Fatalf("idle Relay returned %v, want nil", err)
}
case <-time.After(time.Second):
t.Fatal("idle Relay did not reclaim the flow")
}
}
func TestRelayReturnsParentCancellation(t *testing.T) {
leftRelay, leftPeer := net.Pipe()
rightRelay, rightPeer := net.Pipe()
defer leftPeer.Close()
defer rightPeer.Close()
ctx, cancel := context.WithCancel(context.Background())
done := make(chan error, 1)
go func() { done <- Relay(ctx, leftRelay, rightRelay, time.Hour) }()
cancel()
select {
case err := <-done:
if err != context.Canceled {
t.Fatalf("Relay cancellation = %v, want context.Canceled", err)
}
case <-time.After(time.Second):
t.Fatal("canceled Relay did not stop")
}
}