package client_test import ( "fmt" "strings" "testing" "github.com/stretchr/testify/require" "git.cw.tr/mukan-network/mukan-sdk/client" "git.cw.tr/mukan-network/mukan-sdk/codec" "git.cw.tr/mukan-network/mukan-sdk/testutil" sdk "git.cw.tr/mukan-network/mukan-sdk/types" moduletestutil "git.cw.tr/mukan-network/mukan-sdk/types/module/testutil" "git.cw.tr/mukan-network/mukan-sdk/x/auth" authclient "git.cw.tr/mukan-network/mukan-sdk/x/auth/client" ) func TestParseQueryResponse(t *testing.T) { simRes := &sdk.SimulationResponse{ GasInfo: sdk.GasInfo{GasUsed: 10, GasWanted: 20}, Result: &sdk.Result{Data: []byte("tx data"), Log: "log"}, } bz, err := codec.ProtoMarshalJSON(simRes, nil) require.NoError(t, err) res, err := authclient.ParseQueryResponse(bz) require.NoError(t, err) require.Equal(t, 10, int(res.GasUsed)) require.NotNil(t, res.Result) res, err = authclient.ParseQueryResponse([]byte("fuzzy")) require.Error(t, err) } func TestReadTxFromFile(t *testing.T) { t.Parallel() encodingConfig := moduletestutil.MakeTestEncodingConfig() interfaceRegistry := encodingConfig.InterfaceRegistry txConfig := encodingConfig.TxConfig clientCtx := client.Context{} clientCtx = clientCtx.WithInterfaceRegistry(interfaceRegistry) clientCtx = clientCtx.WithTxConfig(txConfig) feeAmount := sdk.Coins{sdk.NewInt64Coin("atom", 150)} gasLimit := uint64(50000) memo := "foomemo" txBuilder := txConfig.NewTxBuilder() txBuilder.SetFeeAmount(feeAmount) txBuilder.SetGasLimit(gasLimit) txBuilder.SetMemo(memo) // Write it to the file encodedTx, err := txConfig.TxJSONEncoder()(txBuilder.GetTx()) require.NoError(t, err) jsonTxFile := testutil.WriteToNewTempFile(t, string(encodedTx)) // Read it back decodedTx, err := authclient.ReadTxFromFile(clientCtx, jsonTxFile.Name()) require.NoError(t, err) txBldr, err := txConfig.WrapTxBuilder(decodedTx) require.NoError(t, err) t.Log(txBuilder.GetTx()) t.Log(txBldr.GetTx()) require.Equal(t, txBuilder.GetTx().GetMemo(), txBldr.GetTx().GetMemo()) require.Equal(t, txBuilder.GetTx().GetFee(), txBldr.GetTx().GetFee()) } func TestBatchScanner_Scan(t *testing.T) { t.Parallel() encodingConfig := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}) txConfig := encodingConfig.TxConfig clientCtx := client.Context{} clientCtx = clientCtx.WithTxConfig(txConfig) // generate some tx JSON bldr := txConfig.NewTxBuilder() bldr.SetGasLimit(50000) bldr.SetFeeAmount(sdk.NewCoins(sdk.NewInt64Coin("atom", 150))) bldr.SetMemo("foomemo") txJSON, err := txConfig.TxJSONEncoder()(bldr.GetTx()) require.NoError(t, err) // 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) goodBatchOf3Txs := fmt.Sprintf("%s\n%s\n%s\n", txJSON, txJSON, txJSON) malformedBatch := fmt.Sprintf("%s\nmalformed\n%s\n", txJSON, txJSON) batchOf2TxsWithNoNewline := fmt.Sprintf("%s\n%s", txJSON, txJSON) batchWithEmptyLine := fmt.Sprintf("%s\n\n%s", txJSON, txJSON) tests := []struct { name string batch string wantScannerError bool wantUnmarshalError bool numTxs int }{ {"good batch", goodBatchOf3Txs, false, false, 3}, {"malformed", malformedBatch, false, true, 1}, {"missing trailing newline", batchOf2TxsWithNoNewline, false, false, 2}, {"empty line", batchWithEmptyLine, false, true, 1}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { scanner, i := authclient.NewBatchScanner(clientCtx.TxConfig, strings.NewReader(tt.batch)), 0 for scanner.Scan() { _ = scanner.Tx() i++ } require.Equal(t, tt.wantScannerError, scanner.Err() != nil) require.Equal(t, tt.wantUnmarshalError, scanner.UnmarshalErr() != nil) require.Equal(t, tt.numTxs, i) }) } }