github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/calls/transactor/signAndSend/signAndSend_test.go (about) 1 package signAndSend_test 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/evmtransaction" 8 mock_calls "github.com/ChainSafe/chainbridge-core/chains/evm/calls/mock" 9 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor" 10 mock_transactor "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor/mock" 11 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor/signAndSend" 12 "github.com/ethereum/go-ethereum/common" 13 "github.com/ethereum/go-ethereum/core/types" 14 "github.com/golang/mock/gomock" 15 "github.com/stretchr/testify/suite" 16 ) 17 18 type TransactorTestSuite struct { 19 suite.Suite 20 gomockController *gomock.Controller 21 mockContractCallerDispatcherClient *mock_calls.MockContractCallerDispatcher 22 mockTransactor *mock_transactor.MockTransactor 23 mockGasPricer *mock_calls.MockGasPricer 24 } 25 26 func TestSignAndSendTestSuite(t *testing.T) { 27 suite.Run(t, new(TransactorTestSuite)) 28 } 29 30 func (s *TransactorTestSuite) SetupSuite() {} 31 func (s *TransactorTestSuite) TearDownSuite() {} 32 func (s *TransactorTestSuite) SetupTest() { 33 s.gomockController = gomock.NewController(s.T()) 34 s.mockContractCallerDispatcherClient = mock_calls.NewMockContractCallerDispatcher(s.gomockController) 35 s.mockTransactor = mock_transactor.NewMockTransactor(s.gomockController) 36 s.mockGasPricer = mock_calls.NewMockGasPricer(s.gomockController) 37 } 38 39 func (s *TransactorTestSuite) TestTransactor_SignAndSend_Success() { 40 var byteData = []byte{47, 47, 241, 93, 159, 45, 240, 254, 210, 199, 118, 72, 222, 88, 96, 164, 204, 80, 140, 208, 129, 140, 133, 184, 184, 161, 171, 76, 238, 239, 141, 152, 28, 137, 86, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 48, 181, 109, 237, 4, 127, 230, 34, 95, 112, 4, 234, 75, 225, 174, 112, 201, 2, 106} 41 42 s.mockContractCallerDispatcherClient.EXPECT().LockNonce() 43 s.mockContractCallerDispatcherClient.EXPECT().UnsafeNonce().Return(big.NewInt(1), nil) 44 s.mockGasPricer.EXPECT().GasPrice(gomock.Any()).Return([]*big.Int{big.NewInt(1)}, nil) 45 s.mockContractCallerDispatcherClient.EXPECT().SignAndSendTransaction(gomock.Any(), gomock.Any()).Return(common.Hash{1, 2, 3, 4, 5}, nil) 46 s.mockContractCallerDispatcherClient.EXPECT().WaitAndReturnTxReceipt(gomock.Any()).Return(&types.Receipt{}, nil) 47 s.mockContractCallerDispatcherClient.EXPECT().UnsafeIncreaseNonce().Return(nil) 48 s.mockContractCallerDispatcherClient.EXPECT().UnlockNonce() 49 50 txFabric := evmtransaction.NewTransaction 51 var trans = signAndSend.NewSignAndSendTransactor( 52 txFabric, 53 s.mockGasPricer, 54 s.mockContractCallerDispatcherClient, 55 ) 56 txHash, err := trans.Transact( 57 &common.Address{}, 58 byteData, 59 transactor.TransactOptions{}, 60 ) 61 62 s.Nil(err) 63 // without prepare flag omitted SignAndSendTransactor is used and output is normal tx hash 64 s.Equal("0x0102030405000000000000000000000000000000000000000000000000000000", txHash.String()) 65 }