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  }