From 28c9ccd0aa4f1de7b00e919b4d140fdd1eaf1aa7 Mon Sep 17 00:00:00 2001 From: Edward Wilde Date: Wed, 4 Jul 2018 08:07:46 +0100 Subject: [PATCH] Changes from pull request feedback 1. Use httptest.ResponseRecorder instead of custom implementation StringResponseWriter. 2. Remove verbose log line in infohandler Signed-off-by: Edward Wilde --- gateway/handlers/infohandler.go | 16 +++++++++----- gateway/types/inforequest.go | 37 --------------------------------- 2 files changed, 11 insertions(+), 42 deletions(-) diff --git a/gateway/handlers/infohandler.go b/gateway/handlers/infohandler.go index 94a4eff8..6a868a47 100644 --- a/gateway/handlers/infohandler.go +++ b/gateway/handlers/infohandler.go @@ -5,6 +5,9 @@ import ( "log" "net/http" + "io/ioutil" + "net/http/httptest" + "github.com/openfaas/faas/gateway/types" "github.com/openfaas/faas/gateway/version" ) @@ -12,16 +15,19 @@ import ( // MakeInfoHandler is responsible for display component version information func MakeInfoHandler(h http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - sw := types.NewStringResponseWriter() - h.ServeHTTP(sw, r) + responseRecorder := httptest.NewRecorder() + h.ServeHTTP(responseRecorder, r) + upstreamCall := responseRecorder.Result() + + defer upstreamCall.Body.Close() - log.Printf("Body: %s", sw.Body()) provider := make(map[string]interface{}) providerVersion := &types.VersionInfo{} - err := json.Unmarshal(sw.Body(), &provider) + upstreamBody, _ := ioutil.ReadAll(upstreamCall.Body) + err := json.Unmarshal(upstreamBody, &provider) if err != nil { - log.Printf("Error unmarshalling provider json. Got %s. Error %s\n", string(sw.Body()), err.Error()) + log.Printf("Error unmarshalling provider json from body %s. Error %s\n", upstreamBody, err.Error()) } versionMap := provider["version"].(map[string]interface{}) diff --git a/gateway/types/inforequest.go b/gateway/types/inforequest.go index 4e1e08c7..0b3e0a26 100644 --- a/gateway/types/inforequest.go +++ b/gateway/types/inforequest.go @@ -1,10 +1,5 @@ package types -import ( - "bytes" - "net/http" -) - // GatewayInfo provides information about the gateway and it's connected components type GatewayInfo struct { Provider *ProviderInfo `json:"provider"` @@ -24,35 +19,3 @@ type VersionInfo struct { SHA string `json:"sha"` Release string `json:"release"` } - -// StringResponseWriter captures the handlers HTTP response in a buffer -type StringResponseWriter struct { - body *bytes.Buffer - headerCode int - header http.Header -} - -// NewStringResponseWriter create a new StringResponseWriter -func NewStringResponseWriter() *StringResponseWriter { - return &StringResponseWriter{body: &bytes.Buffer{}, header: make(http.Header)} -} - -// Header capture the Header information -func (s StringResponseWriter) Header() http.Header { - return s.header -} - -// Write captures the response data -func (s StringResponseWriter) Write(data []byte) (int, error) { - return s.body.Write(data) -} - -// WriteHeader captures the status code of the response -func (s StringResponseWriter) WriteHeader(statusCode int) { - s.headerCode = statusCode -} - -// Body returns the response body bytes -func (s StringResponseWriter) Body() []byte { - return s.body.Bytes() -}