net: don't accept timeouts in TestUDPZeroBytePayload

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>
This commit is contained in:
Ian Lance Taylor 2018-12-18 15:10:38 -08:00
parent 49abcf1a97
commit 0dd88cd54d
1 changed files with 7 additions and 10 deletions

View 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)
}
}
}