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