Browse Source

Merge pull request #674 from hermeznetwork/feature/apiWithoutError

added checker for version in no route api
develop
Oleksandr Brezhniev 3 years ago
committed by GitHub
parent
commit
9e40265226
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 76 additions and 9 deletions
  1. +2
    -0
      api/api.go
  2. +24
    -2
      api/api_test.go
  3. +21
    -0
      api/noroute.go
  4. +29
    -0
      api/noroute_test.go
  5. +0
    -7
      node/node.go

+ 2
- 0
api/api.go

@ -79,6 +79,8 @@ func NewAPI(
} }
server.Use(middleware) server.Use(middleware)
server.NoRoute(a.noRoute)
v1 := server.Group("/v1") v1 := server.Group("/v1")
// Add coordinator endpoints // Add coordinator endpoints

+ 24
- 2
api/api_test.go

@ -40,8 +40,11 @@ type Pendinger interface {
New() Pendinger New() Pendinger
} }
const apiPort = "4010"
const apiURL = "http://localhost:" + apiPort + "/v1/"
const (
apiPort = "4010"
apiIP = "http://localhost:"
apiURL = apiIP + apiPort + "/v1/"
)
var SetBlockchain = ` var SetBlockchain = `
Type: Blockchain Type: Blockchain
@ -847,6 +850,25 @@ func doBadReq(method, path string, reqBody io.Reader, expectedResponseCode int)
return swagger.ValidateResponse(ctx, responseValidationInput) 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 // test helpers
func getTimestamp(blockNum int64, blocks []common.Block) time.Time { func getTimestamp(blockNum int64, blocks []common.Block) time.Time {

+ 21
- 0
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",
})
}

+ 29
- 0
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)
}

+ 0
- 7
node/node.go

@ -616,12 +616,6 @@ type NodeAPI struct { //nolint:golint
addr string 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) // NewNodeAPI creates a new NodeAPI (which internally calls api.NewAPI)
func NewNodeAPI( func NewNodeAPI(
addr string, addr string,
@ -631,7 +625,6 @@ func NewNodeAPI(
l2db *l2db.L2DB, l2db *l2db.L2DB,
) (*NodeAPI, error) { ) (*NodeAPI, error) {
engine := gin.Default() engine := gin.Default()
engine.NoRoute(handleNoRoute)
engine.Use(cors.Default()) engine.Use(cors.Default())
_api, err := api.NewAPI( _api, err := api.NewAPI(
coordinatorEndpoints, explorerEndpoints, coordinatorEndpoints, explorerEndpoints,

Loading…
Cancel
Save