hermez-node/api/state_test.go
api/state_test.goRaw
1package api
2
3import (
4 "testing"
5 "time"
6
7 "github.com/hermeznetwork/hermez-node/common"
8 "github.com/stretchr/testify/assert"
9)
10
11const secondsPerBlock = 15
12
13func TestSetRollupVariables(t *testing.T) {
14 rollupVars := &common.RollupVariables{}
15 assert.Equal(t, *rollupVars, api.status.Rollup)
16 api.SetRollupVariables(tc.rollupVars)
17 assert.Equal(t, tc.rollupVars, api.status.Rollup)
18}
19
20func TestSetWDelayerVariables(t *testing.T) {
21 wdelayerVars := &common.WDelayerVariables{}
22 assert.Equal(t, *wdelayerVars, api.status.WithdrawalDelayer)
23 api.SetWDelayerVariables(tc.wdelayerVars)
24 assert.Equal(t, tc.wdelayerVars, api.status.WithdrawalDelayer)
25}
26
27func TestSetAuctionVariables(t *testing.T) {
28 auctionVars := &common.AuctionVariables{}
29 assert.Equal(t, *auctionVars, api.status.Auction)
30 api.SetAuctionVariables(tc.auctionVars)
31 assert.Equal(t, tc.auctionVars, api.status.Auction)
32}
33
34func TestNextForgers(t *testing.T) {
35 // It's assumed that bids for each slot will be received in increasing order
36 bestBids := make(map[int64]testBid)
37 for j := range tc.bids {
38 bestBids[tc.bids[j].SlotNum] = tc.bids[j]
39 }
40 lastBlock := tc.blocks[len(tc.blocks)-1]
41 for i := int64(0); i < tc.slots[len(tc.slots)-1].SlotNum; i++ {
42 lastClosedSlot := i + int64(api.status.Auction.ClosedAuctionSlots)
43 nextForgers, err := api.GetNextForgers(tc.blocks[len(tc.blocks)-1], i, lastClosedSlot)
44 assert.NoError(t, err)
45 for j := i; j <= lastClosedSlot; j++ {
46 for q := range nextForgers {
47 if nextForgers[q].Period.SlotNum == j {
48 if nextForgers[q].Coordinator.ItemID != 0 {
49 assert.Equal(t, bestBids[j].Bidder, nextForgers[q].Coordinator.Bidder)
50 } else {
51 assert.Equal(t, bootCoordinator.Bidder, nextForgers[q].Coordinator.Bidder)
52 }
53 firstBlockSlot, lastBlockSlot := api.getFirstLastBlock(j)
54 fromTimestamp := lastBlock.Timestamp.Add(time.Second * time.Duration(secondsPerBlock*(firstBlockSlot-lastBlock.EthBlockNum)))
55 toTimestamp := lastBlock.Timestamp.Add(time.Second * time.Duration(secondsPerBlock*(lastBlockSlot-lastBlock.EthBlockNum)))
56 assert.Equal(t, fromTimestamp.Unix(), nextForgers[q].Period.FromTimestamp.Unix())
57 assert.Equal(t, toTimestamp.Unix(), nextForgers[q].Period.ToTimestamp.Unix())
58 }
59 }
60 }
61 }
62}
63
64func TestUpdateNetworkInfo(t *testing.T) {
65 status := &Network{}
66 assert.Equal(t, status.LastBlock, api.status.Network.LastBlock)
67 assert.Equal(t, status.LastBatch.BatchNum, api.status.Network.LastBatch.BatchNum)
68 assert.Equal(t, status.CurrentSlot, api.status.Network.CurrentSlot)
69 assert.Equal(t, status.NextForgers, api.status.Network.NextForgers)
70 lastBlock := tc.blocks[3]
71 lastBatchNum := common.BatchNum(3)
72 currentSlotNum := int64(1)
73 err := api.UpdateNetworkInfo(lastBlock, lastBatchNum, currentSlotNum)
74 assert.NoError(t, err)
75 assert.Equal(t, lastBlock.EthBlockNum, api.status.Network.LastBlock)
76 assert.Equal(t, lastBatchNum, api.status.Network.LastBatch.BatchNum)
77 assert.Equal(t, currentSlotNum, api.status.Network.CurrentSlot)
78 assert.Equal(t, int(api.status.Auction.ClosedAuctionSlots)+1, len(api.status.Network.NextForgers))
79}