added test and move logic to api.NewAPI
Mikelle mikhwall@gmail.com
Thu, 25 Mar 2021 22:41:46 +0300
5 files changed,
73 insertions(+),
16 deletions(-)
M
api/api.go
→
api/api.go
@@ -50,6 +50,8 @@ chainID: consts.ChainID,
hermezAddress: consts.HermezAddress, } + server.NoRoute(a.noRoute) + v1 := server.Group("/v1") // Add coordinator endpoints
M
api/api_test.go
→
api/api_test.go
@@ -41,7 +41,8 @@ New() Pendinger
} const apiPort = "4010" -const apiURL = "http://localhost:" + apiPort + "/v1/" +const apiIP = "http://localhost:" +const apiURL = apiIP + apiPort + "/v1/" var SetBlockchain = ` Type: Blockchain@@ -839,6 +840,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
@@ -21,7 +21,6 @@ "errors"
"fmt" "net" "net/http" - "regexp" "sync" "time"@@ -608,19 +607,6 @@ engine *gin.Engine
addr string } -func handleNoRoute(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", - }) -} - // NewNodeAPI creates a new NodeAPI (which internally calls api.NewAPI) func NewNodeAPI( addr string,@@ -630,7 +616,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,