...
1 package httpx
2
3 import (
4 "bytes"
5 gzip2 "compress/gzip"
6 "encoding/json"
7 "net/http"
8 "testing"
9
10 "github.com/gobuffalo/httptest"
11 "github.com/julienschmidt/httprouter"
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/require"
14 "github.com/urfave/negroni"
15 )
16
17 func makeRequest(t *testing.T, data string, ts *httptest.Server) {
18 var buf bytes.Buffer
19 gzip := gzip2.NewWriter(&buf)
20
21 _, err := gzip.Write([]byte(data))
22 require.NoError(t, err)
23 require.NoError(t, gzip.Close())
24
25 c := http.Client{}
26 req, err := http.NewRequest("POST", ts.URL, &buf)
27 req.Header.Set("Content-Encoding", "gzip")
28 require.NoError(t, err)
29 res, err := c.Do(req)
30 require.NoError(t, err)
31 res.Body.Close()
32 assert.EqualValues(t, http.StatusNoContent, res.StatusCode)
33 }
34
35 func TestGZipServer(t *testing.T) {
36 router := httprouter.New()
37 router.POST("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
38 var f json.RawMessage
39 require.NoError(t, json.NewDecoder(r.Body).Decode(&f))
40 t.Logf("%s", f)
41 w.WriteHeader(http.StatusNoContent)
42 })
43 n := negroni.New(NewCompressionRequestReader(func(w http.ResponseWriter, r *http.Request, err error) {
44 require.NoError(t, err)
45 }))
46 n.UseHandler(router)
47 ts := httptest.NewServer(n)
48 defer ts.Close()
49
50 makeRequest(t, "true", ts)
51 }
52
View as plain text