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