github.com/gofiber/fiber/v2@v2.47.0/middleware/compress/compress_test.go (about) 1 package compress 2 3 import ( 4 "errors" 5 "fmt" 6 "io" 7 "net/http/httptest" 8 "os" 9 "testing" 10 11 "github.com/gofiber/fiber/v2" 12 "github.com/gofiber/fiber/v2/utils" 13 ) 14 15 var filedata []byte 16 17 func init() { 18 dat, err := os.ReadFile("../../.github/README.md") 19 if err != nil { 20 panic(err) 21 } 22 filedata = dat 23 } 24 25 // go test -run Test_Compress_Gzip 26 func Test_Compress_Gzip(t *testing.T) { 27 t.Parallel() 28 app := fiber.New() 29 30 app.Use(New()) 31 32 app.Get("/", func(c *fiber.Ctx) error { 33 c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8) 34 return c.Send(filedata) 35 }) 36 37 req := httptest.NewRequest(fiber.MethodGet, "/", nil) 38 req.Header.Set("Accept-Encoding", "gzip") 39 40 resp, err := app.Test(req) 41 utils.AssertEqual(t, nil, err, "app.Test(req)") 42 utils.AssertEqual(t, 200, resp.StatusCode, "Status code") 43 utils.AssertEqual(t, "gzip", resp.Header.Get(fiber.HeaderContentEncoding)) 44 45 // Validate that the file size has shrunk 46 body, err := io.ReadAll(resp.Body) 47 utils.AssertEqual(t, nil, err) 48 utils.AssertEqual(t, true, len(body) < len(filedata)) 49 } 50 51 // go test -run Test_Compress_Different_Level 52 func Test_Compress_Different_Level(t *testing.T) { 53 t.Parallel() 54 levels := []Level{LevelBestSpeed, LevelBestCompression} 55 for _, level := range levels { 56 t.Run(fmt.Sprintf("level %d", level), func(t *testing.T) { 57 t.Parallel() 58 app := fiber.New() 59 60 app.Use(New(Config{Level: level})) 61 62 app.Get("/", func(c *fiber.Ctx) error { 63 c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8) 64 return c.Send(filedata) 65 }) 66 67 req := httptest.NewRequest(fiber.MethodGet, "/", nil) 68 req.Header.Set("Accept-Encoding", "gzip") 69 70 resp, err := app.Test(req) 71 utils.AssertEqual(t, nil, err, "app.Test(req)") 72 utils.AssertEqual(t, 200, resp.StatusCode, "Status code") 73 utils.AssertEqual(t, "gzip", resp.Header.Get(fiber.HeaderContentEncoding)) 74 75 // Validate that the file size has shrunk 76 body, err := io.ReadAll(resp.Body) 77 utils.AssertEqual(t, nil, err) 78 utils.AssertEqual(t, true, len(body) < len(filedata)) 79 }) 80 } 81 } 82 83 func Test_Compress_Deflate(t *testing.T) { 84 t.Parallel() 85 app := fiber.New() 86 87 app.Use(New()) 88 89 app.Get("/", func(c *fiber.Ctx) error { 90 return c.Send(filedata) 91 }) 92 93 req := httptest.NewRequest(fiber.MethodGet, "/", nil) 94 req.Header.Set("Accept-Encoding", "deflate") 95 96 resp, err := app.Test(req) 97 utils.AssertEqual(t, nil, err, "app.Test(req)") 98 utils.AssertEqual(t, 200, resp.StatusCode, "Status code") 99 utils.AssertEqual(t, "deflate", resp.Header.Get(fiber.HeaderContentEncoding)) 100 101 // Validate that the file size has shrunk 102 body, err := io.ReadAll(resp.Body) 103 utils.AssertEqual(t, nil, err) 104 utils.AssertEqual(t, true, len(body) < len(filedata)) 105 } 106 107 func Test_Compress_Brotli(t *testing.T) { 108 t.Parallel() 109 app := fiber.New() 110 111 app.Use(New()) 112 113 app.Get("/", func(c *fiber.Ctx) error { 114 return c.Send(filedata) 115 }) 116 117 req := httptest.NewRequest(fiber.MethodGet, "/", nil) 118 req.Header.Set("Accept-Encoding", "br") 119 120 resp, err := app.Test(req, 10000) 121 utils.AssertEqual(t, nil, err, "app.Test(req)") 122 utils.AssertEqual(t, 200, resp.StatusCode, "Status code") 123 utils.AssertEqual(t, "br", resp.Header.Get(fiber.HeaderContentEncoding)) 124 125 // Validate that the file size has shrunk 126 body, err := io.ReadAll(resp.Body) 127 utils.AssertEqual(t, nil, err) 128 utils.AssertEqual(t, true, len(body) < len(filedata)) 129 } 130 131 func Test_Compress_Disabled(t *testing.T) { 132 t.Parallel() 133 app := fiber.New() 134 135 app.Use(New(Config{Level: LevelDisabled})) 136 137 app.Get("/", func(c *fiber.Ctx) error { 138 return c.Send(filedata) 139 }) 140 141 req := httptest.NewRequest(fiber.MethodGet, "/", nil) 142 req.Header.Set("Accept-Encoding", "br") 143 144 resp, err := app.Test(req) 145 utils.AssertEqual(t, nil, err, "app.Test(req)") 146 utils.AssertEqual(t, 200, resp.StatusCode, "Status code") 147 utils.AssertEqual(t, "", resp.Header.Get(fiber.HeaderContentEncoding)) 148 149 // Validate the file size is not shrunk 150 body, err := io.ReadAll(resp.Body) 151 utils.AssertEqual(t, nil, err) 152 utils.AssertEqual(t, true, len(body) == len(filedata)) 153 } 154 155 func Test_Compress_Next_Error(t *testing.T) { 156 t.Parallel() 157 app := fiber.New() 158 159 app.Use(New()) 160 161 app.Get("/", func(c *fiber.Ctx) error { 162 return errors.New("next error") 163 }) 164 165 req := httptest.NewRequest(fiber.MethodGet, "/", nil) 166 req.Header.Set("Accept-Encoding", "gzip") 167 168 resp, err := app.Test(req) 169 utils.AssertEqual(t, nil, err, "app.Test(req)") 170 utils.AssertEqual(t, 500, resp.StatusCode, "Status code") 171 utils.AssertEqual(t, "", resp.Header.Get(fiber.HeaderContentEncoding)) 172 173 body, err := io.ReadAll(resp.Body) 174 utils.AssertEqual(t, nil, err) 175 utils.AssertEqual(t, "next error", string(body)) 176 } 177 178 // go test -run Test_Compress_Next 179 func Test_Compress_Next(t *testing.T) { 180 t.Parallel() 181 app := fiber.New() 182 app.Use(New(Config{ 183 Next: func(_ *fiber.Ctx) bool { 184 return true 185 }, 186 })) 187 188 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) 189 utils.AssertEqual(t, nil, err) 190 utils.AssertEqual(t, fiber.StatusNotFound, resp.StatusCode) 191 }