]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.13] net: add more timing slop for TestDialParallel on Windows
authorIan Lance Taylor <iant@golang.org>
Sat, 16 Nov 2019 01:08:23 +0000 (17:08 -0800)
committerDmitri Shuralyov <dmitshur@golang.org>
Fri, 12 Jun 2020 18:58:35 +0000 (18:58 +0000)
For #35616.
Fixes #39538.
For #29252.

Change-Id: I51b2490100cfe0e902da09eee8d027e0ec86ed53
Reviewed-on: https://go-review.googlesource.com/c/go/+/207466
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
(cherry picked from commit c20b71eb37889e7257453be152a994319c76d451)
Reviewed-on: https://go-review.googlesource.com/c/go/+/237602
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
src/net/dial_test.go

index 1bf96fd3ce33aa1a9235d61734697655f94a5230..42e5d68ded352a0723122261d6a3c6b7e2e2e803 100644 (file)
@@ -154,7 +154,7 @@ func slowDialTCP(ctx context.Context, network string, laddr, raddr *TCPAddr) (*T
        return c, err
 }
 
-func dialClosedPort() (actual, expected time.Duration) {
+func dialClosedPort(t *testing.T) (actual, expected time.Duration) {
        // Estimate the expected time for this platform.
        // On Windows, dialing a closed port takes roughly 1 second,
        // but other platforms should be instantaneous.
@@ -168,6 +168,7 @@ func dialClosedPort() (actual, expected time.Duration) {
 
        l, err := Listen("tcp", "127.0.0.1:0")
        if err != nil {
+               t.Logf("dialClosedPort: Listen failed: %v", err)
                return 999 * time.Hour, expected
        }
        addr := l.Addr().String()
@@ -183,6 +184,7 @@ func dialClosedPort() (actual, expected time.Duration) {
                }
                elapsed := time.Now().Sub(startTime)
                if i == 2 {
+                       t.Logf("dialClosedPort: measured delay %v", elapsed)
                        return elapsed, expected
                }
        }
@@ -195,7 +197,7 @@ func TestDialParallel(t *testing.T) {
                t.Skip("both IPv4 and IPv6 are required")
        }
 
-       closedPortDelay, expectClosedPortDelay := dialClosedPort()
+       closedPortDelay, expectClosedPortDelay := dialClosedPort(t)
        if closedPortDelay > expectClosedPortDelay {
                t.Errorf("got %v; want <= %v", closedPortDelay, expectClosedPortDelay)
        }
@@ -316,8 +318,14 @@ func TestDialParallel(t *testing.T) {
                        t.Errorf("#%d: got nil; want non-nil", i)
                }
 
-               expectElapsedMin := tt.expectElapsed - 95*time.Millisecond
-               expectElapsedMax := tt.expectElapsed + 95*time.Millisecond
+               // We used to always use 95 milliseconds as the slop,
+               // but that was flaky on Windows.  See issue 35616.
+               slop := 95 * time.Millisecond
+               if fifth := tt.expectElapsed / 5; fifth > slop {
+                       slop = fifth
+               }
+               expectElapsedMin := tt.expectElapsed - slop
+               expectElapsedMax := tt.expectElapsed + slop
                if elapsed < expectElapsedMin {
                        t.Errorf("#%d: got %v; want >= %v", i, elapsed, expectElapsedMin)
                } else if elapsed > expectElapsedMax {
@@ -664,7 +672,7 @@ func TestDialerDualStack(t *testing.T) {
                t.Skip("both IPv4 and IPv6 are required")
        }
 
-       closedPortDelay, expectClosedPortDelay := dialClosedPort()
+       closedPortDelay, expectClosedPortDelay := dialClosedPort(t)
        if closedPortDelay > expectClosedPortDelay {
                t.Errorf("got %v; want <= %v", closedPortDelay, expectClosedPortDelay)
        }