aboutsummaryrefslogtreecommitdiff
path: root/src/net/dial_test.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2016-04-14 17:47:25 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2016-04-15 22:48:12 +0000
commitb6b4004d5a5bf7099ac9ab76777797236da7fe63 (patch)
treec3545f04adaf5c8a6421f72be62e96b4a84ae3bd /src/net/dial_test.go
parent1d0977a1d552ad19a88c4ba9aeecd403699d82b6 (diff)
downloadgo-b6b4004d5a5bf7099ac9ab76777797236da7fe63.tar.gz
go-b6b4004d5a5bf7099ac9ab76777797236da7fe63.zip
net: context plumbing, add Dialer.DialContext
For #12580 (http.Transport tracing/analytics) Updates #13021 Change-Id: I126e494a7bd872e42c388ecb58499ecbf0f014cc Reviewed-on: https://go-review.googlesource.com/22101 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
Diffstat (limited to 'src/net/dial_test.go')
-rw-r--r--src/net/dial_test.go59
1 files changed, 27 insertions, 32 deletions
diff --git a/src/net/dial_test.go b/src/net/dial_test.go
index d4f04e0a4f..eb145f476c 100644
--- a/src/net/dial_test.go
+++ b/src/net/dial_test.go
@@ -6,6 +6,7 @@ package net
import (
"bufio"
+ "context"
"internal/testenv"
"io"
"net/internal/socktest"
@@ -193,18 +194,11 @@ const (
// In some environments, the slow IPs may be explicitly unreachable, and fail
// more quickly than expected. This test hook prevents dialTCP from returning
// before the deadline.
-func slowDialTCP(net string, laddr, raddr *TCPAddr, deadline time.Time, cancel <-chan struct{}) (*TCPConn, error) {
- c, err := dialTCP(net, laddr, raddr, deadline, cancel)
+func slowDialTCP(ctx context.Context, net string, laddr, raddr *TCPAddr) (*TCPConn, error) {
+ c, err := doDialTCP(ctx, net, laddr, raddr)
if ParseIP(slowDst4).Equal(raddr.IP) || ParseIP(slowDst6).Equal(raddr.IP) {
// Wait for the deadline, or indefinitely if none exists.
- var wait <-chan time.Time
- if !deadline.IsZero() {
- wait = time.After(deadline.Sub(time.Now()))
- }
- select {
- case <-cancel:
- case <-wait:
- }
+ <-ctx.Done()
}
return c, err
}
@@ -356,15 +350,14 @@ func TestDialParallel(t *testing.T) {
d := Dialer{
FallbackDelay: fallbackDelay,
}
- ctx := &dialContext{
- Dialer: d,
- network: "tcp",
- address: "?",
- finalDeadline: d.deadline(time.Now()),
- }
startTime := time.Now()
- c, err := dialParallel(ctx, primaries, fallbacks, nil)
- elapsed := time.Now().Sub(startTime)
+ dp := &dialParam{
+ Dialer: d,
+ network: "tcp",
+ address: "?",
+ }
+ c, err := dialParallel(context.Background(), dp, primaries, fallbacks)
+ elapsed := time.Since(startTime)
if c != nil {
c.Close()
@@ -385,16 +378,16 @@ func TestDialParallel(t *testing.T) {
}
// Repeat each case, ensuring that it can be canceled quickly.
- cancel := make(chan struct{})
+ ctx, cancel := context.WithCancel(context.Background())
var wg sync.WaitGroup
wg.Add(1)
go func() {
time.Sleep(5 * time.Millisecond)
- close(cancel)
+ cancel()
wg.Done()
}()
startTime = time.Now()
- c, err = dialParallel(ctx, primaries, fallbacks, cancel)
+ c, err = dialParallel(ctx, dp, primaries, fallbacks)
if c != nil {
c.Close()
}
@@ -406,7 +399,7 @@ func TestDialParallel(t *testing.T) {
}
}
-func lookupSlowFast(fn func(string) ([]IPAddr, error), host string) ([]IPAddr, error) {
+func lookupSlowFast(ctx context.Context, fn func(context.Context, string) ([]IPAddr, error), host string) ([]IPAddr, error) {
switch host {
case "slow6loopback4":
// Returns a slow IPv6 address, and a local IPv4 address.
@@ -415,7 +408,7 @@ func lookupSlowFast(fn func(string) ([]IPAddr, error), host string) ([]IPAddr, e
{IP: ParseIP("127.0.0.1")},
}, nil
default:
- return fn(host)
+ return fn(ctx, host)
}
}
@@ -530,22 +523,24 @@ func TestDialParallelSpuriousConnection(t *testing.T) {
origTestHookDialTCP := testHookDialTCP
defer func() { testHookDialTCP = origTestHookDialTCP }()
- testHookDialTCP = func(net string, laddr, raddr *TCPAddr, deadline time.Time, cancel <-chan struct{}) (*TCPConn, error) {
+ testHookDialTCP = func(ctx context.Context, net string, laddr, raddr *TCPAddr) (*TCPConn, error) {
// Sleep long enough for Happy Eyeballs to kick in, and inhibit cancelation.
// This forces dialParallel to juggle two successful connections.
time.Sleep(fallbackDelay * 2)
- cancel = nil
- return dialTCP(net, laddr, raddr, deadline, cancel)
+
+ // Now ignore the provided context (which will be canceled) and use a
+ // different one to make sure this completes with a valid connection,
+ // which we hope to be closed below:
+ return doDialTCP(context.Background(), net, laddr, raddr)
}
d := Dialer{
FallbackDelay: fallbackDelay,
}
- ctx := &dialContext{
- Dialer: d,
- network: "tcp",
- address: "?",
- finalDeadline: d.deadline(time.Now()),
+ dp := &dialParam{
+ Dialer: d,
+ network: "tcp",
+ address: "?",
}
makeAddr := func(ip string) addrList {
@@ -557,7 +552,7 @@ func TestDialParallelSpuriousConnection(t *testing.T) {
}
// dialParallel returns one connection (and closes the other.)
- c, err := dialParallel(ctx, makeAddr("127.0.0.1"), makeAddr("::1"), nil)
+ c, err := dialParallel(context.Background(), dp, makeAddr("127.0.0.1"), makeAddr("::1"))
if err != nil {
t.Fatal(err)
}