github.com/cosmos/cosmos-sdk@v0.50.10/x/auth/client/tx_test.go (about)

     1  package client_test
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/cosmos/cosmos-sdk/client"
    11  	"github.com/cosmos/cosmos-sdk/codec"
    12  	"github.com/cosmos/cosmos-sdk/testutil"
    13  	sdk "github.com/cosmos/cosmos-sdk/types"
    14  	moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
    15  	"github.com/cosmos/cosmos-sdk/x/auth"
    16  	authclient "github.com/cosmos/cosmos-sdk/x/auth/client"
    17  )
    18  
    19  func TestParseQueryResponse(t *testing.T) {
    20  	simRes := &sdk.SimulationResponse{
    21  		GasInfo: sdk.GasInfo{GasUsed: 10, GasWanted: 20},
    22  		Result:  &sdk.Result{Data: []byte("tx data"), Log: "log"},
    23  	}
    24  
    25  	bz, err := codec.ProtoMarshalJSON(simRes, nil)
    26  	require.NoError(t, err)
    27  
    28  	res, err := authclient.ParseQueryResponse(bz)
    29  	require.NoError(t, err)
    30  	require.Equal(t, 10, int(res.GasInfo.GasUsed))
    31  	require.NotNil(t, res.Result)
    32  
    33  	res, err = authclient.ParseQueryResponse([]byte("fuzzy"))
    34  	require.Error(t, err)
    35  }
    36  
    37  func TestReadTxFromFile(t *testing.T) {
    38  	t.Parallel()
    39  
    40  	encodingConfig := moduletestutil.MakeTestEncodingConfig()
    41  	interfaceRegistry := encodingConfig.InterfaceRegistry
    42  	txConfig := encodingConfig.TxConfig
    43  
    44  	clientCtx := client.Context{}
    45  	clientCtx = clientCtx.WithInterfaceRegistry(interfaceRegistry)
    46  	clientCtx = clientCtx.WithTxConfig(txConfig)
    47  
    48  	feeAmount := sdk.Coins{sdk.NewInt64Coin("atom", 150)}
    49  	gasLimit := uint64(50000)
    50  	memo := "foomemo"
    51  
    52  	txBuilder := txConfig.NewTxBuilder()
    53  	txBuilder.SetFeeAmount(feeAmount)
    54  	txBuilder.SetGasLimit(gasLimit)
    55  	txBuilder.SetMemo(memo)
    56  
    57  	// Write it to the file
    58  	encodedTx, err := txConfig.TxJSONEncoder()(txBuilder.GetTx())
    59  	require.NoError(t, err)
    60  
    61  	jsonTxFile := testutil.WriteToNewTempFile(t, string(encodedTx))
    62  	// Read it back
    63  	decodedTx, err := authclient.ReadTxFromFile(clientCtx, jsonTxFile.Name())
    64  	require.NoError(t, err)
    65  	txBldr, err := txConfig.WrapTxBuilder(decodedTx)
    66  	require.NoError(t, err)
    67  	t.Log(txBuilder.GetTx())
    68  	t.Log(txBldr.GetTx())
    69  	require.Equal(t, txBuilder.GetTx().GetMemo(), txBldr.GetTx().GetMemo())
    70  	require.Equal(t, txBuilder.GetTx().GetFee(), txBldr.GetTx().GetFee())
    71  }
    72  
    73  func TestBatchScanner_Scan(t *testing.T) {
    74  	t.Parallel()
    75  
    76  	encodingConfig := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{})
    77  	txConfig := encodingConfig.TxConfig
    78  
    79  	clientCtx := client.Context{}
    80  	clientCtx = clientCtx.WithTxConfig(txConfig)
    81  
    82  	// generate some tx JSON
    83  	bldr := txConfig.NewTxBuilder()
    84  	bldr.SetGasLimit(50000)
    85  	bldr.SetFeeAmount(sdk.NewCoins(sdk.NewInt64Coin("atom", 150)))
    86  	bldr.SetMemo("foomemo")
    87  	txJSON, err := txConfig.TxJSONEncoder()(bldr.GetTx())
    88  	require.NoError(t, err)
    89  
    90  	// use the tx JSON to generate some tx batches (it doesn't matter that we use the same JSON because we don't care about the actual context)
    91  	goodBatchOf3Txs := fmt.Sprintf("%s\n%s\n%s\n", txJSON, txJSON, txJSON)
    92  	malformedBatch := fmt.Sprintf("%s\nmalformed\n%s\n", txJSON, txJSON)
    93  	batchOf2TxsWithNoNewline := fmt.Sprintf("%s\n%s", txJSON, txJSON)
    94  	batchWithEmptyLine := fmt.Sprintf("%s\n\n%s", txJSON, txJSON)
    95  
    96  	tests := []struct {
    97  		name               string
    98  		batch              string
    99  		wantScannerError   bool
   100  		wantUnmarshalError bool
   101  		numTxs             int
   102  	}{
   103  		{"good batch", goodBatchOf3Txs, false, false, 3},
   104  		{"malformed", malformedBatch, false, true, 1},
   105  		{"missing trailing newline", batchOf2TxsWithNoNewline, false, false, 2},
   106  		{"empty line", batchWithEmptyLine, false, true, 1},
   107  	}
   108  
   109  	for _, tt := range tests {
   110  		tt := tt
   111  		t.Run(tt.name, func(t *testing.T) {
   112  			scanner, i := authclient.NewBatchScanner(clientCtx.TxConfig, strings.NewReader(tt.batch)), 0
   113  			for scanner.Scan() {
   114  				_ = scanner.Tx()
   115  				i++
   116  			}
   117  			require.Equal(t, tt.wantScannerError, scanner.Err() != nil)
   118  			require.Equal(t, tt.wantUnmarshalError, scanner.UnmarshalErr() != nil)
   119  			require.Equal(t, tt.numTxs, i)
   120  		})
   121  	}
   122  }