aboutsummaryrefslogtreecommitdiff
path: root/fs_test.go
diff options
context:
space:
mode:
authorGravatar hex0x00 <68422816+hex0x00@users.noreply.github.com> 2020-09-28 10:14:28 -0500
committerGravatar GitHub <noreply@github.com> 2020-09-28 17:14:28 +0200
commit805af0ee73bd914c4ee3ee8eccf400edaa0ccfb7 (patch)
tree9d09b0038a4b1ee32edc2666ae12e31d450592da /fs_test.go
parentAdd Client.CloseIdleConnections() (diff)
downloadfasthttp-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.go75
1 files changed, 66 insertions, 9 deletions
diff --git a/fs_test.go b/fs_test.go
index 7f85649..8465ff8 100644
--- a/fs_test.go
+++ b/fs_test.go
@@ -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) {