|
- package handlers
-
- import (
- "net/http"
- "net/http/httptest"
- "testing"
- )
-
- func TestGzipped(t *testing.T) {
- body := "This is the body"
- headers := []string{"gzip", "*", "gzip, deflate, sdch"}
-
- h := GZIPHandler(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "text/plain")
- _, err := w.Write([]byte(body))
- if err != nil {
- panic(err)
- }
- }), nil)
- s := httptest.NewServer(h)
- defer s.Close()
-
- for _, hdr := range headers {
- t.Logf("running with Accept-Encoding header %s", hdr)
- req, err := http.NewRequest("GET", s.URL, nil)
- if err != nil {
- panic(err)
- }
- req.Header.Set("Accept-Encoding", hdr)
- res, err := http.DefaultClient.Do(req)
- if err != nil {
- panic(err)
- }
- assertStatus(http.StatusOK, res.StatusCode, t)
- assertHeader("Content-Encoding", "gzip", res, t)
- assertGzippedBody([]byte(body), res, t)
- }
- }
-
- func TestNoGzip(t *testing.T) {
- body := "This is the body"
-
- h := GZIPHandler(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "text/plain")
- _, err := w.Write([]byte(body))
- if err != nil {
- panic(err)
- }
- }), nil)
- s := httptest.NewServer(h)
- defer s.Close()
-
- req, err := http.NewRequest("GET", s.URL, nil)
- if err != nil {
- panic(err)
- }
- res, err := http.DefaultClient.Do(req)
- if err != nil {
- panic(err)
- }
- assertStatus(http.StatusOK, res.StatusCode, t)
- assertHeader("Content-Encoding", "", res, t)
- assertBody([]byte(body), res, t)
- }
-
- func TestGzipOuterPanic(t *testing.T) {
- msg := "ko"
-
- h := PanicHandler(
- GZIPHandler(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- panic(msg)
- }), nil), nil)
- s := httptest.NewServer(h)
- defer s.Close()
-
- req, err := http.NewRequest("GET", s.URL, nil)
- if err != nil {
- panic(err)
- }
- res, err := http.DefaultClient.Do(req)
- if err != nil {
- panic(err)
- }
- assertStatus(http.StatusInternalServerError, res.StatusCode, t)
- assertHeader("Content-Encoding", "", res, t)
- assertBody([]byte(msg+"\n"), res, t)
- }
-
- func TestNoGzipOnFilter(t *testing.T) {
- body := "This is the body"
-
- h := GZIPHandler(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "x/x")
- _, err := w.Write([]byte(body))
- if err != nil {
- panic(err)
- }
- }), nil)
- s := httptest.NewServer(h)
- defer s.Close()
-
- req, err := http.NewRequest("GET", s.URL, nil)
- if err != nil {
- panic(err)
- }
- req.Header.Set("Accept-Encoding", "gzip")
- res, err := http.DefaultClient.Do(req)
- if err != nil {
- panic(err)
- }
- assertStatus(http.StatusOK, res.StatusCode, t)
- assertHeader("Content-Encoding", "", res, t)
- assertBody([]byte(body), res, t)
- }
-
- func TestNoGzipOnCustomFilter(t *testing.T) {
- body := "This is the body"
-
- h := GZIPHandler(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "text/plain")
- _, err := w.Write([]byte(body))
- if err != nil {
- panic(err)
- }
- }), func(w http.ResponseWriter, r *http.Request) bool {
- return false
- })
- s := httptest.NewServer(h)
- defer s.Close()
-
- req, err := http.NewRequest("GET", s.URL, nil)
- if err != nil {
- panic(err)
- }
- req.Header.Set("Accept-Encoding", "gzip")
- res, err := http.DefaultClient.Do(req)
- if err != nil {
- panic(err)
- }
- assertStatus(http.StatusOK, res.StatusCode, t)
- assertHeader("Content-Encoding", "", res, t)
- assertBody([]byte(body), res, t)
- }
-
- func TestGzipOnCustomFilter(t *testing.T) {
- body := "This is the body"
-
- h := GZIPHandler(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "x/x")
- _, err := w.Write([]byte(body))
- if err != nil {
- panic(err)
- }
- }), func(w http.ResponseWriter, r *http.Request) bool {
- return true
- })
- s := httptest.NewServer(h)
- defer s.Close()
-
- req, err := http.NewRequest("GET", s.URL, nil)
- if err != nil {
- panic(err)
- }
- req.Header.Set("Accept-Encoding", "gzip")
- res, err := http.DefaultClient.Do(req)
- if err != nil {
- panic(err)
- }
- assertStatus(http.StatusOK, res.StatusCode, t)
- assertHeader("Content-Encoding", "gzip", res, t)
- assertGzippedBody([]byte(body), res, t)
- }
|