Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Mock Mempool #3687

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 31 additions & 48 deletions vms/avm/block/builder/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import (
"github.com/ava-labs/avalanchego/vms/avm/state/statemock"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/avm/txs/mempool"
"github.com/ava-labs/avalanchego/vms/avm/txs/mempool/mempoolmock"
"github.com/ava-labs/avalanchego/vms/avm/txs/txsmock"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
Expand Down Expand Up @@ -66,8 +65,8 @@ func TestBuilderBuildBlock(t *testing.T) {
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(nil, errTest)

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

return New(
&txexecutor.Backend{
Expand Down Expand Up @@ -97,8 +96,8 @@ func TestBuilderBuildBlock(t *testing.T) {
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(nil, false)

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

return New(
&txexecutor.Backend{
Expand Down Expand Up @@ -134,15 +133,13 @@ func TestBuilderBuildBlock(t *testing.T) {

unsignedTx := txsmock.NewUnsignedTx(ctrl)
unsignedTx.EXPECT().Visit(gomock.Any()).Return(errTest) // Fail semantic verification
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved
unsignedTx.EXPECT().InputIDs().Return(nil)
tx := &txs.Tx{Unsigned: unsignedTx}

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Peek().Return(tx, true)
mempool.EXPECT().Remove([]*txs.Tx{tx})
mempool.EXPECT().MarkDropped(tx.ID(), errTest)
// Second loop iteration
mempool.EXPECT().Peek().Return(nil, false)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
require.NoError(t, mempool.Add(tx))
mempool.MarkDropped(tx.ID(), errTest)
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved

return New(
&txexecutor.Backend{
Expand Down Expand Up @@ -179,15 +176,12 @@ func TestBuilderBuildBlock(t *testing.T) {
unsignedTx := txsmock.NewUnsignedTx(ctrl)
unsignedTx.EXPECT().Visit(gomock.Any()).Return(nil) // Pass semantic verification
unsignedTx.EXPECT().Visit(gomock.Any()).Return(errTest) // Fail execution
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved
unsignedTx.EXPECT().InputIDs().Return(nil)
tx := &txs.Tx{Unsigned: unsignedTx}

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Peek().Return(tx, true)
mempool.EXPECT().Remove([]*txs.Tx{tx})
mempool.EXPECT().MarkDropped(tx.ID(), errTest)
// Second loop iteration
mempool.EXPECT().Peek().Return(nil, false)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
require.NoError(t, mempool.Add(tx))

return New(
&txexecutor.Backend{
Expand Down Expand Up @@ -225,15 +219,12 @@ func TestBuilderBuildBlock(t *testing.T) {
unsignedTx := txsmock.NewUnsignedTx(ctrl)
unsignedTx.EXPECT().Visit(gomock.Any()).Return(nil) // Pass semantic verification
unsignedTx.EXPECT().Visit(gomock.Any()).Return(nil) // Pass execution
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved
unsignedTx.EXPECT().InputIDs().Return(nil)
tx := &txs.Tx{Unsigned: unsignedTx}

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Peek().Return(tx, true)
mempool.EXPECT().Remove([]*txs.Tx{tx})
mempool.EXPECT().MarkDropped(tx.ID(), errTest)
// Second loop iteration
mempool.EXPECT().Peek().Return(nil, false)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
require.NoError(t, mempool.Add(tx))

return New(
&txexecutor.Backend{
Expand Down Expand Up @@ -276,6 +267,7 @@ func TestBuilderBuildBlock(t *testing.T) {
},
)
unsignedTx1.EXPECT().SetBytes(gomock.Any()).AnyTimes()
unsignedTx1.EXPECT().InputIDs().Return(nil)
tx1 := &txs.Tx{Unsigned: unsignedTx1}
// Set the bytes of tx1 to something other than nil
// so we can check that the remainingSize is updated
Expand All @@ -292,6 +284,7 @@ func TestBuilderBuildBlock(t *testing.T) {
return nil
},
)
unsignedTx2.EXPECT().InputIDs().Return(nil)
tx2 := &txs.Tx{Unsigned: unsignedTx2}

manager := executormock.NewManager(ctrl)
Expand All @@ -311,16 +304,10 @@ func TestBuilderBuildBlock(t *testing.T) {
},
)

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Peek().Return(tx1, true)
mempool.EXPECT().Remove([]*txs.Tx{tx1})
// Second loop iteration
mempool.EXPECT().Peek().Return(tx2, true)
mempool.EXPECT().Remove([]*txs.Tx{tx2})
mempool.EXPECT().MarkDropped(tx2.ID(), blkexecutor.ErrConflictingBlockTxs)
// Third loop iteration
mempool.EXPECT().Peek().Return(nil, false)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
require.NoError(t, mempool.Add(tx1))
require.NoError(t, mempool.Add(tx2))

// To marshal the tx/block
codec := codecmock.NewManager(ctrl)
Expand Down Expand Up @@ -385,14 +372,12 @@ func TestBuilderBuildBlock(t *testing.T) {
},
)
unsignedTx.EXPECT().SetBytes(gomock.Any()).AnyTimes()
unsignedTx.EXPECT().InputIDs().Return(nil)
tx := &txs.Tx{Unsigned: unsignedTx}

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Peek().Return(tx, true)
mempool.EXPECT().Remove([]*txs.Tx{tx})
// Second loop iteration
mempool.EXPECT().Peek().Return(nil, false)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
require.NoError(t, mempool.Add(tx))

// To marshal the tx/block
codec := codecmock.NewManager(ctrl)
Expand Down Expand Up @@ -459,14 +444,12 @@ func TestBuilderBuildBlock(t *testing.T) {
},
)
unsignedTx.EXPECT().SetBytes(gomock.Any()).AnyTimes()
unsignedTx.EXPECT().InputIDs().Return(nil)
tx := &txs.Tx{Unsigned: unsignedTx}

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Peek().Return(tx, true)
mempool.EXPECT().Remove([]*txs.Tx{tx})
// Second loop iteration
mempool.EXPECT().Peek().Return(nil, false)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
require.NoError(t, mempool.Add(tx))

// To marshal the tx/block
codec := codecmock.NewManager(ctrl)
Expand Down
61 changes: 32 additions & 29 deletions vms/avm/block/executor/block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"testing"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/require"
"go.uber.org/mock/gomock"

Expand All @@ -27,7 +28,7 @@ import (
"github.com/ava-labs/avalanchego/vms/avm/state/statemock"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/avm/txs/executor"
"github.com/ava-labs/avalanchego/vms/avm/txs/mempool/mempoolmock"
"github.com/ava-labs/avalanchego/vms/avm/txs/mempool"
"github.com/ava-labs/avalanchego/vms/avm/txs/txsmock"
)

Expand Down Expand Up @@ -127,8 +128,8 @@ func TestBlockVerify(t *testing.T) {
}
mockBlock.EXPECT().Txs().Return([]*txs.Tx{errTx}).AnyTimes()

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().MarkDropped(errTx.ID(), errTest).Times(1)
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
return &Block{
Block: mockBlock,
manager: &manager{
Expand Down Expand Up @@ -285,8 +286,8 @@ func TestBlockVerify(t *testing.T) {
mockParentState.EXPECT().GetLastAccepted().Return(parentID)
mockParentState.EXPECT().GetTimestamp().Return(blockTimestamp)

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().MarkDropped(tx.ID(), errTest).Times(1)
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved
require.NoError(t, err)
return &Block{
Block: mockBlock,
manager: &manager{
Expand Down Expand Up @@ -336,8 +337,8 @@ func TestBlockVerify(t *testing.T) {
mockParentState.EXPECT().GetLastAccepted().Return(parentID)
mockParentState.EXPECT().GetTimestamp().Return(blockTimestamp)

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().MarkDropped(tx.ID(), errTest).Times(1)
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved
require.NoError(t, err)
return &Block{
Block: mockBlock,
manager: &manager{
Expand Down Expand Up @@ -414,8 +415,8 @@ func TestBlockVerify(t *testing.T) {
mockParentState.EXPECT().GetLastAccepted().Return(parentID)
mockParentState.EXPECT().GetTimestamp().Return(blockTimestamp)

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().MarkDropped(tx2.ID(), ErrConflictingBlockTxs).Times(1)
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)
return &Block{
Block: mockBlock,
manager: &manager{
Expand Down Expand Up @@ -509,6 +510,7 @@ func TestBlockVerify(t *testing.T) {
mockUnsignedTx.EXPECT().Visit(gomock.Any()).Return(nil).Times(1) // Syntactic verification passes
mockUnsignedTx.EXPECT().Visit(gomock.Any()).Return(nil).Times(1) // Semantic verification fails
mockUnsignedTx.EXPECT().Visit(gomock.Any()).Return(nil).Times(1) // Execution passes
joshua-kim marked this conversation as resolved.
Show resolved Hide resolved
mockUnsignedTx.EXPECT().InputIDs().AnyTimes()
tx := &txs.Tx{
Unsigned: mockUnsignedTx,
}
Expand All @@ -524,12 +526,13 @@ func TestBlockVerify(t *testing.T) {
mockParentState.EXPECT().GetLastAccepted().Return(parentID)
mockParentState.EXPECT().GetTimestamp().Return(blockTimestamp)

mockMempool := mempoolmock.NewMempool(ctrl)
mockMempool.EXPECT().Remove([]*txs.Tx{tx})
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

return &Block{
Block: mockBlock,
manager: &manager{
mempool: mockMempool,
mempool: mempool,
metrics: metricsmock.NewMetrics(ctrl),
backend: defaultTestBackend(false, nil),
blkIDToState: map[ids.ID]*blockState{
Expand Down Expand Up @@ -597,8 +600,8 @@ func TestBlockAccept(t *testing.T) {
mockBlock.EXPECT().ID().Return(ids.GenerateTestID()).AnyTimes()
mockBlock.EXPECT().Txs().Return([]*txs.Tx{}).AnyTimes()

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Remove(gomock.Any()).AnyTimes()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

return &Block{
Block: mockBlock,
Expand All @@ -620,8 +623,8 @@ func TestBlockAccept(t *testing.T) {
mockBlock.EXPECT().ID().Return(blockID).AnyTimes()
mockBlock.EXPECT().Txs().Return([]*txs.Tx{}).AnyTimes()

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Remove(gomock.Any()).AnyTimes()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

mockManagerState := statemock.NewState(ctrl)
mockManagerState.EXPECT().CommitBatch().Return(nil, errTest)
Expand Down Expand Up @@ -654,8 +657,8 @@ func TestBlockAccept(t *testing.T) {
mockBlock.EXPECT().ID().Return(blockID).AnyTimes()
mockBlock.EXPECT().Txs().Return([]*txs.Tx{}).AnyTimes()

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Remove(gomock.Any()).AnyTimes()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

mockManagerState := statemock.NewState(ctrl)
// Note the returned batch is nil but not used
Expand Down Expand Up @@ -693,8 +696,8 @@ func TestBlockAccept(t *testing.T) {
mockBlock.EXPECT().ID().Return(blockID).AnyTimes()
mockBlock.EXPECT().Txs().Return([]*txs.Tx{}).AnyTimes()

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Remove(gomock.Any()).AnyTimes()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

mockManagerState := statemock.NewState(ctrl)
// Note the returned batch is nil but not used
Expand Down Expand Up @@ -738,8 +741,8 @@ func TestBlockAccept(t *testing.T) {
mockBlock.EXPECT().Parent().Return(ids.GenerateTestID()).AnyTimes()
mockBlock.EXPECT().Txs().Return([]*txs.Tx{}).AnyTimes()

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Remove(gomock.Any()).AnyTimes()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

mockManagerState := statemock.NewState(ctrl)
// Note the returned batch is nil but not used
Expand Down Expand Up @@ -810,6 +813,7 @@ func TestBlockReject(t *testing.T) {
unsignedValidTx := txsmock.NewUnsignedTx(ctrl)
unsignedValidTx.EXPECT().SetBytes(gomock.Any())
unsignedValidTx.EXPECT().Visit(gomock.Any()).Return(nil).AnyTimes() // Passes verification and execution
unsignedValidTx.EXPECT().InputIDs().Return(nil)

unsignedSyntacticallyInvalidTx := txsmock.NewUnsignedTx(ctrl)
unsignedSyntacticallyInvalidTx.EXPECT().SetBytes(gomock.Any())
Expand Down Expand Up @@ -843,9 +847,8 @@ func TestBlockReject(t *testing.T) {
executionFailsTx,
})

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Add(validTx).Return(nil) // Only add the one that passes verification
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

lastAcceptedID := ids.GenerateTestID()
mockState := statemock.NewState(ctrl)
Expand Down Expand Up @@ -879,10 +882,12 @@ func TestBlockReject(t *testing.T) {
unsignedTx1 := txsmock.NewUnsignedTx(ctrl)
unsignedTx1.EXPECT().SetBytes(gomock.Any())
unsignedTx1.EXPECT().Visit(gomock.Any()).Return(nil).AnyTimes() // Passes verification and execution
unsignedTx1.EXPECT().InputIDs().Return(nil)

unsignedTx2 := txsmock.NewUnsignedTx(ctrl)
unsignedTx2.EXPECT().SetBytes(gomock.Any())
unsignedTx2.EXPECT().Visit(gomock.Any()).Return(nil).AnyTimes() // Passes verification and execution
unsignedTx2.EXPECT().InputIDs().Return(nil)

// Give each tx a unique ID
tx1 := &txs.Tx{Unsigned: unsignedTx1}
Expand All @@ -895,10 +900,8 @@ func TestBlockReject(t *testing.T) {
tx2,
})

mempool := mempoolmock.NewMempool(ctrl)
mempool.EXPECT().Add(tx1).Return(nil)
mempool.EXPECT().Add(tx2).Return(nil)
mempool.EXPECT().RequestBuildBlock()
mempool, err := mempool.New("", prometheus.NewRegistry(), nil)
require.NoError(t, err)

lastAcceptedID := ids.GenerateTestID()
mockState := statemock.NewState(ctrl)
Expand Down
Loading
Loading