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