Browse Source

added test and move logic to api.NewAPI

develop^2
Mikelle 3 years ago
parent
commit
01ec1ca395
5 changed files with 73 additions and 16 deletions
  1. +2
    -0
      api/api.go
  2. +21
    -1
      api/api_test.go
  3. +21
    -0
      api/noroute.go
  4. +29
    -0
      api/noroute_test.go
  5. +0
    -15
      node/node.go

+ 2
- 0
api/api.go

@ -50,6 +50,8 @@ func NewAPI(
hermezAddress: consts.HermezAddress,
}
server.NoRoute(a.noRoute)
v1 := server.Group("/v1")
// Add coordinator endpoints

+ 21
- 1
api/api_test.go

@ -41,7 +41,8 @@ type Pendinger interface {
}
const apiPort = "4010"
const apiURL = "http://localhost:" + apiPort + "/v1/"
const apiIP = "http://localhost:"
const apiURL = apiIP + apiPort + "/v1/"
var SetBlockchain = `
Type: Blockchain
@ -841,6 +842,25 @@ func doBadReq(method, path string, reqBody io.Reader, expectedResponseCode int)
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
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
- 15
node/node.go

@ -21,7 +21,6 @@ import (
"fmt"
"net"
"net/http"
"regexp"
"sync"
"time"
@ -608,19 +607,6 @@ type NodeAPI struct { //nolint:golint
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 @@ func NewNodeAPI(
l2db *l2db.L2DB,
) (*NodeAPI, error) {
engine := gin.Default()
engine.NoRoute(handleNoRoute)
engine.Use(cors.Default())
_api, err := api.NewAPI(
coordinatorEndpoints, explorerEndpoints,

Loading…
Cancel
Save