1 package gzip
2
3 import (
4 "compress/gzip"
5 "io/ioutil"
6 "net/http"
7 "net/http/httptest"
8 "strconv"
9 "testing"
10
11 "github.com/gin-gonic/gin"
12 "github.com/stretchr/testify/assert"
13 )
14
15 const (
16 testResponse = "Gzip Test Response "
17 )
18
19 func newServer() *gin.Engine {
20 router := gin.Default()
21 router.Use(Gzip(DefaultCompression))
22 router.GET("/", func(c *gin.Context) {
23 c.Header("Content-Length", strconv.Itoa(len(testResponse)))
24 c.String(200, testResponse)
25 })
26 return router
27 }
28
29 func TestGzip(t *testing.T) {
30 req, _ := http.NewRequest("GET", "/", nil)
31 req.Header.Add("Accept-Encoding", "gzip")
32
33 w := httptest.NewRecorder()
34 r := newServer()
35 r.ServeHTTP(w, req)
36
37 assert.Equal(t, w.Code, 200)
38 assert.Equal(t, w.Header().Get("Content-Encoding"), "gzip")
39 assert.Equal(t, w.Header().Get("Vary"), "Accept-Encoding")
40 assert.Equal(t, w.Header().Get("Content-Length"), "0")
41 assert.NotEqual(t, w.Body.Len(), 19)
42
43 gr, err := gzip.NewReader(w.Body)
44 assert.NoError(t, err)
45 defer gr.Close()
46
47 body, _ := ioutil.ReadAll(gr)
48 assert.Equal(t, string(body), testResponse)
49 }
50
51 func TestGzipPNG(t *testing.T) {
52 req, _ := http.NewRequest("GET", "/image.png", nil)
53 req.Header.Add("Accept-Encoding", "gzip")
54
55 router := gin.New()
56 router.Use(Gzip(DefaultCompression))
57 router.GET("/image.png", func(c *gin.Context) {
58 c.String(200, "this is a PNG!")
59 })
60
61 w := httptest.NewRecorder()
62 router.ServeHTTP(w, req)
63
64 assert.Equal(t, w.Code, 200)
65 assert.Equal(t, w.Header().Get("Content-Encoding"), "")
66 assert.Equal(t, w.Header().Get("Vary"), "")
67 assert.Equal(t, w.Body.String(), "this is a PNG!")
68 }
69
70 func TestNoGzip(t *testing.T) {
71 req, _ := http.NewRequest("GET", "/", nil)
72
73 w := httptest.NewRecorder()
74 r := newServer()
75 r.ServeHTTP(w, req)
76
77 assert.Equal(t, w.Code, 200)
78 assert.Equal(t, w.Header().Get("Content-Encoding"), "")
79 assert.Equal(t, w.Header().Get("Content-Length"), "19")
80 assert.Equal(t, w.Body.String(), testResponse)
81 }
82
View as plain text