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