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"
 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}