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 }