arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}