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 }