http2: fix racey and flaky server push test
The bad test was added in https://go-review.googlesource.com/32887.
My fault.
Change-Id: Iee98ef0579bc5de086fa286530d45db009407d10
Reviewed-on: https://go-review.googlesource.com/32910
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/http2/server_push_test.go b/http2/server_push_test.go
index 7a975fe..3fea208 100644
--- a/http2/server_push_test.go
+++ b/http2/server_push_test.go
@@ -14,6 +14,7 @@
"net/http"
"reflect"
"strconv"
+ "sync"
"testing"
"time"
)
@@ -429,6 +430,7 @@
}
func TestServer_Push_RejectAfterGoAway(t *testing.T) {
+ var readyOnce sync.Once
ready := make(chan struct{})
errc := make(chan error, 2)
st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
@@ -449,12 +451,15 @@
// Send GOAWAY and wait for it to be processed.
st.fr.WriteGoAway(1, ErrCodeNo, nil)
go func() {
- done := false
- for !done {
+ for {
+ select {
+ case <-ready:
+ return
+ default:
+ }
st.sc.testHookCh <- func(loopNum int) {
if !st.sc.pushEnabled {
- close(ready)
- done = true
+ readyOnce.Do(func() { close(ready) })
}
}
}