From 031a0bc18c9296c49742da34d696014bb36d8312 Mon Sep 17 00:00:00 2001 From: Alex Young Date: Tue, 19 Sep 2017 22:33:41 +0100 Subject: [PATCH] Add tests around error handing done in #196 Signed-off-by: Alex Young --- gateway/handlers/createhandler.go | 5 +- .../tests/integration/createfunction_test.go | 98 ++++++++++++++++++- 2 files changed, 96 insertions(+), 7 deletions(-) diff --git a/gateway/handlers/createhandler.go b/gateway/handlers/createhandler.go index 9b55e199..85876d25 100644 --- a/gateway/handlers/createhandler.go +++ b/gateway/handlers/createhandler.go @@ -30,6 +30,7 @@ func MakeNewFunctionHandler(metricsOptions metrics.MetricOptions, c *client.Clie request := requests.CreateFunctionRequest{} err := json.Unmarshal(body, &request) if err != nil { + log.Println("Error parsing request:", err) w.WriteHeader(http.StatusBadRequest) return } @@ -43,7 +44,7 @@ func MakeNewFunctionHandler(metricsOptions metrics.MetricOptions, c *client.Clie if len(request.RegistryAuth) > 0 { auth, err := BuildEncodedAuthConfig(request.RegistryAuth, request.Image) if err != nil { - log.Println("Error while building registry auth configuration", err) + log.Println("Error building registry auth configuration:", err) w.WriteHeader(http.StatusBadRequest) w.Write([]byte("Invalid registry auth")) return @@ -54,7 +55,7 @@ func MakeNewFunctionHandler(metricsOptions metrics.MetricOptions, c *client.Clie response, err := c.ServiceCreate(context.Background(), spec, options) if err != nil { - log.Println(err) + log.Println("Error creating service:", err) w.WriteHeader(http.StatusBadRequest) w.Write([]byte("Deployment error: " + err.Error())) return diff --git a/gateway/tests/integration/createfunction_test.go b/gateway/tests/integration/createfunction_test.go index b4e02942..8e1999ae 100644 --- a/gateway/tests/integration/createfunction_test.go +++ b/gateway/tests/integration/createfunction_test.go @@ -4,13 +4,42 @@ package inttests import ( + "encoding/json" "net/http" + "strings" "testing" ) -func TestCreate_ValidJson(t *testing.T) { - reqBody := `{}` - _, code, err := fireRequest("http://localhost:8080/system/functions", http.MethodPost, reqBody) +type PostFunctionRequest struct { + Image string `json:"image"` + EnvProcess string `json:"envProcess"` + Network string `json:"network"` + Service string `json:"service"` +} + +type DeleteFunctionRequest struct { + FunctionName string `json:"functionName"` +} + +func createFunction(request PostFunctionRequest) (string, int, error) { + marshalled, _ := json.Marshal(request) + return fireRequest("http://localhost:8080/system/functions", http.MethodPost, string(marshalled)) +} + +func deleteFunction(name string) (string, int, error) { + marshalled, _ := json.Marshal(DeleteFunctionRequest{name}) + return fireRequest("http://localhost:8080/system/functions", http.MethodDelete, string(marshalled)) +} + +func TestCreate_ValidRequest(t *testing.T) { + request := PostFunctionRequest{ + "functions/resizer", + "", + "func_functions", + "test_resizer", + } + + _, code, err := createFunction(request) if err != nil { t.Log(err) @@ -18,11 +47,70 @@ func TestCreate_ValidJson(t *testing.T) { } if code != http.StatusOK { - t.Errorf("Got HTTP code: %d, want %d\n", code, http.StatusBadRequest) + t.Errorf("Got HTTP code: %d, want %d\n", code, http.StatusOK) + return + } + + deleteFunction("test_resizer") +} + +func TestCreate_InvalidImage(t *testing.T) { + request := PostFunctionRequest{ + "a b c", + "", + "func_functions", + "test_resizer", + } + + body, code, err := createFunction(request) + + if err != nil { + t.Log(err) + t.Fail() + } + + expectedErrorCode := http.StatusBadRequest + if code != expectedErrorCode { + t.Errorf("Got HTTP code: %d, want %d\n", code, expectedErrorCode) + return + } + + expectedErrorSlice := "is not a valid repository/tag" + if !strings.Contains(body, expectedErrorSlice) { + t.Errorf("Error message %s does not contain: %s\n", body, expectedErrorSlice) + return } } -func TestCreateBadFunctionNotJson(t *testing.T) { +func TestCreate_InvalidNetwork(t *testing.T) { + request := PostFunctionRequest{ + "functions/resizer", + "", + "non_existent_network", + "test_resizer", + } + + body, code, err := createFunction(request) + + if err != nil { + t.Log(err) + t.Fail() + } + + expectedErrorCode := http.StatusBadRequest + if code != expectedErrorCode { + t.Errorf("Got HTTP code: %d, want %d\n", code, expectedErrorCode) + return + } + + expectedErrorSlice := "network non_existent_network not found" + if !strings.Contains(body, expectedErrorSlice) { + t.Errorf("Error message %s does not contain: %s\n", body, expectedErrorSlice) + return + } +} + +func TestCreate_InvalidJson(t *testing.T) { reqBody := `not json` _, code, err := fireRequest("http://localhost:8080/system/functions", http.MethodPost, reqBody)