aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2016-11-09 21:35:37 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2016-11-09 22:31:45 +0000
commit2f2b57853eeccf854e8e47e5f77ff043d34b2a34 (patch)
tree3f99f89767508ccf3ddb151c91ec44f3ffe16f09
parent22c70f268b30c703856143df848556515a824071 (diff)
downloadgo-2f2b57853eeccf854e8e47e5f77ff043d34b2a34.tar.gz
go-2f2b57853eeccf854e8e47e5f77ff043d34b2a34.zip
net/http: deflake TestIdleConnH2Crash
Fixes #17838 Change-Id: Ifafb4542a0ed6f2e29c9a83e30842e2fc18d6546 Reviewed-on: https://go-review.googlesource.com/33015 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tom Bergan <tombergan@google.com> Reviewed-by: Michael Munday <munday@ca.ibm.com>
-rw-r--r--src/net/http/transport_test.go19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go
index f6f21e87ed..5ed23e713b 100644
--- a/src/net/http/transport_test.go
+++ b/src/net/http/transport_test.go
@@ -3667,12 +3667,12 @@ func TestIdleConnH2Crash(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
- gotErr := make(chan bool, 1)
+ sawDoErr := make(chan bool, 1)
+ testDone := make(chan struct{})
+ defer close(testDone)
cst.tr.IdleConnTimeout = 5 * time.Millisecond
cst.tr.DialTLS = func(network, addr string) (net.Conn, error) {
- cancel()
- <-gotErr
c, err := tls.Dial(network, addr, &tls.Config{
InsecureSkipVerify: true,
NextProtos: []string{"h2"},
@@ -3686,6 +3686,17 @@ func TestIdleConnH2Crash(t *testing.T) {
c.Close()
return nil, errors.New("bogus")
}
+
+ cancel()
+
+ failTimer := time.NewTimer(5 * time.Second)
+ defer failTimer.Stop()
+ select {
+ case <-sawDoErr:
+ case <-testDone:
+ case <-failTimer.C:
+ t.Error("timeout in DialTLS, waiting too long for cst.c.Do to fail")
+ }
return c, nil
}
@@ -3696,7 +3707,7 @@ func TestIdleConnH2Crash(t *testing.T) {
res.Body.Close()
t.Fatal("unexpected success")
}
- gotErr <- true
+ sawDoErr <- true
// Wait for the explosion.
time.Sleep(cst.tr.IdleConnTimeout * 10)