hermez-node/txselector/txselector_test.go
txselector/txselector_test.goRaw
1package txselector
2
3import (
4 "io/ioutil"
5 "os"
6 "testing"
7 "time"
8
9 "github.com/hermeznetwork/hermez-node/common"
10 dbUtils "github.com/hermeznetwork/hermez-node/db"
11 "github.com/hermeznetwork/hermez-node/db/historydb"
12 "github.com/hermeznetwork/hermez-node/db/l2db"
13 "github.com/hermeznetwork/hermez-node/db/statedb"
14 "github.com/hermeznetwork/hermez-node/test"
15 "github.com/jmoiron/sqlx"
16 "github.com/stretchr/testify/assert"
17 "github.com/stretchr/testify/require"
18)
19
20func initTest(t *testing.T, testSet string) *TxSelector {
21 pass := os.Getenv("POSTGRES_PASS")
22 db, err := dbUtils.InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
23 require.Nil(t, err)
24 l2DB := l2db.NewL2DB(db, 10, 100, 24*time.Hour)
25
26 dir, err := ioutil.TempDir("", "tmpdb")
27 require.Nil(t, err)
28 sdb, err := statedb.NewStateDB(dir, statedb.TypeTxSelector, 0)
29 require.Nil(t, err)
30
31 txselDir, err := ioutil.TempDir("", "tmpTxSelDB")
32 require.Nil(t, err)
33 txsel, err := NewTxSelector(txselDir, sdb, l2DB, 100, 100, 1000)
34 require.Nil(t, err)
35
36 return txsel
37}
38func addL2Txs(t *testing.T, txsel *TxSelector, poolL2Txs []common.PoolL2Tx) {
39 for i := 0; i < len(poolL2Txs); i++ {
40 err := txsel.l2db.AddTxTest(&poolL2Txs[i])
41 require.Nil(t, err)
42 }
43}
44
45func addTokens(t *testing.T, tokens []common.Token, db *sqlx.DB) {
46 hdb := historydb.NewHistoryDB(db)
47 assert.NoError(t, hdb.Reorg(-1))
48 assert.NoError(t, hdb.AddBlock(&common.Block{
49 EthBlockNum: 1,
50 }))
51 assert.NoError(t, hdb.AddTokens(tokens))
52}
53
54func TestGetL2TxSelection(t *testing.T) {
55 txsel := initTest(t, test.SetTest0)
56 test.CleanL2DB(txsel.l2db.DB())
57
58 // generate test transactions
59 l1Txs, _, poolL2Txs, tokens := test.GenerateTestTxsFromSet(t, test.SetTest0)
60
61 // add tokens to HistoryDB to avoid breaking FK constrains
62 addTokens(t, tokens, txsel.l2db.DB())
63 // add the first batch of transactions to the TxSelector
64 addL2Txs(t, txsel, poolL2Txs[0])
65
66 _, err := txsel.GetL2TxSelection(0)
67 assert.Nil(t, err)
68
69 _, _, _, err = txsel.GetL1L2TxSelection(0, l1Txs[0])
70 assert.Nil(t, err)
71
72 // txs, err := txsel.GetL2TxSelection(0)
73 // assert.Nil(t, err)
74 // for _, tx := range txs {
75 // fmt.Println(tx.FromIdx, tx.ToIdx, tx.AbsoluteFee)
76 // }
77 // assert.Equal(t, 3, len(txs))
78 // assert.Equal(t, uint64(6), txs[0].AbsoluteFee)
79 // assert.Equal(t, uint64(5), txs[1].AbsoluteFee)
80 // assert.Equal(t, uint64(4), txs[2].AbsoluteFee)
81}