Commit 3d3d6eb7 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

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/17591Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
parent 1092257f
......@@ -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
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment