...

Source file src/github.com/gin-gonic/contrib/gzip/gzip_test.go

Documentation: github.com/gin-gonic/contrib/gzip

     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