]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: deflake TestIdleConnH2Crash
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 9 Nov 2016 21:35:37 +0000 (21:35 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 9 Nov 2016 22:31:45 +0000 (22:31 +0000)
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>
src/net/http/transport_test.go

index f6f21e87edd2b2a9607e2c6ff010dea3bd3088d0..5ed23e713bb75a7723dbc03a13b81a9b0fb5d0ed 100644 (file)
@@ -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)