http2: deflake TestTransportReqBodyAfterResponse_200
Don't send the END_STREAM flag from the server until the client
sends its END_STREAM. Avoids a flaky failure when the client
sends the END_STREAM in a zero-length DATA frame:
- The server reads bodySize bytes and half-closes the stream.
- The client's Response.Body returns EOF.
- The test calls Response.Body.Close.
- The client resets the stream.
Avoid hanging forever on the client side of the test if the
server side exits with an error.
Fixes golang/go#48970
Change-Id: Ic921a3f60149abbb5434ec7a53985becea7b23c3
Reviewed-on: https://go-review.googlesource.com/c/net/+/355649
Trust: Damien Neil <dneil@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/http2/transport_test.go b/http2/transport_test.go
index 322a4c4..7650046 100644
--- a/http2/transport_test.go
+++ b/http2/transport_test.go
@@ -934,6 +934,7 @@
}
ct.server = func() error {
ct.greet()
+ defer close(recvLen)
var buf bytes.Buffer
enc := hpack.NewEncoder(&buf)
var dataRecv int64
@@ -984,7 +985,7 @@
dataRecv += int64(dataLen)
if !closed && ((status != 200 && dataRecv > 0) ||
- (status == 200 && dataRecv == bodySize)) {
+ (status == 200 && f.StreamEnded())) {
closed = true
if err := ct.fr.WriteData(f.StreamID, true, nil); err != nil {
return err