package gzip import ( "compress/gzip" "io/ioutil" "net/http" "net/http/httptest" "strconv" "testing" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" ) const ( testResponse = "Gzip Test Response " ) func newServer() *gin.Engine { router := gin.Default() router.Use(Gzip(DefaultCompression)) router.GET("/", func(c *gin.Context) { c.Header("Content-Length", strconv.Itoa(len(testResponse))) c.String(200, testResponse) }) return router } func TestGzip(t *testing.T) { req, _ := http.NewRequest("GET", "/", nil) req.Header.Add("Accept-Encoding", "gzip") w := httptest.NewRecorder() r := newServer() r.ServeHTTP(w, req) assert.Equal(t, w.Code, 200) assert.Equal(t, w.Header().Get("Content-Encoding"), "gzip") assert.Equal(t, w.Header().Get("Vary"), "Accept-Encoding") assert.Equal(t, w.Header().Get("Content-Length"), "0") assert.NotEqual(t, w.Body.Len(), 19) gr, err := gzip.NewReader(w.Body) assert.NoError(t, err) defer gr.Close() body, _ := ioutil.ReadAll(gr) assert.Equal(t, string(body), testResponse) } func TestGzipPNG(t *testing.T) { req, _ := http.NewRequest("GET", "/image.png", nil) req.Header.Add("Accept-Encoding", "gzip") router := gin.New() router.Use(Gzip(DefaultCompression)) router.GET("/image.png", func(c *gin.Context) { c.String(200, "this is a PNG!") }) w := httptest.NewRecorder() router.ServeHTTP(w, req) assert.Equal(t, w.Code, 200) assert.Equal(t, w.Header().Get("Content-Encoding"), "") assert.Equal(t, w.Header().Get("Vary"), "") assert.Equal(t, w.Body.String(), "this is a PNG!") } func TestNoGzip(t *testing.T) { req, _ := http.NewRequest("GET", "/", nil) w := httptest.NewRecorder() r := newServer() r.ServeHTTP(w, req) assert.Equal(t, w.Code, 200) assert.Equal(t, w.Header().Get("Content-Encoding"), "") assert.Equal(t, w.Header().Get("Content-Length"), "19") assert.Equal(t, w.Body.String(), testResponse) }