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:
parent
9d0ca262bb
commit
b5c0dbaafc
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user