gzip_test.go 2.0 KB

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