github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/block/executor/manager_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package executor 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 "go.uber.org/mock/gomock" 11 12 "github.com/ava-labs/avalanchego/database" 13 "github.com/ava-labs/avalanchego/ids" 14 "github.com/ava-labs/avalanchego/vms/platformvm/block" 15 "github.com/ava-labs/avalanchego/vms/platformvm/state" 16 ) 17 18 func TestGetBlock(t *testing.T) { 19 require := require.New(t) 20 ctrl := gomock.NewController(t) 21 22 statelessBlk, err := block.NewApricotCommitBlock(ids.GenerateTestID() /*parent*/, 2 /*height*/) 23 require.NoError(err) 24 state := state.NewMockState(ctrl) 25 manager := &manager{ 26 backend: &backend{ 27 state: state, 28 blkIDToState: map[ids.ID]*blockState{}, 29 }, 30 } 31 32 { 33 // Case: block isn't in memory or database 34 state.EXPECT().GetStatelessBlock(statelessBlk.ID()).Return(nil, database.ErrNotFound).Times(1) 35 _, err := manager.GetBlock(statelessBlk.ID()) 36 require.ErrorIs(err, database.ErrNotFound) 37 } 38 { 39 // Case: block isn't in memory but is in database. 40 state.EXPECT().GetStatelessBlock(statelessBlk.ID()).Return(statelessBlk, nil).Times(1) 41 gotBlk, err := manager.GetBlock(statelessBlk.ID()) 42 require.NoError(err) 43 require.Equal(statelessBlk.ID(), gotBlk.ID()) 44 require.IsType(&Block{}, gotBlk) 45 innerBlk := gotBlk.(*Block) 46 require.Equal(statelessBlk, innerBlk.Block) 47 require.Equal(manager, innerBlk.manager) 48 } 49 { 50 // Case: block is in memory 51 manager.backend.blkIDToState[statelessBlk.ID()] = &blockState{ 52 statelessBlock: statelessBlk, 53 } 54 gotBlk, err := manager.GetBlock(statelessBlk.ID()) 55 require.NoError(err) 56 require.Equal(statelessBlk.ID(), gotBlk.ID()) 57 require.IsType(&Block{}, gotBlk) 58 innerBlk := gotBlk.(*Block) 59 require.Equal(statelessBlk, innerBlk.Block) 60 require.Equal(manager, innerBlk.manager) 61 } 62 } 63 64 func TestManagerLastAccepted(t *testing.T) { 65 lastAcceptedID := ids.GenerateTestID() 66 manager := &manager{ 67 backend: &backend{ 68 lastAccepted: lastAcceptedID, 69 }, 70 } 71 72 require.Equal(t, lastAcceptedID, manager.LastAccepted()) 73 } 74 75 func TestManagerSetPreference(t *testing.T) { 76 require := require.New(t) 77 78 initialPreference := ids.GenerateTestID() 79 manager := &manager{ 80 preferred: initialPreference, 81 } 82 require.False(manager.SetPreference(initialPreference)) 83 84 newPreference := ids.GenerateTestID() 85 require.True(manager.SetPreference(newPreference)) 86 require.False(manager.SetPreference(newPreference)) 87 require.True(manager.SetPreference(initialPreference)) 88 }