• Tom Bergan's avatar
    http2: fix flake in net/http's TestCloseIdleConnections_h2 · 894f8ed5
    Tom Bergan authored
    That test makes a request with no body and receives a response with no
    body. The client will receive a HEADERS frame with END_STREAM. The test
    assumes that the stream is closed immediately on receipt of that HEADERS
    frame, i.e., before RoundTrip returns.
    
    This assumption was broken by https://golang.org/cl/70510, which made
    stream closure asynchronous w.r.t. RoundTrip.
    
    To fix TestCloseIdleConnections_h2 while preserving the intent of CL
    70510, we break processHeaders into two cases:
    
    1. The request has a body. In this case, END_STREAM puts the stream in a
       half-closed-remote state, which means the connection is not
       necessarily idle when RoundTrip returns (since the request body is
       still being uploaded). In this case, we preserve the behavior from CL
       70510.
    
    2. The request does not have a body. In this case, END_STREAM puts the
       stream in a closed state and we must close the stream before
       returning from RoundTrip.
    
    The following command passes when this CL is merged into net/http:
    go test -count=100000 -run=TestCloseIdleConnections_h2 net/http
    
    Updates golang/go#22413
    
    Change-Id: Iff2a0685a636ad51bff380e86a42b0d0eea984e5
    Reviewed-on: https://go-review.googlesource.com/80139
    Run-TryBot: Tom Bergan <tombergan@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    894f8ed5
Name
Last commit
Last update
..
h2demo Loading commit data...
h2i Loading commit data...
hpack Loading commit data...
testdata Loading commit data...
.gitignore Loading commit data...
Dockerfile Loading commit data...
Makefile Loading commit data...
README Loading commit data...
ciphers.go Loading commit data...
ciphers_test.go Loading commit data...
client_conn_pool.go Loading commit data...
configure_transport.go Loading commit data...
databuffer.go Loading commit data...
databuffer_test.go Loading commit data...
errors.go Loading commit data...
errors_test.go Loading commit data...
flow.go Loading commit data...
flow_test.go Loading commit data...
frame.go Loading commit data...
frame_test.go Loading commit data...
go16.go Loading commit data...
go17.go Loading commit data...
go17_not18.go Loading commit data...
go18.go Loading commit data...
go18_test.go Loading commit data...
go19.go Loading commit data...
go19_test.go Loading commit data...
gotrack.go Loading commit data...
gotrack_test.go Loading commit data...
headermap.go Loading commit data...
http2.go Loading commit data...
http2_test.go Loading commit data...
not_go16.go Loading commit data...
not_go17.go Loading commit data...
not_go18.go Loading commit data...
not_go19.go Loading commit data...
pipe.go Loading commit data...
pipe_test.go Loading commit data...
server.go Loading commit data...
server_push_test.go Loading commit data...
server_test.go Loading commit data...
transport.go Loading commit data...
transport_test.go Loading commit data...
write.go Loading commit data...
writesched.go Loading commit data...
writesched_priority.go Loading commit data...
writesched_priority_test.go Loading commit data...
writesched_random.go Loading commit data...
writesched_random_test.go Loading commit data...
writesched_test.go Loading commit data...
z_spec_test.go Loading commit data...