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