You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

116 lines
3.4 KiB

package txselector
import (
"fmt"
"math/big"
"testing"
ethCommon "github.com/ethereum/go-ethereum/common"
"github.com/hermeznetwork/hermez-node/tx-selector/common"
"github.com/hermeznetwork/hermez-node/tx-selector/mock"
"github.com/stretchr/testify/assert"
)
func initMockDB() *mock.MockDB {
m := mock.New()
txs := []common.Tx{
{
FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
TokenID: 1,
Nonce: 1,
UserFeeAbsolute: 1,
},
{
FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
TokenID: 1,
Nonce: 2,
UserFeeAbsolute: 3,
},
{
FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
TokenID: 1,
Nonce: 4,
UserFeeAbsolute: 6,
},
{
FromEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
ToEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
TokenID: 1,
Nonce: 4,
UserFeeAbsolute: 4,
},
{
FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
ToEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
TokenID: 1,
Nonce: 1,
UserFeeAbsolute: 4,
},
{
FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
ToEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
TokenID: 1,
Nonce: 2,
UserFeeAbsolute: 3,
},
{
FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
ToEthAddr: ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
TokenID: 1,
Nonce: 3,
UserFeeAbsolute: 5,
},
{
// this tx will not be selected, as the ToEthAddr does not have an account
FromEthAddr: ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
ToEthAddr: ethCommon.HexToAddress("0x4a2CFDF534725D8D6e07Af97B237Fff19BDb3c93"),
TokenID: 1,
Nonce: 4,
UserFeeAbsolute: 5,
},
}
// n := 0
nBatch := 0
for i := 0; i < len(txs); i++ {
// for i := 0; i < nBatch; i++ {
// for j := 0; j < len(txs)/nBatch; j++ {
// store tx
m.AddTx(uint64(nBatch), txs[i])
// store account if not yet
accountID := getAccountID(txs[i].FromEthAddr, txs[i].TokenID)
if _, ok := m.AccountDB[accountID]; !ok {
account := common.Account{
EthAddr: txs[i].FromEthAddr,
TokenID: txs[i].TokenID,
Nonce: 0,
Balance: big.NewInt(0),
}
m.AccountDB[accountID] = account
}
// n++
// }
}
return m
}
func TestGetL2TxSelection(t *testing.T) {
mockDB := initMockDB()
txsel := NewTxSelector(mockDB, 3, 3, 3)
txs, err := txsel.GetL2TxSelection(0)
assert.Nil(t, err)
for _, tx := range txs {
fmt.Println(tx.FromEthAddr.String(), tx.ToEthAddr.String(), tx.UserFeeAbsolute)
}
assert.Equal(t, 3, len(txs))
assert.Equal(t, uint64(6), txs[0].UserFeeAbsolute)
assert.Equal(t, uint64(5), txs[1].UserFeeAbsolute)
assert.Equal(t, uint64(4), txs[2].UserFeeAbsolute)
}