mirror of
https://github.com/gofiber/fiber.git
synced 2025-02-21 20:33:08 +00:00
173 lines
5.0 KiB
Go
173 lines
5.0 KiB
Go
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http/httptest"
|
|
"os"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber"
|
|
"github.com/gofiber/utils"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
// 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) {
|
|
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))
|
|
}
|
|
|
|
// 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) {
|
|
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, 200, 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))
|
|
}
|
|
|
|
// go test -run Test_Middleware_Compress_With_Config
|
|
func Test_Middleware_Compress_With_Config(t *testing.T) {
|
|
app := fiber.New()
|
|
|
|
app.Use(Compress(CompressConfig{}))
|
|
|
|
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))
|
|
}
|
|
|
|
// go test -run Test_Middleware_Compress_Level
|
|
func Test_Middleware_Compress_Level(t *testing.T) {
|
|
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) {
|
|
app := fiber.New()
|
|
|
|
app.Use(Compress(func(c *fiber.Ctx) bool { return true }))
|
|
|
|
app.Get("/", func(c *fiber.Ctx) {
|
|
c.SendFile(compressFilePath(CompressLevelDefault), true)
|
|
})
|
|
|
|
req := httptest.NewRequest("GET", "/", 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, "", resp.Header.Get(fiber.HeaderContentEncoding))
|
|
utils.AssertEqual(t, fiber.MIMETextPlainCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
|
|
}
|
|
|
|
// go test -run Test_Middleware_Compress_Panic
|
|
func Test_Middleware_Compress_Panic(t *testing.T) {
|
|
defer func() {
|
|
utils.AssertEqual(t,
|
|
"Compress: the following option types are allowed: int, func(*fiber.Ctx) bool, CompressConfig",
|
|
fmt.Sprintf("%s", recover()))
|
|
}()
|
|
|
|
Compress("invalid")
|
|
}
|
|
|
|
// 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) {
|
|
c.SendFile(compressFilePath(CompressLevelDefault), true)
|
|
})
|
|
handler := app.Handler()
|
|
|
|
c := &fasthttp.RequestCtx{}
|
|
c.Request.SetRequestURI("/")
|
|
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
handler(c)
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|