wormhole/node/pkg/watchers/evm/finalizers/arbitrum_test.go

132 lines
3.4 KiB
Go

package finalizers
import (
"context"
"math/big"
"testing"
"github.com/certusone/wormhole/node/pkg/watchers/evm/connectors"
ethCommon "github.com/ethereum/go-ethereum/common"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)
// mockL1Finalizer implements the L1Finalizer interface for testing purposes.
type mockL1Finalizer struct {
LatestFinalizedBlockNumber uint64
}
func (m *mockL1Finalizer) GetLatestFinalizedBlockNumber() uint64 {
return m.LatestFinalizedBlockNumber
}
func TestArbitrumErrorReturnedIfBlockIsNil(t *testing.T) {
ctx := context.Background()
logger := zap.NewNop()
l1Finalizer := mockL1Finalizer{LatestFinalizedBlockNumber: 125}
finalizer := NewArbitrumFinalizer(logger, &l1Finalizer)
assert.NotNil(t, finalizer)
_, err := finalizer.IsBlockFinalized(ctx, nil)
require.Error(t, err)
}
func TestArbitrumErrorReturnedIfL1BlockIsNil(t *testing.T) {
ctx := context.Background()
logger := zap.NewNop()
l1Finalizer := mockL1Finalizer{LatestFinalizedBlockNumber: 125}
finalizer := NewArbitrumFinalizer(logger, &l1Finalizer)
assert.NotNil(t, finalizer)
block := &connectors.NewBlock{
Number: big.NewInt(125),
Hash: ethCommon.Hash{},
L1BlockNumber: nil,
}
_, err := finalizer.IsBlockFinalized(ctx, block)
require.Error(t, err)
}
func TestArbitrumNotFinalizedIfNoFinalizedL1BlockYet(t *testing.T) {
ctx := context.Background()
logger := zap.NewNop()
l1Finalizer := mockL1Finalizer{}
finalizer := NewArbitrumFinalizer(logger, &l1Finalizer)
assert.NotNil(t, finalizer)
block := &connectors.NewBlock{
Number: big.NewInt(125),
Hash: ethCommon.Hash{},
L1BlockNumber: big.NewInt(225),
}
finalized, err := finalizer.IsBlockFinalized(ctx, block)
require.NoError(t, err)
assert.Equal(t, false, finalized)
}
func TestArbitrumNotFinalizedWhenFinalizedL1IsLessThanTargetL1(t *testing.T) {
ctx := context.Background()
logger := zap.NewNop()
l1Finalizer := mockL1Finalizer{LatestFinalizedBlockNumber: 225}
finalizer := NewArbitrumFinalizer(logger, &l1Finalizer)
assert.NotNil(t, finalizer)
block := &connectors.NewBlock{
Number: big.NewInt(127),
Hash: ethCommon.Hash{},
L1BlockNumber: big.NewInt(226),
}
finalized, err := finalizer.IsBlockFinalized(ctx, block)
require.NoError(t, err)
assert.Equal(t, false, finalized)
}
func TestArbitrumIsFinalizedWhenFinalizedL1IsEqualsTargetL1(t *testing.T) {
ctx := context.Background()
logger := zap.NewNop()
l1Finalizer := mockL1Finalizer{LatestFinalizedBlockNumber: 225}
finalizer := NewArbitrumFinalizer(logger, &l1Finalizer)
assert.NotNil(t, finalizer)
block := &connectors.NewBlock{
Number: big.NewInt(125),
Hash: ethCommon.Hash{},
L1BlockNumber: big.NewInt(225),
}
finalized, err := finalizer.IsBlockFinalized(ctx, block)
require.NoError(t, err)
assert.Equal(t, true, finalized)
}
func TestArbitrumIsFinalizedWhenFinalizedL1IsGreaterThanTargetL1(t *testing.T) {
ctx := context.Background()
logger := zap.NewNop()
l1Finalizer := mockL1Finalizer{LatestFinalizedBlockNumber: 227}
finalizer := NewArbitrumFinalizer(logger, &l1Finalizer)
assert.NotNil(t, finalizer)
block := &connectors.NewBlock{
Number: big.NewInt(125),
Hash: ethCommon.Hash{},
L1BlockNumber: big.NewInt(225),
}
finalized, err := finalizer.IsBlockFinalized(ctx, block)
require.NoError(t, err)
assert.Equal(t, true, finalized)
}