mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 19:50:36 +00:00
6272559fb7
Instead of getting the pending block with latest payload id, we just store the latest block built and serve it in remote backend
69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
package jsonrpc
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/ledgerwatch/erigon/consensus/ethash"
|
|
"github.com/ledgerwatch/erigon/rpc/rpccfg"
|
|
|
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
|
|
"github.com/ledgerwatch/erigon-lib/kv/kvcache"
|
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest"
|
|
"github.com/ledgerwatch/erigon/core/types"
|
|
"github.com/ledgerwatch/erigon/rlp"
|
|
"github.com/ledgerwatch/erigon/turbo/rpchelper"
|
|
"github.com/ledgerwatch/erigon/turbo/stages"
|
|
"github.com/ledgerwatch/log/v3"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPendingBlock(t *testing.T) {
|
|
m := stages.Mock(t)
|
|
ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, stages.Mock(t))
|
|
mining := txpool.NewMiningClient(conn)
|
|
ff := rpchelper.New(ctx, nil, nil, mining, func() {}, m.Log)
|
|
stateCache := kvcache.New(kvcache.DefaultCoherentConfig)
|
|
engine := ethash.NewFaker()
|
|
api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, nil, false, rpccfg.DefaultEvmCallTimeout, engine,
|
|
m.Dirs), nil, nil, nil, mining, 5000000, 100_000, log.New())
|
|
expect := uint64(12345)
|
|
b, err := rlp.EncodeToBytes(types.NewBlockWithHeader(&types.Header{Number: big.NewInt(int64(expect))}))
|
|
require.NoError(t, err)
|
|
ch, id := ff.SubscribePendingBlock(1)
|
|
defer ff.UnsubscribePendingBlock(id)
|
|
|
|
ff.HandlePendingBlock(&txpool.OnPendingBlockReply{RplBlock: b})
|
|
block := api.pendingBlock()
|
|
|
|
require.Equal(t, block.NumberU64(), expect)
|
|
select {
|
|
case got := <-ch:
|
|
require.Equal(t, expect, got.NumberU64())
|
|
case <-time.After(100 * time.Millisecond):
|
|
t.Fatalf("timeout waiting for expected notification")
|
|
}
|
|
}
|
|
|
|
func TestPendingLogs(t *testing.T) {
|
|
m := stages.Mock(t)
|
|
ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, m)
|
|
mining := txpool.NewMiningClient(conn)
|
|
ff := rpchelper.New(ctx, nil, nil, mining, func() {}, m.Log)
|
|
expect := []byte{211}
|
|
|
|
ch, id := ff.SubscribePendingLogs(1)
|
|
defer ff.UnsubscribePendingLogs(id)
|
|
|
|
b, err := rlp.EncodeToBytes([]*types.Log{{Data: expect}})
|
|
require.NoError(t, err)
|
|
ff.HandlePendingLogs(&txpool.OnPendingLogsReply{RplLogs: b})
|
|
select {
|
|
case logs := <-ch:
|
|
require.Equal(t, expect, logs[0].Data)
|
|
case <-time.After(100 * time.Millisecond):
|
|
t.Fatalf("timeout waiting for expected notification")
|
|
}
|
|
}
|