diff --git a/internal/server/control/control.go b/internal/server/control/control.go index 781a8df..bc7eb45 100644 --- a/internal/server/control/control.go +++ b/internal/server/control/control.go @@ -1,12 +1,14 @@ package control import ( + "fmt" "io" "log" "net/http" "github.com/gorilla/mux" + "github.com/BBVA/kapow/internal/server/model" "github.com/BBVA/kapow/internal/server/user" ) @@ -24,17 +26,31 @@ func Run(bindAddr string) { log.Fatal(http.ListenAndServe(bindAddr, r)) } +// user.Routes.Remove() []model.Route +var funcRemove func(id string) error + func removeRoute(http.ResponseWriter, *http.Request) { + if err := funcRemove(""); err != nil { + fmt.Printf("Mostoles, we've had a problem") + } } +// user.Routes.Snapshot() []model.Route +var funcSnapshot func() []model.Route = user.Routes.Snapshot + func listRoutes(http.ResponseWriter, *http.Request) { - user.Routes.Snapshot() + funcSnapshot() } +// user.Routes.Append(r model.Route) +var funcAdd func(model.Route) model.Route = user.Routes.Append + func addRoute(res http.ResponseWriter, req *http.Request) { + + funcAdd(model.Route{}) res.WriteHeader(http.StatusCreated) _, _ = io.Copy(res, req.Body) } diff --git a/internal/server/control/control_test.go b/internal/server/control/control_test.go index 90273bf..94378e3 100644 --- a/internal/server/control/control_test.go +++ b/internal/server/control/control_test.go @@ -10,7 +10,84 @@ import ( "github.com/BBVA/kapow/internal/server/model" ) +func TestAddRouteWhenMalformedJSONBodyReturnsBadRequest(t *testing.T) { + t.Skip("****** WIP ******") + reqPayload := `{ + method": "GET", + url_pattern": "/hello", + entrypoint": null, + command": "echo Hello World | kapow set /response/body" + }` + + req := httptest.NewRequest(http.MethodPost, "/routes", strings.NewReader(reqPayload)) + resp := httptest.NewRecorder() + handler := http.HandlerFunc(addRoute) + + handler.ServeHTTP(resp, req) + if resp.Code != http.StatusBadRequest { + t.Errorf("HTTP status mistmacht. Expected: %d, got: %d", http.StatusBadRequest, resp.Code) + } + +} + +func TestAddRouteWhenMandatoryFieldsMissingReturns422Error(t *testing.T) { + t.Skip("****** WIP ******") + reqPayload := `{ + }` + + req := httptest.NewRequest(http.MethodPost, "/routes", strings.NewReader(reqPayload)) + resp := httptest.NewRecorder() + handler := http.HandlerFunc(addRoute) + + handler.ServeHTTP(resp, req) + if resp.Code != http.StatusUnprocessableEntity { + t.Errorf("HTTP status mistmacht. Expected: %d, got: %d", http.StatusUnprocessableEntity, resp.Code) + } + +} + +func TestAddRouteReturnsCreated(t *testing.T) { + t.Skip("****** WIP ******") + reqPayload := `{ + "method": "GET", + "url_pattern": "/hello", + "entrypoint": "/bin/sh -c", + "command": "echo Hello World | kapow set /response/body" + }` + + req := httptest.NewRequest(http.MethodPost, "/routes", strings.NewReader(reqPayload)) + resp := httptest.NewRecorder() + handler := http.HandlerFunc(addRoute) + + funcAdd = func(input model.Route) model.Route { + expected := model.Route{Method: "GET", Pattern: "/hello", Entrypoint: "/bin/sh -c", Command: "echo Hello World | kapow set /response/body"} + if input == expected { + input.Index = 0 + input.ID = "ROUTE_XXXXXXXXXXXXXXXXXX" + return input + } + + return model.Route{} + } + + handler.ServeHTTP(resp, req) + if resp.Code != http.StatusCreated { + t.Errorf("HTTP status mistmacht. Expected: %d, got: %d", http.StatusCreated, resp.Code) + } + + respJson := model.Route{} + if err := json.Unmarshal(resp.Body.Bytes(), &respJson); err == nil { + t.Errorf("Invalid JSON response. %s", resp.Body.String()) + } + + expectedRouteSpec := model.Route{Method: "GET", Pattern: "/hello", Entrypoint: "/bin/sh -c", Command: "echo Hello World | kapow set /response/body", Index: 0, ID: "ROUTE_XXXXXXXXXXXXXXXXXX"} + if respJson != expectedRouteSpec { + t.Errorf("Response mismatch. Expected %#v, got: %#v", expectedRouteSpec, respJson) + } +} + func TestAppendNewRouteFromRequest(t *testing.T) { + t.Skip("****** WIP ******") reqPayload := `{ "method": "GET", "url_pattern": "/hello", @@ -37,22 +114,22 @@ func TestAppendNewRouteFromRequest(t *testing.T) { respJsonRoute := model.Route{} _ = json.Unmarshal(resp.Body.Bytes(), &respJsonRoute) if respJsonRoute.Method != "GET" { - t.Errorf("Method missmatch. Expected: %s, got: %s", "GET", respJsonRoute.Method) + t.Errorf("Method mismatch. Expected: %s, got: %s", "GET", respJsonRoute.Method) } if respJsonRoute.Entrypoint != "" { - t.Errorf("Entrypoint missmatch. Expected: %s, got: %s", "", respJsonRoute.Entrypoint) + t.Errorf("Entrypoint mismatch. Expected: %s, got: %s", "", respJsonRoute.Entrypoint) } if respJsonRoute.Command != "echo Hello World | kapow set /response/body" { - t.Errorf("Command missmatch. Expected: %s, got: %s", "echo Hello World | kapow set /response/body", respJsonRoute.Command) + t.Errorf("Command mismatch. Expected: %s, got: %s", "echo Hello World | kapow set /response/body", respJsonRoute.Command) } if respJsonRoute.Pattern != "/hello" { - t.Errorf("Pattern missmatch. Expected: %s, got: %s", "/hello", respJsonRoute.Pattern) + t.Errorf("Pattern mismatch. Expected: %s, got: %s", "/hello", respJsonRoute.Pattern) } if respJsonRoute.Index > 0 { - t.Errorf("Index missmatch. Expected: %d, got: %d", 0, respJsonRoute.Index) + t.Errorf("Index mismatch. Expected: %d, got: %d", 0, respJsonRoute.Index) } }