github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/calls/contracts/centrifuge/assetStore_test.go (about) 1 package centrifuge_test 2 3 import ( 4 "errors" 5 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/contracts/centrifuge" 6 mock_calls "github.com/ChainSafe/chainbridge-core/chains/evm/calls/mock" 7 mock_transactor "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor/mock" 8 "testing" 9 10 "github.com/ethereum/go-ethereum/common" 11 "github.com/golang/mock/gomock" 12 "github.com/stretchr/testify/suite" 13 ) 14 15 type IsCentrifugeAssetStoredTestSuite struct { 16 suite.Suite 17 gomockController *gomock.Controller 18 mockContractCallerDispatcherClient *mock_calls.MockContractCallerDispatcher 19 mockTransactor *mock_transactor.MockTransactor 20 assetStoreContractAddress common.Address 21 assetStoreContract *centrifuge.AssetStoreContract 22 } 23 24 func TestRunIsCentrifugeAssetStoredTestSuite(t *testing.T) { 25 suite.Run(t, new(IsCentrifugeAssetStoredTestSuite)) 26 } 27 28 func (s *IsCentrifugeAssetStoredTestSuite) SetupSuite() {} 29 func (s *IsCentrifugeAssetStoredTestSuite) TearDownSuite() {} 30 func (s *IsCentrifugeAssetStoredTestSuite) SetupTest() { 31 s.gomockController = gomock.NewController(s.T()) 32 s.mockContractCallerDispatcherClient = mock_calls.NewMockContractCallerDispatcher(s.gomockController) 33 s.mockTransactor = mock_transactor.NewMockTransactor(s.gomockController) 34 s.assetStoreContractAddress = common.HexToAddress("0x9A0E6F91E6031C08326764655432f8F9c180fBa0") 35 s.assetStoreContract = centrifuge.NewAssetStoreContract( 36 s.mockContractCallerDispatcherClient, s.assetStoreContractAddress, s.mockTransactor, 37 ) 38 } 39 func (s *IsCentrifugeAssetStoredTestSuite) TearDownTest() {} 40 41 func (s *IsCentrifugeAssetStoredTestSuite) TestCallContractFails() { 42 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 43 gomock.Any(), gomock.Any(), gomock.Any()).Return([]byte{}, errors.New("error")) 44 s.mockContractCallerDispatcherClient.EXPECT().From().Times(1).Return(common.Address{}) 45 isStored, err := s.assetStoreContract.IsCentrifugeAssetStored([32]byte{}) 46 47 s.NotNil(err) 48 s.Equal(isStored, false) 49 } 50 51 func (s *IsCentrifugeAssetStoredTestSuite) TestUnpackingInvalidOutput() { 52 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 53 gomock.Any(), gomock.Any(), gomock.Any()).Return([]byte("invalid"), nil) 54 s.mockContractCallerDispatcherClient.EXPECT().From().Times(1).Return(common.Address{}) 55 isStored, err := s.assetStoreContract.IsCentrifugeAssetStored([32]byte{}) 56 57 s.NotNil(err) 58 s.Equal(isStored, false) 59 } 60 61 func (s *IsCentrifugeAssetStoredTestSuite) TestEmptyOutput() { 62 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 63 gomock.Any(), gomock.Any(), gomock.Any(), 64 ).Return([]byte{}, nil) 65 s.mockContractCallerDispatcherClient.EXPECT().CodeAt( 66 gomock.Any(), gomock.Any(), gomock.Any(), 67 ).Return(nil, errors.New("error")) 68 s.mockContractCallerDispatcherClient.EXPECT().From().Times(1).Return(common.Address{}) 69 70 isStored, err := s.assetStoreContract.IsCentrifugeAssetStored([32]byte{}) 71 72 s.NotNil(err) 73 s.Equal(isStored, false) 74 } 75 76 func (s *IsCentrifugeAssetStoredTestSuite) TestValidStoredAsset() { 77 response := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} 78 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 79 gomock.Any(), gomock.Any(), gomock.Any()).Return(response, nil) 80 s.mockContractCallerDispatcherClient.EXPECT().From().Times(1).Return(common.Address{}) 81 82 isStored, err := s.assetStoreContract.IsCentrifugeAssetStored([32]byte{}) 83 84 s.Nil(err) 85 s.Equal(isStored, true) 86 }