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