github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/client/context/broadcast_test.go (about) 1 package context 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/fibonacci-chain/fbc/libs/tendermint/mempool" 8 "github.com/fibonacci-chain/fbc/libs/tendermint/rpc/client/mock" 9 ctypes "github.com/fibonacci-chain/fbc/libs/tendermint/rpc/core/types" 10 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 11 "github.com/stretchr/testify/require" 12 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags" 14 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 15 ) 16 17 type MockClient struct { 18 mock.Client 19 err error 20 } 21 22 func (c MockClient) BroadcastTxCommit(tx tmtypes.Tx) (*ctypes.ResultBroadcastTxCommit, error) { 23 return nil, c.err 24 } 25 26 func (c MockClient) BroadcastTxAsync(tx tmtypes.Tx) (*ctypes.ResultBroadcastTx, error) { 27 return nil, c.err 28 } 29 30 func (c MockClient) BroadcastTxSync(tx tmtypes.Tx) (*ctypes.ResultBroadcastTx, error) { 31 return nil, c.err 32 } 33 34 func (c MockClient) BlockchainInfo(minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error) { 35 return &ctypes.ResultBlockchainInfo{ 36 LastHeight: 0, 37 }, nil 38 } 39 40 func (c MockClient) LatestBlockNumber() (int64, error) { 41 return 0, nil 42 } 43 44 func CreateContextWithErrorAndMode(err error, mode string) CLIContext { 45 return CLIContext{ 46 Client: MockClient{err: err}, 47 BroadcastMode: mode, 48 } 49 } 50 51 // Test the correct code is returned when 52 func TestBroadcastError(t *testing.T) { 53 errors := map[error]uint32{ 54 mempool.ErrTxInCache: sdkerrors.ErrTxInMempoolCache.ABCICode(), 55 mempool.ErrTxTooLarge{}: sdkerrors.ErrTxTooLarge.ABCICode(), 56 mempool.ErrMempoolIsFull{}: sdkerrors.ErrMempoolIsFull.ABCICode(), 57 } 58 59 modes := []string{ 60 flags.BroadcastAsync, 61 flags.BroadcastBlock, 62 flags.BroadcastSync, 63 } 64 65 txBytes := []byte{0xA, 0xB} 66 txHash := fmt.Sprintf("%X", tmtypes.Tx(txBytes).Hash(0)) 67 68 for _, mode := range modes { 69 for err, code := range errors { 70 ctx := CreateContextWithErrorAndMode(err, mode) 71 resp, returnedErr := ctx.BroadcastTx(txBytes) 72 require.NoError(t, returnedErr) 73 require.Equal(t, code, resp.Code) 74 require.Equal(t, txHash, resp.TxHash) 75 } 76 } 77 78 }