validation of routes

This commit is contained in:
César Gallego Rodríguez
2019-10-10 09:44:41 +02:00
parent d0764f07a4
commit b82b0d2ef1
2 changed files with 48 additions and 42 deletions
+11 -3
View File
@@ -12,18 +12,22 @@ import (
"github.com/BBVA/kapow/internal/server/user" "github.com/BBVA/kapow/internal/server/user"
) )
// Run must start the control server in a specific address
func Run(bindAddr string) { func Run(bindAddr string) {
r := configRouter()
log.Fatal(http.ListenAndServe(bindAddr, r))
}
func configRouter() *mux.Router {
r := mux.NewRouter() r := mux.NewRouter()
r.HandleFunc("/routes/{id}", removeRoute). r.HandleFunc("/routes/{id}", removeRoute).
Methods("DELETE") Methods("DELETE")
r.HandleFunc("/routes", listRoutes). r.HandleFunc("/routes", listRoutes).
Methods("GET") Methods("GET")
r.HandleFunc("/routes", addRoute). r.HandleFunc("/routes", addRoute).
Methods("POST") Methods("POST")
return r
log.Fatal(http.ListenAndServe(bindAddr, r))
} }
// user.Routes.Remove() []model.Route // user.Routes.Remove() []model.Route
@@ -67,6 +71,10 @@ func addRoute(res http.ResponseWriter, req *http.Request) {
res.WriteHeader(http.StatusUnprocessableEntity) res.WriteHeader(http.StatusUnprocessableEntity)
return return
} }
if route.Pattern == "" {
res.WriteHeader(http.StatusUnprocessableEntity)
return
}
created := funcAdd(route) created := funcAdd(route)
createdBytes, _ := json.Marshal(created) createdBytes, _ := json.Marshal(created)
+37 -39
View File
@@ -15,46 +15,45 @@ import (
) )
func TestConfigRouterHasRoutesWellConfigured(t *testing.T) { func TestConfigRouterHasRoutesWellConfigured(t *testing.T) {
t.Skip("****** WIP ******") testCases := []struct {
//testCases := []struct { pattern, method string
// pattern, method string handler uintptr
// handler uintptr mustMatch bool
// mustMatch bool vars []string
// vars []string }{
//}{ {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodGet, 0, false, []string{}},
// {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodGet, 0, false, []string{}}, {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodPut, 0, false, []string{}},
// {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodPut, 0, false, []string{}}, {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodPost, 0, false, []string{}},
// {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodPost, 0, false, []string{}}, {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodDelete, reflect.ValueOf(removeRoute).Pointer(), true, []string{"id"}},
// {"/routes/ROUTE_YYYYYYYYYYYYYYY", http.MethodDelete, reflect.ValueOf(removeRoute).Pointer(), true, []string{"id"}}, {"/routes", http.MethodGet, reflect.ValueOf(listRoutes).Pointer(), true, []string{}},
// {"/routes", http.MethodGet, reflect.ValueOf(listRoutes).Pointer(), true, []string{}}, {"/routes", http.MethodPut, 0, false, []string{}},
// {"/routes", http.MethodPut, 0, false, []string{}}, {"/routes", http.MethodPost, reflect.ValueOf(addRoute).Pointer(), true, []string{}},
// {"/routes", http.MethodPost, reflect.ValueOf(addRoute).Pointer(), true, []string{}}, {"/routes", http.MethodDelete, 0, false, []string{}},
// {"/routes", http.MethodDelete, 0, false, []string{}}, }
//} r := configRouter()
//r := configRouter()
//for _, tc := range testCases { for _, tc := range testCases {
// rm := mux.RouteMatch{} rm := mux.RouteMatch{}
// rq, _ := http.NewRequest(tc.method, tc.pattern, nil) rq, _ := http.NewRequest(tc.method, tc.pattern, nil)
// if matched := r.Match(rq, &rm); tc.mustMatch == matched { if matched := r.Match(rq, &rm); tc.mustMatch == matched {
// if tc.mustMatch { if tc.mustMatch {
// // Check for Handler match. // Check for Handler match.
// realHandler := reflect.ValueOf(rm.Handler).Pointer() realHandler := reflect.ValueOf(rm.Handler).Pointer()
// if realHandler != tc.handler { if realHandler != tc.handler {
// t.Errorf("Handler mismatch. Expected: %X, got: %X", tc.handler, realHandler) t.Errorf("Handler mismatch. Expected: %X, got: %X", tc.handler, realHandler)
// } }
// // Check for variables // Check for variables
// for _, vn := range tc.vars { for _, vn := range tc.vars {
// if _, exists := rm.Vars[vn]; !exists { if _, exists := rm.Vars[vn]; !exists {
// t.Errorf("Variable not present: %s", vn) t.Errorf("Variable not present: %s", vn)
// } }
// } }
// } }
// } else { } else {
// t.Errorf("Route mismatch: %+v", tc) t.Errorf("Route mismatch: %+v", tc)
// } }
//} }
} }
func TestAddRouteReturnsBadRequestWhenMalformedJSONBody(t *testing.T) { func TestAddRouteReturnsBadRequestWhenMalformedJSONBody(t *testing.T) {
@@ -77,7 +76,6 @@ func TestAddRouteReturnsBadRequestWhenMalformedJSONBody(t *testing.T) {
} }
func TestAddRouteReturns422ErrorWhenMandatoryFieldsMissing(t *testing.T) { func TestAddRouteReturns422ErrorWhenMandatoryFieldsMissing(t *testing.T) {
t.Skip("****** WIP ******")
handler := http.HandlerFunc(addRoute) handler := http.HandlerFunc(addRoute)
tc := []struct { tc := []struct {
payload, testCase string payload, testCase string