hermez-node/api/coordinator_test.go
api/coordinator_test.goRaw
1package api
2
3import (
4 "fmt"
5 "testing"
6
7 "github.com/hermeznetwork/hermez-node/db/historydb"
8 "github.com/mitchellh/copystructure"
9 "github.com/stretchr/testify/assert"
10)
11
12type testCoordinatorsResponse struct {
13 Coordinators []historydb.CoordinatorAPI `json:"coordinators"`
14 PendingItems uint64 `json:"pendingItems"`
15}
16
17func (t testCoordinatorsResponse) GetPending() (pendingItems, lastItemID uint64) {
18 pendingItems = t.PendingItems
19 lastItemID = t.Coordinators[len(t.Coordinators)-1].ItemID
20 return pendingItems, lastItemID
21}
22
23func (t *testCoordinatorsResponse) Len() int { return len(t.Coordinators) }
24
25func TestGetCoordinators(t *testing.T) {
26 endpoint := apiURL + "coordinators"
27 fetchedCoordinators := []historydb.CoordinatorAPI{}
28
29 appendIter := func(intr interface{}) {
30 for i := 0; i < len(intr.(*testCoordinatorsResponse).Coordinators); i++ {
31 tmp, err := copystructure.Copy(intr.(*testCoordinatorsResponse).Coordinators[i])
32 if err != nil {
33 panic(err)
34 }
35 fetchedCoordinators = append(fetchedCoordinators, tmp.(historydb.CoordinatorAPI))
36 }
37 }
38
39 limit := 5
40
41 path := fmt.Sprintf("%s?limit=%d&fromItem=", endpoint, limit)
42 err := doGoodReqPaginated(path, historydb.OrderAsc, &testCoordinatorsResponse{}, appendIter)
43 assert.NoError(t, err)
44 for i := 0; i < len(fetchedCoordinators); i++ {
45 assert.Equal(t, tc.coordinators[i].ItemID, fetchedCoordinators[i].ItemID)
46 assert.Equal(t, tc.coordinators[i].Bidder, fetchedCoordinators[i].Bidder)
47 assert.Equal(t, tc.coordinators[i].Forger, fetchedCoordinators[i].Forger)
48 assert.Equal(t, tc.coordinators[i].EthBlockNum, fetchedCoordinators[i].EthBlockNum)
49 assert.Equal(t, tc.coordinators[i].URL, fetchedCoordinators[i].URL)
50 }
51
52 // Reverse Order
53 reversedCoordinators := []historydb.CoordinatorAPI{}
54 appendIter = func(intr interface{}) {
55 for i := 0; i < len(intr.(*testCoordinatorsResponse).Coordinators); i++ {
56 tmp, err := copystructure.Copy(intr.(*testCoordinatorsResponse).Coordinators[i])
57 if err != nil {
58 panic(err)
59 }
60 reversedCoordinators = append(reversedCoordinators, tmp.(historydb.CoordinatorAPI))
61 }
62 }
63 err = doGoodReqPaginated(path, historydb.OrderDesc, &testCoordinatorsResponse{}, appendIter)
64 assert.NoError(t, err)
65 for i := 0; i < len(fetchedCoordinators); i++ {
66 assert.Equal(t, reversedCoordinators[i].ItemID, fetchedCoordinators[len(fetchedCoordinators)-1-i].ItemID)
67 assert.Equal(t, reversedCoordinators[i].Bidder, fetchedCoordinators[len(fetchedCoordinators)-1-i].Bidder)
68 assert.Equal(t, reversedCoordinators[i].Forger, fetchedCoordinators[len(fetchedCoordinators)-1-i].Forger)
69 assert.Equal(t, reversedCoordinators[i].EthBlockNum, fetchedCoordinators[len(fetchedCoordinators)-1-i].EthBlockNum)
70 assert.Equal(t, reversedCoordinators[i].URL, fetchedCoordinators[len(fetchedCoordinators)-1-i].URL)
71 }
72
73 // Test GetCoordinator
74 path = fmt.Sprintf("%s/%s", endpoint, fetchedCoordinators[2].Forger.String())
75 coordinator := historydb.CoordinatorAPI{}
76 assert.NoError(t, doGoodReq("GET", path, nil, &coordinator))
77 assert.Equal(t, fetchedCoordinators[2], coordinator)
78
79 // 400
80 path = fmt.Sprintf("%s/0x001", endpoint)
81 err = doBadReq("GET", path, nil, 400)
82 assert.NoError(t, err)
83 // 404
84 path = fmt.Sprintf("%s/0xaa942cfcd25ad4d90a62358b0dd84f33b398262a", endpoint)
85 err = doBadReq("GET", path, nil, 404)
86 assert.NoError(t, err)
87}