82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
|
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"), "")
|
||
|
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)
|
||
|
}
|