From a4c867fd8fe6c1a88c383c6a3eaea5bf90ea2fb5 Mon Sep 17 00:00:00 2001 From: "Alex Ellis (VMware)" <alexellis2@gmail.com> Date: Mon, 13 Aug 2018 17:42:49 +0100 Subject: [PATCH] Adds HTTP Host entry Fixes: https://github.com/openfaas-incubator/of-watchdog/pull/24 Signed-off-by: Alex Ellis (VMware) <alexellis2@gmail.com> --- watchdog/handler.go | 4 +++ watchdog/requesthandler_test.go | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/watchdog/handler.go b/watchdog/handler.go index c2ca63f6..e26866e6 100644 --- a/watchdog/handler.go +++ b/watchdog/handler.go @@ -249,6 +249,10 @@ func getAdditionalEnvs(config *WatchdogConfig, r *http.Request, method string) [ envs = append(envs, fmt.Sprintf("Http_Path=%s", r.URL.Path)) } + if len(r.Host) > 0 { + envs = append(envs, fmt.Sprintf("Http_Host=%s", r.Host)) + } + } return envs diff --git a/watchdog/requesthandler_test.go b/watchdog/requesthandler_test.go index 4ff4fd3e..065df130 100644 --- a/watchdog/requesthandler_test.go +++ b/watchdog/requesthandler_test.go @@ -104,6 +104,66 @@ func TestHandler_HasCustomHeaderInFunction_WithCgiMode_AndBody(t *testing.T) { } } +func TestHandler_HasHostHeaderWhenSet(t *testing.T) { + rr := httptest.NewRecorder() + + body := "test" + req, err := http.NewRequest(http.MethodPost, "http://gateway/function", bytes.NewBufferString(body)) + + if err != nil { + t.Fatal(err) + } + + config := WatchdogConfig{ + faasProcess: "env", + cgiHeaders: true, + } + handler := makeRequestHandler(&config) + handler(rr, req) + + required := http.StatusOK + if status := rr.Code; status != required { + t.Errorf("handler returned wrong status code - got: %v, want: %v", + status, required) + } + + read, _ := ioutil.ReadAll(rr.Body) + val := string(read) + if !strings.Contains(val, fmt.Sprintf("Http_Host=%s", req.URL.Host)) { + t.Errorf("'env' should have printed: Http_Host=0, got: %s\n", val) + } +} + +func TestHandler_HostHeader_Empty_WhenNotSet(t *testing.T) { + rr := httptest.NewRecorder() + + body := "test" + req, err := http.NewRequest(http.MethodPost, "/function", bytes.NewBufferString(body)) + + if err != nil { + t.Fatal(err) + } + + config := WatchdogConfig{ + faasProcess: "env", + cgiHeaders: true, + } + handler := makeRequestHandler(&config) + handler(rr, req) + + required := http.StatusOK + if status := rr.Code; status != required { + t.Errorf("handler returned wrong status code - got: %v, want: %v", + status, required) + } + + read, _ := ioutil.ReadAll(rr.Body) + val := string(read) + if strings.Contains(val, fmt.Sprintf("Http_Host=%s", req.URL.Host)) { + t.Errorf("Http_Host should not have been given, but was: %s\n", val) + } +} + func TestHandler_StderrWritesToStderr_CombinedOutput_False(t *testing.T) { rr := httptest.NewRecorder() -- GitLab