added test and move logic to api.NewAPI

This commit is contained in:
Mikelle
2021-03-25 22:41:46 +03:00
parent 4dc44e70c4
commit 01ec1ca395
5 changed files with 73 additions and 16 deletions

View File

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

View File

@@ -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
api/noroute.go Normal file
View File

@@ -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
api/noroute_test.go Normal file
View File

@@ -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)
}

View File

@@ -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,