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  }