diff --git a/watchdog/handler.go b/watchdog/handler.go index c2ca63f661d500e3500e69e1bb9dc434e3f5d20c..e26866e68890c9e48ea18d8c2fc22a2b025140e5 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 4ff4fd3e86fc2c80fdc1f34daeb2667a785b4614..065df130fc377ebb7aa3308b82123300c51b0fca 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()