mirror of
https://github.com/golang/go
synced 2024-09-29 20:24:34 -06:00
net/http: update bundled http2 and add tests for two fixed issues
Updates to http2's golang.org/cl/17590 (git rev 1796f9b8b) Fixes #13495 Fixes #13532 Change-Id: I9b95ab438e1d895c75d031d8fcf2605921182a5e Reviewed-on: https://go-review.googlesource.com/17591 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
1092257f7e
commit
3d3d6eb79d
@ -121,15 +121,17 @@ func testChunkedResponseHeaders(t *testing.T, h2 bool) {
|
||||
}
|
||||
}
|
||||
|
||||
type reqFunc func(c *Client, url string) (*Response, error)
|
||||
|
||||
// h12Compare is a test that compares HTTP/1 and HTTP/2 behavior
|
||||
// against each other.
|
||||
type h12Compare struct {
|
||||
Handler func(ResponseWriter, *Request) // required
|
||||
ReqFunc func(c *Client, url string) (*Response, error) // optional
|
||||
CheckResponse func(proto string, res *Response) // optional
|
||||
Handler func(ResponseWriter, *Request) // required
|
||||
ReqFunc reqFunc // optional
|
||||
CheckResponse func(proto string, res *Response) // optional
|
||||
}
|
||||
|
||||
func (tt h12Compare) reqFunc() func(c *Client, url string) (*Response, error) {
|
||||
func (tt h12Compare) reqFunc() reqFunc {
|
||||
if tt.ReqFunc == nil {
|
||||
return (*Client).Get
|
||||
}
|
||||
@ -213,6 +215,36 @@ func (tt h12Compare) normalizeRes(t *testing.T, res *Response, wantProto string)
|
||||
}
|
||||
}
|
||||
|
||||
// Issue 13532
|
||||
func TestH12_HeadContentLengthNoBody(t *testing.T) {
|
||||
h12Compare{
|
||||
ReqFunc: (*Client).Head,
|
||||
Handler: func(w ResponseWriter, r *Request) {
|
||||
},
|
||||
}.run(t)
|
||||
}
|
||||
|
||||
func TestH12_HeadContentLengthSmallBody(t *testing.T) {
|
||||
h12Compare{
|
||||
ReqFunc: (*Client).Head,
|
||||
Handler: func(w ResponseWriter, r *Request) {
|
||||
io.WriteString(w, "small")
|
||||
},
|
||||
}.run(t)
|
||||
}
|
||||
|
||||
func TestH12_HeadContentLengthLargeBody(t *testing.T) {
|
||||
h12Compare{
|
||||
ReqFunc: (*Client).Head,
|
||||
Handler: func(w ResponseWriter, r *Request) {
|
||||
chunk := strings.Repeat("x", 512<<10)
|
||||
for i := 0; i < 10; i++ {
|
||||
io.WriteString(w, chunk)
|
||||
}
|
||||
},
|
||||
}.run(t)
|
||||
}
|
||||
|
||||
func TestH12_200NoBody(t *testing.T) {
|
||||
h12Compare{Handler: func(w ResponseWriter, r *Request) {}}.run(t)
|
||||
}
|
||||
@ -371,3 +403,12 @@ func test304Responses(t *testing.T, h2 bool) {
|
||||
t.Errorf("got unexpected body %q", string(body))
|
||||
}
|
||||
}
|
||||
|
||||
func TestH12_ServerEmptyContentLength(t *testing.T) {
|
||||
h12Compare{
|
||||
Handler: func(w ResponseWriter, r *Request) {
|
||||
w.Header()["Content-Type"] = []string{""}
|
||||
io.WriteString(w, "<html><body>hi</body></html>")
|
||||
},
|
||||
}.run(t)
|
||||
}
|
||||
|
@ -3562,10 +3562,11 @@ func (rws *http2responseWriterState) writeChunk(p []byte) (n int, err error) {
|
||||
clen = ""
|
||||
}
|
||||
}
|
||||
if clen == "" && rws.handlerDone && http2bodyAllowedForStatus(rws.status) {
|
||||
if clen == "" && rws.handlerDone && http2bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) {
|
||||
clen = strconv.Itoa(len(p))
|
||||
}
|
||||
if rws.snapHeader.Get("Content-Type") == "" && http2bodyAllowedForStatus(rws.status) {
|
||||
_, hasContentType := rws.snapHeader["Content-Type"]
|
||||
if !hasContentType && http2bodyAllowedForStatus(rws.status) {
|
||||
ctype = DetectContentType(p)
|
||||
}
|
||||
var date string
|
||||
|
Loading…
Reference in New Issue
Block a user