From a0c57541c29ca72f8363302b3b8e45e8aaaa2ef1 Mon Sep 17 00:00:00 2001 From: Niccolo Borgioli Date: Sun, 26 May 2024 01:03:46 +0200 Subject: [PATCH] return content encoding --- app/http.go | 8 ++++++++ app/server_test.go | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/app/http.go b/app/http.go index 488bd6a..f474f14 100644 --- a/app/http.go +++ b/app/http.go @@ -64,6 +64,10 @@ type Routes struct { } func Respond(conn net.Conn, req Request, res Response) { + if res.Headers == nil { + res.Headers = make(map[string]string) + } + fmt.Fprintf(conn, "%s %d %s%s", res.Version, res.Code.Code, res.Code.Message, HTTPDelimiter) bodySize := 0 if res.Body != "" { @@ -78,6 +82,10 @@ func Respond(conn net.Conn, req Request, res Response) { fmt.Fprintf(conn, "%s: %s%s", header, value, HTTPDelimiter) } + if req.Headers["Accept-Encoding"] == "gzip" { + res.Headers["Content-Encoding"] = "gzip" + } + fmt.Fprint(conn, HTTPDelimiter) if bodySize > 0 { if res.Body != "" { diff --git a/app/server_test.go b/app/server_test.go index 8b74c90..fda4f5b 100644 --- a/app/server_test.go +++ b/app/server_test.go @@ -38,7 +38,9 @@ func checkResponse(t *testing.T, res *http.Response, expected Expected) { t.Errorf(`Expected body to be "%s" but got "%s"`, expected.body, body) } + // fmt.Println(expected.headers) for header, value := range expected.headers { + // fmt.Println(header, res.Header[header]) if actual := res.Header[header][0]; actual != value { t.Errorf(`Expected "%s" header to be "%s" but got "%s"`, header, value, actual) } @@ -64,6 +66,20 @@ func TestEcho(t *testing.T) { }}) } +// func TestEchoGzip(t *testing.T) { +// input := "abc" +// req, _ := http.NewRequest("GET", fmt.Sprintf("http://localhost:4221/echo/%s", input), nil) +// req.Header.Set("Accept-Encoding", "gzip") +// client := &http.Client{} +// res, _ := client.Do(req) + +// checkResponse(t, res, Expected{status: 200, body: input, headers: map[string]string{ +// // "Content-Length": strconv.Itoa(len(input)), +// "Content-Type": "text/plain", +// "Content-Encoding": "gzip", +// }}) +// } + func TestUserAgent(t *testing.T) { input := "CodeCrafters/1.0" req, _ := http.NewRequest("GET", "http://localhost:4221/user-agent", nil)