github.com/qiniu/go-sdk/v7@v7.27.0/internal/dialer/dialer_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package dialer_test 5 6 import ( 7 "context" 8 "net" 9 "os" 10 "testing" 11 "time" 12 13 "github.com/qiniu/go-sdk/v7/internal/dialer" 14 ) 15 16 func TestDialContext(t *testing.T) { 17 listener, err := net.ListenTCP("tcp", &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 9901}) 18 if err != nil { 19 t.Fatal(err) 20 } 21 defer listener.Close() 22 23 now := time.Now() 24 conn, err := dialer.DialContext(context.Background(), "tcp", []net.IP{net.IPv4(8, 8, 8, 8), net.IPv4(8, 8, 4, 4)}, "9901", dialer.DialOptions{Timeout: 3 * time.Second, KeepAlive: time.Second}) 25 if err != nil { 26 if !os.IsTimeout(err) { 27 t.Fatal("Unexpected error", err) 28 } 29 } else { 30 conn.Close() 31 t.Fatalf("Returning connection is unexpected") 32 } 33 34 if time.Since(now) < 3*time.Second || time.Since(now) > 4*time.Second { 35 t.Fatalf("Unexpected time elapsed") 36 } 37 38 now = time.Now() 39 conn, err = dialer.DialContext(context.Background(), "tcp", []net.IP{net.IPv4(8, 8, 8, 8), net.IPv4(8, 8, 4, 4), net.IPv4(127, 0, 0, 1)}, "9901", dialer.DialOptions{Timeout: 3 * time.Second, KeepAlive: time.Second}) 40 if err != nil { 41 t.Fatal("Unexpected error", err) 42 } 43 conn.Close() 44 45 if time.Since(now) < 2*time.Second || time.Since(now) > 3*time.Second { 46 t.Fatalf("Unexpected time elapsed") 47 } 48 }