Skip to content

Commit

Permalink
http2: deflake TestTransportReqBodyAfterResponse_200
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Bryan C. Mills <[email protected]>
  • Loading branch information
neild committed Oct 14, 2021
1 parent e13a265 commit 2b766c0
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion http2/transport_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,7 @@ func testTransportReqBodyAfterResponse(t *testing.T, status int) {
}
ct.server = func() error {
ct.greet()
defer close(recvLen)
var buf bytes.Buffer
enc := hpack.NewEncoder(&buf)
var dataRecv int64
Expand Down Expand Up @@ -984,7 +985,7 @@ func testTransportReqBodyAfterResponse(t *testing.T, status int) {
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
Expand Down

0 comments on commit 2b766c0

Please sign in to comment.