1
0
mirror of https://github.com/golang/go synced 2024-11-12 03:00:22 -07:00

net: eliminate arbitrary timeout in TestVariousDeadlines

When we set a timeout, we don't actually have a guarantee one how long
the OS will take to notice it. Moreover, if the test deadlocks
completely (for example, due to a deadline never taking effect), it
would be more useful to get a full goroutine dump instead of the current
"client stuck in Dial+Copy" failure message.

For #37883
For #41863

Change-Id: I9f712ef1c620f97a5ab69baac45deb71134b99bc
Reviewed-on: https://go-review.googlesource.com/c/go/+/371994
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Bryan C. Mills 2021-12-14 17:07:24 -05:00 committed by Bryan Mills
parent 9d0ca262bb
commit b5c0dbaafc

View File

@ -947,16 +947,11 @@ func testVariousDeadlines(t *testing.T) {
name := fmt.Sprintf("%v %d/%d", timeout, run, numRuns) name := fmt.Sprintf("%v %d/%d", timeout, run, numRuns)
t.Log(name) t.Log(name)
tooSlow := time.NewTimer(5 * time.Second)
defer tooSlow.Stop()
c, err := Dial(ls.Listener.Addr().Network(), ls.Listener.Addr().String()) c, err := Dial(ls.Listener.Addr().Network(), ls.Listener.Addr().String())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
ch := make(chan result, 1)
go func() {
t0 := time.Now() t0 := time.Now()
if err := c.SetDeadline(t0.Add(timeout)); err != nil { if err := c.SetDeadline(t0.Add(timeout)); err != nil {
t.Error(err) t.Error(err)
@ -964,18 +959,11 @@ func testVariousDeadlines(t *testing.T) {
n, err := io.Copy(io.Discard, c) n, err := io.Copy(io.Discard, c)
dt := time.Since(t0) dt := time.Since(t0)
c.Close() c.Close()
ch <- result{n, err, dt}
}()
select { if nerr, ok := err.(Error); ok && nerr.Timeout() {
case res := <-ch: t.Logf("%v: good timeout after %v; %d bytes", name, dt, n)
if nerr, ok := res.err.(Error); ok && nerr.Timeout() {
t.Logf("%v: good timeout after %v; %d bytes", name, res.d, res.n)
} else { } else {
t.Fatalf("%v: Copy = %d, %v; want timeout", name, res.n, res.err) t.Fatalf("%v: Copy = %d, %v; want timeout", name, n, err)
}
case <-tooSlow.C:
t.Fatalf("%v: client stuck in Dial+Copy", name)
} }
} }
} }