diff options
author | hex0x00 <68422816+hex0x00@users.noreply.github.com> | 2020-09-28 10:14:28 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-28 17:14:28 +0200 |
commit | 805af0ee73bd914c4ee3ee8eccf400edaa0ccfb7 (patch) | |
tree | 9d09b0038a4b1ee32edc2666ae12e31d450592da /fs_test.go | |
parent | Add Client.CloseIdleConnections() (diff) | |
download | fasthttp-805af0ee73bd914c4ee3ee8eccf400edaa0ccfb7.tar.gz fasthttp-805af0ee73bd914c4ee3ee8eccf400edaa0ccfb7.tar.bz2 fasthttp-805af0ee73bd914c4ee3ee8eccf400edaa0ccfb7.zip |
Brotli support in FS handler. (#880)
* Add files via upload
* Update fs.go
* Add files via upload
* Update fs_test.go
Diffstat (limited to 'fs_test.go')
-rw-r--r-- | fs_test.go | 75 |
1 files changed, 66 insertions, 9 deletions
@@ -201,14 +201,15 @@ func TestServeFileCompressed(t *testing.T) { t.Parallel() var ctx RequestCtx - var req Request - req.SetRequestURI("http://foobar.com/baz") - req.Header.Set(HeaderAcceptEncoding, "gzip") - ctx.Init(&req, nil, nil) + ctx.Init(&Request{}, nil, nil) + + var resp Response + // request compressed gzip file + ctx.Request.SetRequestURI("http://foobar.com/baz") + ctx.Request.Header.Set(HeaderAcceptEncoding, "gzip") ServeFile(&ctx, "fs.go") - var resp Response s := ctx.Response.String() br := bufio.NewReader(bytes.NewBufferString(s)) if err := resp.Read(br); err != nil { @@ -231,6 +232,35 @@ func TestServeFileCompressed(t *testing.T) { if !bytes.Equal(body, expectedBody) { t.Fatalf("unexpected body %q. expecting %q", body, expectedBody) } + + // request compressed brotli file + ctx.Request.Reset() + ctx.Request.SetRequestURI("http://foobar.com/baz") + ctx.Request.Header.Set(HeaderAcceptEncoding, "br") + ServeFile(&ctx, "fs.go") + + s = ctx.Response.String() + br = bufio.NewReader(bytes.NewBufferString(s)) + if err = resp.Read(br); err != nil { + t.Fatalf("unexpected error: %s", err) + } + + ce = resp.Header.Peek(HeaderContentEncoding) + if string(ce) != "br" { + t.Fatalf("Unexpected 'Content-Encoding' %q. Expecting %q", ce, "br") + } + + body, err = resp.BodyUnbrotli() + if err != nil { + t.Fatalf("unexpected error: %s", err) + } + expectedBody, err = getFileContents("/fs.go") + if err != nil { + t.Fatalf("unexpected error: %s", err) + } + if !bytes.Equal(body, expectedBody) { + t.Fatalf("unexpected body %q. expecting %q", body, expectedBody) + } } func TestServeFileUncompressed(t *testing.T) { @@ -442,6 +472,7 @@ func TestFSCompressConcurrent(t *testing.T) { Root: ".", GenerateIndexPages: true, Compress: true, + CompressBrotli: true, } h := fs.NewRequestHandler() @@ -461,7 +492,7 @@ func TestFSCompressConcurrent(t *testing.T) { for i := 0; i < concurrency; i++ { select { case <-ch: - case <-time.After(time.Second): + case <-time.After(time.Second * 2): t.Fatalf("timeout") } } @@ -474,6 +505,7 @@ func TestFSCompressSingleThread(t *testing.T) { Root: ".", GenerateIndexPages: true, Compress: true, + CompressBrotli: true, } h := fs.NewRequestHandler() @@ -486,12 +518,12 @@ func testFSCompress(t *testing.T, h RequestHandler, filePath string) { var ctx RequestCtx ctx.Init(&Request{}, nil, nil) + var resp Response + // request uncompressed file ctx.Request.Reset() ctx.Request.SetRequestURI(filePath) h(&ctx) - - var resp Response s := ctx.Response.String() br := bufio.NewReader(bytes.NewBufferString(s)) if err := resp.Read(br); err != nil { @@ -506,7 +538,7 @@ func testFSCompress(t *testing.T, h RequestHandler, filePath string) { } body := string(resp.Body()) - // request compressed file + // request compressed gzip file ctx.Request.Reset() ctx.Request.SetRequestURI(filePath) ctx.Request.Header.Set(HeaderAcceptEncoding, "gzip") @@ -530,6 +562,31 @@ func testFSCompress(t *testing.T, h RequestHandler, filePath string) { if string(zbody) != body { t.Fatalf("unexpected body len=%d. Expected len=%d. FilePath=%q", len(zbody), len(body), filePath) } + + // request compressed brotli file + ctx.Request.Reset() + ctx.Request.SetRequestURI(filePath) + ctx.Request.Header.Set(HeaderAcceptEncoding, "br") + h(&ctx) + s = ctx.Response.String() + br = bufio.NewReader(bytes.NewBufferString(s)) + if err = resp.Read(br); err != nil { + t.Fatalf("unexpected error: %s. filePath=%q", err, filePath) + } + if resp.StatusCode() != StatusOK { + t.Fatalf("unexpected status code: %d. Expecting %d. filePath=%q", resp.StatusCode(), StatusOK, filePath) + } + ce = resp.Header.Peek(HeaderContentEncoding) + if string(ce) != "br" { + t.Fatalf("unexpected content-encoding %q. Expecting %q. filePath=%q", ce, "br", filePath) + } + zbody, err = resp.BodyUnbrotli() + if err != nil { + t.Fatalf("unexpected error when unbrotling response body: %s. filePath=%q", err, filePath) + } + if string(zbody) != body { + t.Fatalf("unexpected body len=%d. Expected len=%d. FilePath=%q", len(zbody), len(body), filePath) + } } func TestFileLock(t *testing.T) { |