diff options
author | tedli <lizhen@outlook.jp> | 2019-12-14 16:45:35 +0800 |
---|---|---|
committer | Erik Dubbelboer <erik@dubbelboer.com> | 2019-12-14 09:45:35 +0100 |
commit | 6a8a72ac18c733180475fac010a0a2ba9690dfcc (patch) | |
tree | f73b0eec9c66c281b8e600f8663be1b08ef156cf /header_test.go | |
parent | Only show master branch on travis-ci (diff) | |
download | fasthttp-6a8a72ac18c733180475fac010a0a2ba9690dfcc.tar.gz fasthttp-6a8a72ac18c733180475fac010a0a2ba9690dfcc.tar.bz2 fasthttp-6a8a72ac18c733180475fac010a0a2ba9690dfcc.zip |
Diffstat (limited to 'header_test.go')
-rw-r--r-- | header_test.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/header_test.go b/header_test.go index 3debd97..6f3aa0f 100644 --- a/header_test.go +++ b/header_test.go @@ -6,11 +6,49 @@ import ( "fmt" "io" "io/ioutil" + "net/http" "reflect" "strings" "testing" ) +func TestResponseHeaderMultiLineValue(t *testing.T) { + s := "HTTP/1.1 200 OK\r\n" + + "EmptyValue1:\r\n" + + "Content-Type: foo/bar;\r\n\tnewline;\r\n another/newline\r\n" + // the '\t' will be kept, won't be removed + "Foo: Bar\r\n" + + "Multi-Line: one;\r\n two\r\n" + + "Values: v1;\r\n v2;\r\n v3; v4\r\n" + + "\r\n" + expectContentType := "foo/bar;\tnewline; another/newline" + // net/http not only remove "\r\n" but also replace \t to space + expectNetHttpContentType := "foo/bar; newline; another/newline" + expectMultiLine := "one; two" + header := new(ResponseHeader) + _, err := header.parse([]byte(s)) + if err != nil { + t.Fatalf("parse headers with multi-line values failed, %s", err) + } + gotContentType := header.Peek("Content-Type") + if string(gotContentType) != expectContentType { + t.Fatalf("unexpected content-type: %q. Expecting %q", gotContentType, expectContentType) + } + gotMultiLine := header.Peek("Multi-Line") + if string(gotMultiLine) != expectMultiLine { + t.Fatalf("unexpected multi-line: %q. Expecting %q", gotMultiLine, expectMultiLine) + } + // ensure behave same as net/http + response, err := http.ReadResponse(bufio.NewReader(strings.NewReader(s)), nil) + if err != nil { + t.Fatalf("parse response using net/http failed, %s", err) + } + gotNetHttpContentType := response.Header.Get("Content-Type") + if gotNetHttpContentType != expectNetHttpContentType { + t.Fatalf("unexpected content-type (net/http): %q. Expecting %q", + gotNetHttpContentType, expectNetHttpContentType) + } +} + func TestResponseHeaderEmptyValueFromHeader(t *testing.T) { t.Parallel() |