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  }