Merge pull request #674 from hermeznetwork/feature/apiWithoutError added checker for version in no route api
Oleksandr Brezhniev oleksandr.brezhniev@gmail.com
Wed, 31 Mar 2021 23:47:06 +0300
5 files changed,
76 insertions(+),
9 deletions(-)
M
api/api.go
→
api/api.go
@@ -79,6 +79,8 @@ return nil, err
} server.Use(middleware) + server.NoRoute(a.noRoute) + v1 := server.Group("/v1") // Add coordinator endpoints
M
api/api_test.go
→
api/api_test.go
@@ -40,8 +40,11 @@ Len() int
New() Pendinger } -const apiPort = "4010" -const apiURL = "http://localhost:" + apiPort + "/v1/" +const ( + apiPort = "4010" + apiIP = "http://localhost:" + apiURL = apiIP + apiPort + "/v1/" +) var SetBlockchain = ` Type: Blockchain@@ -845,6 +848,25 @@ Header: resp.Header,
} responseValidationInput = responseValidationInput.SetBodyBytes(body) return swagger.ValidateResponse(ctx, responseValidationInput) +} + +func doSimpleReq(method, endpoint string) (string, error) { + client := &http.Client{} + httpReq, err := http.NewRequest(method, endpoint, nil) + if err != nil { + return "", tracerr.Wrap(err) + } + resp, err := client.Do(httpReq) + if err != nil { + return "", tracerr.Wrap(err) + } + //nolint + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", tracerr.Wrap(err) + } + return string(body), nil } // test helpers
A
api/noroute.go
@@ -0,0 +1,21 @@
+package api + +import ( + "net/http" + "regexp" + + "github.com/gin-gonic/gin" +) + +func (a *API) noRoute(c *gin.Context) { + matched, _ := regexp.MatchString(`^/v[0-9]+/`, c.Request.URL.Path) + if !matched { + c.JSON(http.StatusNotFound, gin.H{ + "error": "Version not provided, please provide a valid version in the path such as v1", + }) + return + } + c.JSON(http.StatusNotFound, gin.H{ + "error": "404 page not found", + }) +}
A
api/noroute_test.go
@@ -0,0 +1,29 @@
+package api + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNoRouteVersionNotProvided(t *testing.T) { + endpoint := apiIP + apiPort + "/" + // not using doGoodReq, bcs internally + // there is a method FindRoute that checks route and returns error + resp, err := doSimpleReq("GET", endpoint) + assert.NoError(t, err) + assert.Equal(t, + "{\"error\":\"Version not provided, please provide a valid version in the path such as v1\"}\n", + resp) +} + +func TestNoRoute(t *testing.T) { + endpoint := apiURL + // not using doGoodReq, bcs internally + // there is a method FindRoute that checks route and returns error + resp, err := doSimpleReq("GET", endpoint) + assert.NoError(t, err) + assert.Equal(t, + "{\"error\":\"404 page not found\"}\n", + resp) +}
M
node/node.go
→
node/node.go
@@ -616,12 +616,6 @@ engine *gin.Engine
addr string } -func handleNoRoute(c *gin.Context) { - c.JSON(http.StatusNotFound, gin.H{ - "error": "404 page not found", - }) -} - // NewNodeAPI creates a new NodeAPI (which internally calls api.NewAPI) func NewNodeAPI( addr string,@@ -631,7 +625,6 @@ hdb *historydb.HistoryDB,
l2db *l2db.L2DB, ) (*NodeAPI, error) { engine := gin.Default() - engine.NoRoute(handleNoRoute) engine.Use(cors.Default()) _api, err := api.NewAPI( coordinatorEndpoints, explorerEndpoints,