diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-07-22 18:15:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-07-22 18:15:38 +0000 |
commit | 22b955cca564a9a3a5b8c9d9dd1e295b7943c128 (patch) | |
tree | abdbd898676e1f853fca2d7e031d105d7ebcf676 /libgo/go/net/timeout_test.go | |
parent | 9d04a3af4c6491536badf6bde9707c907e4d196b (diff) |
libgo: update to go1.7rc3
Reviewed-on: https://go-review.googlesource.com/25150
From-SVN: r238662
Diffstat (limited to 'libgo/go/net/timeout_test.go')
-rw-r--r-- | libgo/go/net/timeout_test.go | 74 |
1 files changed, 58 insertions, 16 deletions
diff --git a/libgo/go/net/timeout_test.go b/libgo/go/net/timeout_test.go index 98e3164fb98..ed26f2a4aff 100644 --- a/libgo/go/net/timeout_test.go +++ b/libgo/go/net/timeout_test.go @@ -5,7 +5,9 @@ package net import ( + "context" "fmt" + "internal/testenv" "io" "io/ioutil" "net/internal/socktest" @@ -26,6 +28,8 @@ var dialTimeoutTests = []struct { {-5 * time.Second, 0, -5 * time.Second, 100 * time.Millisecond}, {0, -5 * time.Second, -5 * time.Second, 100 * time.Millisecond}, {-5 * time.Second, 5 * time.Second, -5 * time.Second, 100 * time.Millisecond}, // timeout over deadline + {-1 << 63, 0, time.Second, 100 * time.Millisecond}, + {0, -1 << 63, time.Second, 100 * time.Millisecond}, {50 * time.Millisecond, 0, 100 * time.Millisecond, time.Second}, {0, 50 * time.Millisecond, 100 * time.Millisecond, time.Second}, @@ -38,19 +42,6 @@ func TestDialTimeout(t *testing.T) { defer func() { testHookDialChannel = origTestHookDialChannel }() defer sw.Set(socktest.FilterConnect, nil) - // Avoid tracking open-close jitterbugs between netFD and - // socket that leads to confusion of information inside - // socktest.Switch. - // It may happen when the Dial call bumps against TCP - // simultaneous open. See selfConnect in tcpsock_posix.go. - defer func() { - sw.Set(socktest.FilterClose, nil) - forceCloseSockets() - }() - sw.Set(socktest.FilterClose, func(so *socktest.Status) (socktest.AfterFilter, error) { - return nil, errTimedout - }) - for i, tt := range dialTimeoutTests { switch runtime.GOOS { case "plan9", "windows": @@ -99,6 +90,56 @@ func TestDialTimeout(t *testing.T) { } } +var dialTimeoutMaxDurationTests = []struct { + timeout time.Duration + delta time.Duration // for deadline +}{ + // Large timeouts that will overflow an int64 unix nanos. + {1<<63 - 1, 0}, + {0, 1<<63 - 1}, +} + +func TestDialTimeoutMaxDuration(t *testing.T) { + if runtime.GOOS == "openbsd" { + testenv.SkipFlaky(t, 15157) + } + + ln, err := newLocalListener("tcp") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + for i, tt := range dialTimeoutMaxDurationTests { + ch := make(chan error) + max := time.NewTimer(250 * time.Millisecond) + defer max.Stop() + go func() { + d := Dialer{Timeout: tt.timeout} + if tt.delta != 0 { + d.Deadline = time.Now().Add(tt.delta) + } + c, err := d.Dial(ln.Addr().Network(), ln.Addr().String()) + if err == nil { + c.Close() + } + ch <- err + }() + + select { + case <-max.C: + t.Fatalf("#%d: Dial didn't return in an expected time", i) + case err := <-ch: + if perr := parseDialError(err); perr != nil { + t.Error(perr) + } + if err != nil { + t.Errorf("#%d: %v", i, err) + } + } + } +} + var acceptTimeoutTests = []struct { timeout time.Duration xerrs [2]error // expected errors in transition @@ -124,10 +165,13 @@ func TestAcceptTimeout(t *testing.T) { } defer ln.Close() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() for i, tt := range acceptTimeoutTests { if tt.timeout < 0 { go func() { - c, err := Dial(ln.Addr().Network(), ln.Addr().String()) + var d Dialer + c, err := d.DialContext(ctx, ln.Addr().Network(), ln.Addr().String()) if err != nil { t.Error(err) return @@ -261,8 +305,6 @@ var readTimeoutTests = []struct { } func TestReadTimeout(t *testing.T) { - t.Parallel() - switch runtime.GOOS { case "plan9": t.Skipf("not supported on %s", runtime.GOOS) |