github.com/icyphox/x@v0.0.355-0.20220311094250-029bd783e8b8/httpx/gzip_server_test.go (about) 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 }