From 93dfe9ef7b112604dfe94f4de597fc0d83c714b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Thu, 10 Oct 2019 22:30:30 +0200 Subject: [PATCH] Finished last test case; over, embarrassing but over --- internal/server/data/server.go | 53 ++++++++-------- internal/server/data/server_test.go | 94 ++++++++++++++--------------- 2 files changed, 73 insertions(+), 74 deletions(-) diff --git a/internal/server/data/server.go b/internal/server/data/server.go index 9e7af61..1e887f5 100644 --- a/internal/server/data/server.go +++ b/internal/server/data/server.go @@ -1,6 +1,7 @@ package data import ( + "io/ioutil" "net/http" "github.com/BBVA/kapow/internal/server/model" @@ -8,45 +9,43 @@ import ( ) // Rutas a registrar: -// /handlers/{handler_id}/{resource_path}/request GET -// /handlers/{handler_id}/{resource_path}/response PUT -//func configRouter() *mux.Router { -// r := mux.NewRouter() -// -// r.HandleFunc("/handlers/{handler_id}/response/headers/", updateResource).Methods("PUT") -// r.HandleFunc("/handlers/{handler_id}/response/headers/{key}", updateResource).Methods("PUT") -// return r -//} -// -//func Run(bindAddr string) { -// r := configRouter() -// -// log.Fatal(http.ListenAndServe(bindAddr, r)) -//} -// -//func readResource(res http.ResponseWriter, req *http.Request) { -// -//} +// /handlers/{handlerId}/response/headers/{item} GET|PUT +// /handlers/{handlerId}/response/cookies/{item} GET|PUT +// /handlers/{handlerId}/request/headers/{item} GET|PUT +// /handlers/{handlerId}/request/cookies/{item} GET|PUT var getHandlerId func(string) (*model.Handler, bool) = Handlers.Get func updateResource(res http.ResponseWriter, req *http.Request) { vars := mux.Vars(req) - hID := vars["handler_id"] + hID := vars["handlerId"] - if _, ok := getHandlerId(hID); !ok { + hnd, ok := getHandlerId(hID) + if !ok { res.WriteHeader(http.StatusNotFound) return } - if resource := vars["resource"]; resource == "response/headers" || resource == "response/cookies" { + resource := vars["resource"] + if resource == "response/headers" || resource == "response/cookies" { res.WriteHeader(http.StatusBadRequest) + return + } + + bodyBytes, err := ioutil.ReadAll(req.Body) + if err != nil { + res.WriteHeader(http.StatusInternalServerError) + return + } + + req.Body.Close() + value := string(bodyBytes) + + if hnd != nil { + hnd.Writing.Lock() + hnd.Writer.Header().Add("pepe", value) + hnd.Writing.Unlock() } res.WriteHeader(http.StatusOK) - // - //if _, ok := vars["key"]; !ok { - // res.WriteHeader(http.StatusBadRequest) - // return - //} } diff --git a/internal/server/data/server_test.go b/internal/server/data/server_test.go index 3ea84c3..b7caa92 100644 --- a/internal/server/data/server_test.go +++ b/internal/server/data/server_test.go @@ -11,18 +11,18 @@ import ( ) func TestUpdateResourceNotFoundWhenInvalidHandlerID(t *testing.T) { - request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYYYYYY/response/headers/name", strings.NewReader("value")) + request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_XXXXXXXXXXXXXXXX/response/headers/name", strings.NewReader("value")) response := httptest.NewRecorder() handler := mux.NewRouter() - handler.HandleFunc("/handlers/{handler_id}/{resource:.*$}", updateResource). + handler.HandleFunc("/handlers/{handlerId}/{resource:.*$}", updateResource). Methods("PUT") getHandlerId = func(id string) (*model.Handler, bool) { if id == "HANDLER_YYYYYYYYYYYYYYYY" { - return nil, false + return createMockHandler(id, httptest.NewRecorder()), true } - return nil, true + return nil, false } handler.ServeHTTP(response, request) @@ -31,38 +31,16 @@ func TestUpdateResourceNotFoundWhenInvalidHandlerID(t *testing.T) { } } -func TestUpdateResourceBadRequestWhenInvalidUrl(t *testing.T) { - - request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYYYYYY/response/headers", strings.NewReader("value")) - response := httptest.NewRecorder() - handler := mux.NewRouter() - handler.HandleFunc("/handlers/{handler_id}/{resource:.*$}", updateResource). - Methods("PUT") - - getHandlerId = func(id string) (*model.Handler, bool) { - if id == "HANDLER_YYYYYYYYYYYYYYYY" { - return nil, true - } - - return nil, false - } - - handler.ServeHTTP(response, request) - if response.Code != http.StatusBadRequest { - t.Errorf("HTTP Status mismatch. Expected: %d, got: %d", http.StatusBadRequest, response.Code) - } -} - func TestUpdateResourceOkWhenValidHandlerID(t *testing.T) { - request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_XXXXXXXXXXXX/response/headers/name", strings.NewReader("value")) + request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYY/response/headers/name", strings.NewReader("value")) response := httptest.NewRecorder() handler := mux.NewRouter() - handler.HandleFunc("/handlers/{handler_id}/{resource:.*$}", updateResource). + handler.HandleFunc("/handlers/{handlerId}/{resource:.*$}", updateResource). Methods("PUT") getHandlerId = func(id string) (*model.Handler, bool) { - if id == "HANDLER_XXXXXXXXXXXX" { - return nil, true + if id == "HANDLER_YYYYYYYYYYYY" { + return createMockHandler(id, httptest.NewRecorder()), true } return nil, false @@ -74,17 +52,37 @@ func TestUpdateResourceOkWhenValidHandlerID(t *testing.T) { } } -func TestUpdateResourceBadRequestWhenInvalidCookiesUrl(t *testing.T) { - - request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYYYYYY/response/cookies", strings.NewReader("value")) +func TestUpdateResourceBadRequestWhenInvalidUrl(t *testing.T) { + request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYYYYYY/response/headers", strings.NewReader("value")) response := httptest.NewRecorder() handler := mux.NewRouter() - handler.HandleFunc("/handlers/{handler_id}/{resource:.*$}", updateResource). + handler.HandleFunc("/handlers/{handlerId}/{resource:.*$}", updateResource). Methods("PUT") getHandlerId = func(id string) (*model.Handler, bool) { if id == "HANDLER_YYYYYYYYYYYYYYYY" { - return nil, true + return createMockHandler(id, httptest.NewRecorder()), true + } + + return nil, false + } + + handler.ServeHTTP(response, request) + if response.Code != http.StatusBadRequest { + t.Errorf("HTTP Status mismatch. Expected: %d, got: %d", http.StatusBadRequest, response.Code) + } +} + +func TestUpdateResourceBadRequestWhenInvalidCookiesUrl(t *testing.T) { + request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYY/response/cookies", strings.NewReader("value")) + response := httptest.NewRecorder() + handler := mux.NewRouter() + handler.HandleFunc("/handlers/{handlerId}/{resource:.*$}", updateResource). + Methods("PUT") + + getHandlerId = func(id string) (*model.Handler, bool) { + if id == "HANDLER_YYYYYYYYYYYY" { + return createMockHandler(id, httptest.NewRecorder()), true } return nil, false @@ -97,21 +95,16 @@ func TestUpdateResourceBadRequestWhenInvalidCookiesUrl(t *testing.T) { } func TestUpdateResourceAddHeaderWhenRecieved(t *testing.T) { - t.Skip("**** WIP ****") - request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYYYYYY/response/header/pepe", strings.NewReader("mola")) + request := httptest.NewRequest(http.MethodPut, "/handlers/HANDLER_YYYYYYYYYYYY/response/headers/pepe", strings.NewReader("mola")) response := httptest.NewRecorder() handler := mux.NewRouter() - handler.HandleFunc("/handlers/{handler_id}/{resource:.*$}", updateResource). + handler.HandleFunc("/handlers/{handlerId}/{resource:.*$}", updateResource). Methods("PUT") - handlerResponse := httptest.NewRecorder() - myHandler := &model.Handler{ - ID: "HANDLER_YYYYYYYYYYYYYYYY", - Writer: handlerResponse, - } + handlerInResponse := httptest.NewRecorder() getHandlerId = func(id string) (*model.Handler, bool) { - if id == "HANDLER_YYYYYYYYYYYYYYYY" { - return myHandler, true + if id == "HANDLER_YYYYYYYYYYYY" { + return createMockHandler(id, handlerInResponse), true } return nil, false @@ -122,8 +115,15 @@ func TestUpdateResourceAddHeaderWhenRecieved(t *testing.T) { t.Errorf("HTTP Status mismatch. Expected: %d, got: %d", http.StatusOK, response.Code) } - headerValue := handlerResponse.Header().Get("pepe") + headerValue := handlerInResponse.Result().Header.Get("pepe") if headerValue != "mola" { - t.Errorf("Invalid Cookie value. Expected: %s, got: %s", "mola", headerValue) + t.Errorf("Invalid Header value. Expected: %s, got: %s", "mola", headerValue) + } +} + +func createMockHandler(id string, writer http.ResponseWriter) *model.Handler { + return &model.Handler{ + ID: id, + Writer: writer, } }