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  }