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  }