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  }