github.com/cosmos/cosmos-sdk@v0.50.10/client/broadcast_test.go (about) 1 package client 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 "github.com/cometbft/cometbft/crypto/tmhash" 9 "github.com/cometbft/cometbft/mempool" 10 "github.com/cometbft/cometbft/rpc/client/mock" 11 coretypes "github.com/cometbft/cometbft/rpc/core/types" 12 cmttypes "github.com/cometbft/cometbft/types" 13 "github.com/stretchr/testify/require" 14 15 "github.com/cosmos/cosmos-sdk/client/flags" 16 sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" 17 ) 18 19 type MockClient struct { 20 mock.Client 21 err error 22 } 23 24 func (c MockClient) BroadcastTxAsync(_ context.Context, _ cmttypes.Tx) (*coretypes.ResultBroadcastTx, error) { 25 return nil, c.err 26 } 27 28 func (c MockClient) BroadcastTxSync(_ context.Context, _ cmttypes.Tx) (*coretypes.ResultBroadcastTx, error) { 29 return nil, c.err 30 } 31 32 func CreateContextWithErrorAndMode(err error, mode string) Context { 33 return Context{ 34 Client: MockClient{err: err}, 35 BroadcastMode: mode, 36 } 37 } 38 39 // Test the correct code is returned when 40 func TestBroadcastError(t *testing.T) { 41 errors := map[error]uint32{ 42 mempool.ErrTxInCache: sdkerrors.ErrTxInMempoolCache.ABCICode(), 43 mempool.ErrTxTooLarge{}: sdkerrors.ErrTxTooLarge.ABCICode(), 44 mempool.ErrMempoolIsFull{}: sdkerrors.ErrMempoolIsFull.ABCICode(), 45 } 46 47 modes := []string{ 48 flags.BroadcastAsync, 49 flags.BroadcastSync, 50 } 51 52 txBytes := []byte{0xA, 0xB} 53 txHash := fmt.Sprintf("%X", tmhash.Sum(txBytes)) 54 55 for _, mode := range modes { 56 for err, code := range errors { 57 ctx := CreateContextWithErrorAndMode(err, mode) 58 resp, returnedErr := ctx.BroadcastTx(txBytes) 59 require.NoError(t, returnedErr) 60 require.Equal(t, code, resp.Code) 61 require.NotEmpty(t, resp.Codespace) 62 require.Equal(t, txHash, resp.TxHash) 63 } 64 } 65 }