gzip_test.go 1.9 KB

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