arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}