1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-24 05:43:57 +00:00
fiber/middleware/compress_test.go

162 lines
4.7 KiB
Go
Raw Normal View History

2020-06-06 07:27:01 +02:00
package middleware
import (
2020-07-07 17:00:21 +08:00
"fmt"
2020-06-06 07:27:01 +02:00
"net/http/httptest"
2020-06-08 05:48:40 +02:00
"os"
2020-07-07 17:00:21 +08:00
"strconv"
2020-06-06 07:27:01 +02:00
"testing"
"github.com/gofiber/fiber"
"github.com/gofiber/utils"
2020-06-30 00:50:50 +02:00
"github.com/valyala/fasthttp"
2020-06-06 07:27:01 +02:00
)
// go test -run Test_Middleware_Compress
func Test_Middleware_Compress(t *testing.T) {
app := fiber.New()
app.Use(Compress())
app.Get("/", func(c *fiber.Ctx) {
2020-07-07 17:00:21 +08:00
c.SendFile(compressFilePath(CompressLevelDefault), true)
2020-06-06 07:27:01 +02:00
})
req := httptest.NewRequest("GET", "/", nil)
req.Header.Set(fiber.HeaderAcceptEncoding, "gzip")
resp, err := app.Test(req)
utils.AssertEqual(t, nil, err, "app.Test(req)")
2020-07-07 17:00:21 +08:00
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode, "Status code")
2020-06-06 07:27:01 +02:00
utils.AssertEqual(t, "gzip", resp.Header.Get(fiber.HeaderContentEncoding))
utils.AssertEqual(t, fiber.MIMETextPlainCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
2020-07-07 17:00:21 +08:00
os.Remove(compressFilePath(CompressLevelDefault, true))
2020-06-06 07:27:01 +02:00
}
2020-06-30 00:50:50 +02:00
2020-07-04 08:30:18 +02:00
// go test -run Test_Middleware_Compress_Config
func Test_Middleware_Compress_Config(t *testing.T) {
app := fiber.New()
app.Use(Compress(CompressConfig{
Level: CompressLevelDefault,
}))
app.Get("/", func(c *fiber.Ctx) {
2020-07-07 17:00:21 +08:00
c.SendFile(compressFilePath(CompressLevelDefault), true)
2020-07-04 08:30:18 +02:00
})
req := httptest.NewRequest("GET", "/", nil)
req.Header.Set(fiber.HeaderAcceptEncoding, "gzip")
resp, err := app.Test(req)
utils.AssertEqual(t, nil, err, "app.Test(req)")
utils.AssertEqual(t, 200, resp.StatusCode, "Status code")
utils.AssertEqual(t, "gzip", resp.Header.Get(fiber.HeaderContentEncoding))
utils.AssertEqual(t, fiber.MIMETextPlainCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
2020-07-07 17:00:21 +08:00
os.Remove(compressFilePath(CompressLevelDefault, true))
}
// go test -run Test_Middleware_Compress_With_Config
func Test_Middleware_Compress_With_Config(t *testing.T) {
app := fiber.New()
2020-07-08 21:13:03 +02:00
app.Use(Compress(CompressConfig{}))
2020-07-07 17:00:21 +08:00
app.Get("/", func(c *fiber.Ctx) {
c.SendFile(compressFilePath(CompressLevelDefault), true)
})
req := httptest.NewRequest("GET", "/", nil)
req.Header.Set(fiber.HeaderAcceptEncoding, "gzip")
resp, err := app.Test(req)
utils.AssertEqual(t, nil, err, "app.Test(req)")
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "gzip", resp.Header.Get(fiber.HeaderContentEncoding))
utils.AssertEqual(t, fiber.MIMETextPlainCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
os.Remove(compressFilePath(CompressLevelDefault, true))
2020-07-04 08:30:18 +02:00
}
// go test -run Test_Middleware_Compress_Level
func Test_Middleware_Compress_Level(t *testing.T) {
2020-07-07 17:00:21 +08:00
t.Parallel()
levels := []int{
CompressLevelDisabled,
CompressLevelDefault,
CompressLevelBestSpeed,
CompressLevelBestCompression,
}
app := fiber.New()
for _, level := range levels {
app.Get("/:level", Compress(level), func(c *fiber.Ctx) {
c.SendFile(compressFilePath(c.Params("level")), true)
})
}
for _, level := range levels {
name := strconv.FormatInt(int64(level), 10)
t.Run(name, func(t *testing.T) {
target := fmt.Sprintf("/%d", level)
req := httptest.NewRequest("GET", target, nil)
req.Header.Set(fiber.HeaderAcceptEncoding, "br")
resp, err := app.Test(req, 3000)
utils.AssertEqual(t, nil, err, "app.Test(req)")
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "br", resp.Header.Get(fiber.HeaderContentEncoding))
utils.AssertEqual(t, fiber.MIMETextPlainCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
os.Remove(compressFilePath(level, true))
})
}
}
// go test -run Test_Middleware_Compress_Skip
func Test_Middleware_Compress_Skip(t *testing.T) {
2020-07-04 08:30:18 +02:00
app := fiber.New()
2020-07-07 17:00:21 +08:00
app.Use(Compress(func(c *fiber.Ctx) bool { return true }))
2020-07-04 08:30:18 +02:00
app.Get("/", func(c *fiber.Ctx) {
2020-07-07 17:00:21 +08:00
c.SendFile(compressFilePath(CompressLevelDefault), true)
2020-07-04 08:30:18 +02:00
})
req := httptest.NewRequest("GET", "/", nil)
req.Header.Set(fiber.HeaderAcceptEncoding, "br")
2020-07-04 08:43:56 +02:00
resp, err := app.Test(req, 3000)
2020-07-04 08:30:18 +02:00
utils.AssertEqual(t, nil, err, "app.Test(req)")
2020-07-07 17:00:21 +08:00
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "", resp.Header.Get(fiber.HeaderContentEncoding))
2020-07-04 08:30:18 +02:00
utils.AssertEqual(t, fiber.MIMETextPlainCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
}
2020-06-30 00:50:50 +02:00
// go test -v -run=^$ -bench=Benchmark_Middleware_Compress -benchmem -count=4
func Benchmark_Middleware_Compress(b *testing.B) {
app := fiber.New()
app.Use(Compress())
app.Get("/", func(c *fiber.Ctx) {
2020-07-07 17:00:21 +08:00
c.SendFile(compressFilePath(CompressLevelDefault), true)
2020-06-30 00:50:50 +02:00
})
handler := app.Handler()
c := &fasthttp.RequestCtx{}
c.Request.SetRequestURI("/")
b.ReportAllocs()
b.ResetTimer()
for n := 0; n < b.N; n++ {
handler(c)
}
}
2020-07-07 17:00:21 +08:00
func compressFilePath(level interface{}, gz ...bool) string {
filePath := fmt.Sprintf("./testdata/compress_level_%v.txt", level)
if len(gz) > 0 && gz[0] {
filePath += ".fiber.gz"
}
return filePath
}