github.com/MetalBlockchain/metalgo@v1.11.9/snow/engine/snowman/block/test_state_syncable_vm.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package block
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  var (
    15  	_ StateSyncableVM = (*TestStateSyncableVM)(nil)
    16  
    17  	errStateSyncEnabled           = errors.New("unexpectedly called StateSyncEnabled")
    18  	errStateSyncGetOngoingSummary = errors.New("unexpectedly called StateSyncGetOngoingSummary")
    19  	errGetLastStateSummary        = errors.New("unexpectedly called GetLastStateSummary")
    20  	errParseStateSummary          = errors.New("unexpectedly called ParseStateSummary")
    21  	errGetStateSummary            = errors.New("unexpectedly called GetStateSummary")
    22  )
    23  
    24  type TestStateSyncableVM struct {
    25  	T *testing.T
    26  
    27  	CantStateSyncEnabled,
    28  	CantStateSyncGetOngoingSummary,
    29  	CantGetLastStateSummary,
    30  	CantParseStateSummary,
    31  	CantGetStateSummary bool
    32  
    33  	StateSyncEnabledF           func(context.Context) (bool, error)
    34  	GetOngoingSyncStateSummaryF func(context.Context) (StateSummary, error)
    35  	GetLastStateSummaryF        func(context.Context) (StateSummary, error)
    36  	ParseStateSummaryF          func(ctx context.Context, summaryBytes []byte) (StateSummary, error)
    37  	GetStateSummaryF            func(ctx context.Context, summaryHeight uint64) (StateSummary, error)
    38  }
    39  
    40  func (vm *TestStateSyncableVM) StateSyncEnabled(ctx context.Context) (bool, error) {
    41  	if vm.StateSyncEnabledF != nil {
    42  		return vm.StateSyncEnabledF(ctx)
    43  	}
    44  	if vm.CantStateSyncEnabled && vm.T != nil {
    45  		require.FailNow(vm.T, errStateSyncEnabled.Error())
    46  	}
    47  	return false, errStateSyncEnabled
    48  }
    49  
    50  func (vm *TestStateSyncableVM) GetOngoingSyncStateSummary(ctx context.Context) (StateSummary, error) {
    51  	if vm.GetOngoingSyncStateSummaryF != nil {
    52  		return vm.GetOngoingSyncStateSummaryF(ctx)
    53  	}
    54  	if vm.CantStateSyncGetOngoingSummary && vm.T != nil {
    55  		require.FailNow(vm.T, errStateSyncGetOngoingSummary.Error())
    56  	}
    57  	return nil, errStateSyncGetOngoingSummary
    58  }
    59  
    60  func (vm *TestStateSyncableVM) GetLastStateSummary(ctx context.Context) (StateSummary, error) {
    61  	if vm.GetLastStateSummaryF != nil {
    62  		return vm.GetLastStateSummaryF(ctx)
    63  	}
    64  	if vm.CantGetLastStateSummary && vm.T != nil {
    65  		require.FailNow(vm.T, errGetLastStateSummary.Error())
    66  	}
    67  	return nil, errGetLastStateSummary
    68  }
    69  
    70  func (vm *TestStateSyncableVM) ParseStateSummary(ctx context.Context, summaryBytes []byte) (StateSummary, error) {
    71  	if vm.ParseStateSummaryF != nil {
    72  		return vm.ParseStateSummaryF(ctx, summaryBytes)
    73  	}
    74  	if vm.CantParseStateSummary && vm.T != nil {
    75  		require.FailNow(vm.T, errParseStateSummary.Error())
    76  	}
    77  	return nil, errParseStateSummary
    78  }
    79  
    80  func (vm *TestStateSyncableVM) GetStateSummary(ctx context.Context, summaryHeight uint64) (StateSummary, error) {
    81  	if vm.GetStateSummaryF != nil {
    82  		return vm.GetStateSummaryF(ctx, summaryHeight)
    83  	}
    84  	if vm.CantGetStateSummary && vm.T != nil {
    85  		require.FailNow(vm.T, errGetStateSummary.Error())
    86  	}
    87  	return nil, errGetStateSummary
    88  }