]> Cypherpunks repositories - gostls13.git/commitdiff
net: don't accept timeouts in TestUDPZeroBytePayload
authorIan Lance Taylor <iant@golang.org>
Tue, 18 Dec 2018 23:10:38 +0000 (15:10 -0800)
committerIan Lance Taylor <iant@golang.org>
Thu, 20 Dec 2018 15:45:21 +0000 (15:45 +0000)
Before this CL we accepted timeouts in TestUDPZeroBytePayload to avoid
flakiness and because, according to CL 9194, the test didn't work on
some platforms. On Windows, before CL 132781, the read would always
timeout, and so since the test accepted timeouts it would pass
incorrectly. CL 132781 fixed Windows, and changed the test to not
accept timeouts in the ReadFrom case.

However, the timeout was short, and so on a loaded system the Read
might timeout not due to an error in the code, but just because the
read was not delivered. So ignoring timeouts made the test flaky, as
reported in issue #29225.

This CL tries to get to a better state by increasing the timeout to a
large value and not permitting timeouts at all. If there are systems
where the test fails, we will need to explicitly skip the test on
those systems.

Fixes #29225

Change-Id: I26863369898a69cac866b34fcb5b6ffbffab31f6
Reviewed-on: https://go-review.googlesource.com/c/154759
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/udpsock_test.go

index 1f06397ffa38a7e59f7d6e7ede5504736fd09f0f..c5a2439d6cd49059d0103544cf34ab4580d48d97 100644 (file)
@@ -353,21 +353,18 @@ func TestUDPZeroBytePayload(t *testing.T) {
                if n != 0 {
                        t.Errorf("got %d; want 0", n)
                }
-               c.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
+               c.SetReadDeadline(time.Now().Add(30 * time.Second))
                var b [1]byte
+               var name string
                if genericRead {
                        _, err = c.(Conn).Read(b[:])
-                       // Read may timeout, it depends on the platform.
-                       if err != nil {
-                               if nerr, ok := err.(Error); !ok || !nerr.Timeout() {
-                                       t.Fatal(err)
-                               }
-                       }
+                       name = "Read"
                } else {
                        _, _, err = c.ReadFrom(b[:])
-                       if err != nil {
-                               t.Fatal(err)
-                       }
+                       name = "ReadFrom"
+               }
+               if err != nil {
+                       t.Errorf("%s of zero byte packet failed: %v", name, err)
                }
        }
 }