github.com/MetalBlockchain/metalgo@v1.11.9/api/info/service_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 info 5 6 import ( 7 "errors" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 "go.uber.org/mock/gomock" 12 13 "github.com/MetalBlockchain/metalgo/ids" 14 "github.com/MetalBlockchain/metalgo/utils/logging" 15 "github.com/MetalBlockchain/metalgo/vms" 16 ) 17 18 var errTest = errors.New("non-nil error") 19 20 type getVMsTest struct { 21 info *Info 22 ctrl *gomock.Controller 23 mockVMManager *vms.MockManager 24 } 25 26 func initGetVMsTest(t *testing.T) *getVMsTest { 27 ctrl := gomock.NewController(t) 28 mockVMManager := vms.NewMockManager(ctrl) 29 return &getVMsTest{ 30 info: &Info{ 31 Parameters: Parameters{ 32 VMManager: mockVMManager, 33 }, 34 log: logging.NoLog{}, 35 }, 36 ctrl: ctrl, 37 mockVMManager: mockVMManager, 38 } 39 } 40 41 // Tests GetVMs in the happy-case 42 func TestGetVMsSuccess(t *testing.T) { 43 require := require.New(t) 44 45 resources := initGetVMsTest(t) 46 47 id1 := ids.GenerateTestID() 48 id2 := ids.GenerateTestID() 49 50 vmIDs := []ids.ID{id1, id2} 51 // every vm is at least aliased to itself. 52 alias1 := []string{id1.String(), "vm1-alias-1", "vm1-alias-2"} 53 alias2 := []string{id2.String(), "vm2-alias-1", "vm2-alias-2"} 54 // we expect that we dedup the redundant alias of vmId. 55 expectedVMRegistry := map[ids.ID][]string{ 56 id1: alias1[1:], 57 id2: alias2[1:], 58 } 59 60 resources.mockVMManager.EXPECT().ListFactories().Times(1).Return(vmIDs, nil) 61 resources.mockVMManager.EXPECT().Aliases(id1).Times(1).Return(alias1, nil) 62 resources.mockVMManager.EXPECT().Aliases(id2).Times(1).Return(alias2, nil) 63 64 reply := GetVMsReply{} 65 require.NoError(resources.info.GetVMs(nil, nil, &reply)) 66 require.Equal(expectedVMRegistry, reply.VMs) 67 } 68 69 // Tests GetVMs if we fail to list our vms. 70 func TestGetVMsVMsListFactoriesFails(t *testing.T) { 71 resources := initGetVMsTest(t) 72 73 resources.mockVMManager.EXPECT().ListFactories().Times(1).Return(nil, errTest) 74 75 reply := GetVMsReply{} 76 err := resources.info.GetVMs(nil, nil, &reply) 77 require.ErrorIs(t, err, errTest) 78 } 79 80 // Tests GetVMs if we can't get our vm aliases. 81 func TestGetVMsGetAliasesFails(t *testing.T) { 82 resources := initGetVMsTest(t) 83 84 id1 := ids.GenerateTestID() 85 id2 := ids.GenerateTestID() 86 vmIDs := []ids.ID{id1, id2} 87 alias1 := []string{id1.String(), "vm1-alias-1", "vm1-alias-2"} 88 89 resources.mockVMManager.EXPECT().ListFactories().Times(1).Return(vmIDs, nil) 90 resources.mockVMManager.EXPECT().Aliases(id1).Times(1).Return(alias1, nil) 91 resources.mockVMManager.EXPECT().Aliases(id2).Times(1).Return(nil, errTest) 92 93 reply := GetVMsReply{} 94 err := resources.info.GetVMs(nil, nil, &reply) 95 require.ErrorIs(t, err, errTest) 96 }