Commit 35231ec7 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

net/http: deflake TestClientTimeout

Should fix flakes like:

https://build.golang.org/log/c8da331317064227f38d5ef57ed7dba563ba1b38

--- FAIL: TestClientTimeout_h1 (0.35s)
    client_test.go:1263: timeout after 200ms waiting for timeout of 100ms
FAIL

Change-Id: I0a4dba607524e8d7a00f498e27d9598acde5d222
Reviewed-on: https://go-review.googlesource.com/33420
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 01b4ddb3
...@@ -1188,9 +1188,7 @@ func TestClientTimeout_h2(t *testing.T) { testClientTimeout(t, h2Mode) } ...@@ -1188,9 +1188,7 @@ func TestClientTimeout_h2(t *testing.T) { testClientTimeout(t, h2Mode) }
func testClientTimeout(t *testing.T, h2 bool) { func testClientTimeout(t *testing.T, h2 bool) {
setParallel(t) setParallel(t)
defer afterTest(t) defer afterTest(t)
testDone := make(chan struct{}) testDone := make(chan struct{}) // closed in defer below
const timeout = 100 * time.Millisecond
sawRoot := make(chan bool, 1) sawRoot := make(chan bool, 1)
sawSlow := make(chan bool, 1) sawSlow := make(chan bool, 1)
...@@ -1204,21 +1202,22 @@ func testClientTimeout(t *testing.T, h2 bool) { ...@@ -1204,21 +1202,22 @@ func testClientTimeout(t *testing.T, h2 bool) {
sawSlow <- true sawSlow <- true
w.Write([]byte("Hello")) w.Write([]byte("Hello"))
w.(Flusher).Flush() w.(Flusher).Flush()
select { <-testDone
case <-testDone:
case <-time.After(timeout * 10):
}
return return
} }
})) }))
defer cst.close() defer cst.close()
defer close(testDone) defer close(testDone) // before cst.close, to unblock /slow handler
// 200ms should be long enough to get a normal request (the /
// handler), but not so long that it makes the test slow.
const timeout = 200 * time.Millisecond
cst.c.Timeout = timeout cst.c.Timeout = timeout
res, err := cst.c.Get(cst.ts.URL) res, err := cst.c.Get(cst.ts.URL)
if err != nil { if err != nil {
if strings.Contains(err.Error(), "Client.Timeout") { if strings.Contains(err.Error(), "Client.Timeout") {
t.Skip("host too slow to get fast resource in 100ms") t.Skipf("host too slow to get fast resource in %v", timeout)
} }
t.Fatal(err) t.Fatal(err)
} }
...@@ -1244,7 +1243,7 @@ func testClientTimeout(t *testing.T, h2 bool) { ...@@ -1244,7 +1243,7 @@ func testClientTimeout(t *testing.T, h2 bool) {
res.Body.Close() res.Body.Close()
}() }()
const failTime = timeout * 2 const failTime = 5 * time.Second
select { select {
case err := <-errc: case err := <-errc:
if err == nil { if err == nil {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment