hermez-node/txselector/txselector_test.go
txselector/txselector_test.goRaw
1package txselector
2
3import (
4 "fmt"
5 "math/big"
6 "testing"
7
8 "github.com/hermeznetwork/hermez-node/txselector/common"
9 "github.com/hermeznetwork/hermez-node/txselector/mock"
10
11 ethCommon "github.com/ethereum/go-ethereum/common"
12 "github.com/stretchr/testify/assert"
13)
14
15func initMockDB() *mock.MockDB {
16 m := mock.New()
17
18 txs := []common.Tx{
19 {
20 FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
21 ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
22 TokenID: 1,
23 Nonce: 1,
24 UserFeeAbsolute: 1,
25 },
26 {
27 FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
28 ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
29 TokenID: 1,
30 Nonce: 2,
31 UserFeeAbsolute: 3,
32 },
33 {
34 FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
35 ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
36 TokenID: 1,
37 Nonce: 4,
38 UserFeeAbsolute: 6,
39 },
40 {
41 FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
42 ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
43 TokenID: 1,
44 Nonce: 4,
45 UserFeeAbsolute: 4,
46 },
47 {
48 FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
49 ToEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
50 TokenID: 1,
51 Nonce: 1,
52 UserFeeAbsolute: 4,
53 },
54 {
55 FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
56 ToEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
57 TokenID: 1,
58 Nonce: 2,
59 UserFeeAbsolute: 3,
60 },
61 {
62 FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
63 ToEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
64 TokenID: 1,
65 Nonce: 3,
66 UserFeeAbsolute: 5,
67 },
68 {
69 // this tx will not be selected, as the ToEthAddr does not have an account
70 FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
71 ToEthAddr: ethCommon.HexToAddress("0x4a2CFDF534725D8D6e07Af97B237Fff19BDb3c93"),
72 TokenID: 1,
73 Nonce: 4,
74 UserFeeAbsolute: 5,
75 },
76 }
77
78 // n := 0
79 nBatch := 0
80 for i := 0; i < len(txs); i++ {
81 // for i := 0; i < nBatch; i++ {
82 // for j := 0; j < len(txs)/nBatch; j++ {
83 // store tx
84 m.AddTx(uint64(nBatch), txs[i])
85
86 // store account if not yet
87 accountID := getAccountID(txs[i].FromEthAddr, txs[i].TokenID)
88 if _, ok := m.AccountDB[accountID]; !ok {
89 account := common.Account{
90 EthAddr: txs[i].FromEthAddr,
91 TokenID: txs[i].TokenID,
92 Nonce: 0,
93 Balance: big.NewInt(0),
94 }
95 m.AccountDB[accountID] = account
96 }
97 // n++
98 // }
99 }
100
101 return m
102}
103
104func TestGetL2TxSelection(t *testing.T) {
105 mockDB := initMockDB()
106 txsel := NewTxSelector(mockDB, 3, 3, 3)
107
108 txs, err := txsel.GetL2TxSelection(0)
109 assert.Nil(t, err)
110 for _, tx := range txs {
111 fmt.Println(tx.FromEthAddr.String(), tx.ToEthAddr.String(), tx.UserFeeAbsolute)
112 }
113 assert.Equal(t, 3, len(txs))
114 assert.Equal(t, uint64(6), txs[0].UserFeeAbsolute)
115 assert.Equal(t, uint64(5), txs[1].UserFeeAbsolute)
116 assert.Equal(t, uint64(4), txs[2].UserFeeAbsolute)
117}