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  }