commit 2e227088e280a42773bdfcc0e129d1e2e3d74303 Author: bel Date: Sun Jan 26 17:50:51 2020 +0000 initial commit diff --git a/gzipresponsewriter.go b/gzipresponsewriter.go new file mode 100755 index 0000000..7ac071d --- /dev/null +++ b/gzipresponsewriter.go @@ -0,0 +1,36 @@ +package gziphttp + +import ( + "compress/gzip" + "net/http" +) + +type GZipResponseWriter struct { + w http.ResponseWriter + gz *gzip.Writer +} + +func New(w http.ResponseWriter) *GZipResponseWriter { + w.Header().Add("Content-Type", "text/html") + w.Header().Add("Content-Encoding", "gzip") + return &GZipResponseWriter{ + w: w, + gz: gzip.NewWriter(w), + } +} + +func (gz *GZipResponseWriter) Header() http.Header { + return gz.w.Header() +} + +func (gz *GZipResponseWriter) WriteHeader(statusCode int) { + gz.w.WriteHeader(statusCode) +} + +func (gz *GZipResponseWriter) Write(b []byte) (int, error) { + return gz.gz.Write(b) +} + +func (gz *GZipResponseWriter) Close() error { + return gz.gz.Close() +} diff --git a/gzipresponsewriter_test.go b/gzipresponsewriter_test.go new file mode 100755 index 0000000..9bb6f86 --- /dev/null +++ b/gzipresponsewriter_test.go @@ -0,0 +1,34 @@ +package gziphttp + +import ( + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" +) + +func TestGZipResponseWriter(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + gz := New(w) + defer gz.Close() + fmt.Fprintln(gz, "Hello world") + })) + defer s.Close() + + req := httptest.NewRequest("GET", s.URL, nil) + req.RequestURI = "" + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + t.Fatal(resp.StatusCode) + } + if b, err := ioutil.ReadAll(resp.Body); err != nil { + t.Fatal(err) + } else if s := string(b); s != "Hello world\n" { + t.Fatalf("%q", s) + } +}