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