erigon-pulse/cmd/rpcdaemon/commands/txpool_api_test.go

70 lines
2.5 KiB
Go
Raw Normal View History

package commands
import (
"bytes"
"fmt"
"testing"
2021-06-27 06:41:21 +00:00
"github.com/holiman/uint256"
"github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
txPoolProto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
2021-09-29 01:36:25 +00:00
"github.com/ledgerwatch/erigon-lib/kv/kvcache"
2021-06-29 10:00:22 +00:00
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest"
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/hexutil"
2021-06-27 06:41:21 +00:00
"github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/params"
"github.com/ledgerwatch/erigon/rpc/rpccfg"
"github.com/ledgerwatch/erigon/turbo/rpchelper"
2021-11-14 04:08:52 +00:00
"github.com/ledgerwatch/erigon/turbo/snapshotsync"
2021-06-27 06:41:21 +00:00
"github.com/ledgerwatch/erigon/turbo/stages"
"github.com/stretchr/testify/require"
)
func TestTxPoolContent(t *testing.T) {
m, require := stages.MockWithTxPool(t), require.New(t)
2022-10-05 05:54:31 +00:00
if m.HistoryV3 {
t.Skip("HistoryV3: please implement StateStream support")
}
2021-06-27 06:41:21 +00:00
chain, err := core.GenerateChain(m.ChainConfig, m.Genesis, m.Engine, m.DB, 1, func(i int, b *core.BlockGen) {
b.SetCoinbase(common.Address{1})
}, false /* intermediateHashes */)
2021-06-27 06:41:21 +00:00
require.NoError(err)
2021-10-25 10:15:56 +00:00
err = m.InsertChain(chain)
require.NoError(err)
2021-06-27 06:41:21 +00:00
2021-06-29 10:00:22 +00:00
ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, m)
txPool := txpool.NewTxpoolClient(conn)
ff := rpchelper.New(ctx, nil, txPool, txpool.NewMiningClient(conn), func() {})
2022-10-05 05:54:31 +00:00
agg := m.HistoryV3Components()
api := NewTxPoolAPI(NewBaseApi(ff, kvcache.New(kvcache.DefaultCoherentConfig), snapshotsync.NewBlockReader(), agg, false, rpccfg.DefaultEvmCallTimeout), m.DB, txPool)
2021-06-27 06:41:21 +00:00
expectValue := uint64(1234)
txn, err := types.SignTx(types.NewTransaction(0, common.Address{1}, uint256.NewInt(expectValue), params.TxGas, uint256.NewInt(10*params.GWei), nil), *types.LatestSignerForChainID(m.ChainConfig.ChainID), m.Key)
2021-06-27 06:41:21 +00:00
require.NoError(err)
buf := bytes.NewBuffer(nil)
2021-06-27 06:41:21 +00:00
err = txn.MarshalBinary(buf)
require.NoError(err)
reply, err := txPool.Add(ctx, &txpool.AddRequest{RlpTxs: [][]byte{buf.Bytes()}})
2021-06-27 06:41:21 +00:00
require.NoError(err)
for _, res := range reply.Imported {
require.Equal(res, txPoolProto.ImportResult_SUCCESS, fmt.Sprintf("%s", reply.Errors))
}
content, err := api.Content(ctx)
2021-06-27 06:41:21 +00:00
require.NoError(err)
2021-06-27 06:41:21 +00:00
sender := m.Address.String()
require.Equal(1, len(content["pending"][sender]))
require.Equal(expectValue, content["pending"][sender]["0"].Value.ToInt().Uint64())
status, err := api.Status(ctx)
require.NoError(err)
2021-09-08 05:31:51 +00:00
require.Len(status, 3)
require.Equal(status["pending"], hexutil.Uint(1))
require.Equal(status["queued"], hexutil.Uint(0))
}