From 35ef945a5cf96688c872cd8a697a156ee1d4e243 Mon Sep 17 00:00:00 2001 From: Raymond Date: Mon, 8 Oct 2018 18:35:45 +0800 Subject: [PATCH 1/9] IRISHUB-490: cli_test init --- Gopkg.lock | 4 +- app/genesis.go | 3 + client/keys/codec.go | 22 ++++ cmd/cli_test/cli_test.go | 246 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 client/keys/codec.go create mode 100644 cmd/cli_test/cli_test.go diff --git a/Gopkg.lock b/Gopkg.lock index 908cde9cb..d0bffd483 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -56,7 +56,7 @@ revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" [[projects]] - digest = "1:1b6b69a3b0b1ce19e038ba842043d158fc14ff5d0e55e0324a6f795cb4ace1d2" + digest = "1:b377b858bfe55eaae4ea65a2ab5d00c039b0bae31a87a99224bd957ddbce999b" name = "github.com/cosmos/cosmos-sdk" packages = [ "baseapp", @@ -72,6 +72,7 @@ "server", "server/config", "store", + "tests", "types", "version", "wire", @@ -728,6 +729,7 @@ "github.com/cosmos/cosmos-sdk/server", "github.com/cosmos/cosmos-sdk/server/config", "github.com/cosmos/cosmos-sdk/store", + "github.com/cosmos/cosmos-sdk/tests", "github.com/cosmos/cosmos-sdk/types", "github.com/cosmos/cosmos-sdk/wire", "github.com/cosmos/cosmos-sdk/x/auth", diff --git a/app/genesis.go b/app/genesis.go index db61f2009..31d836c9e 100644 --- a/app/genesis.go +++ b/app/genesis.go @@ -19,6 +19,9 @@ import ( "time" ) +// DefaultKeyPass contains the default key password for genesis transactions +const DefaultKeyPass = "12345678" + // State to Unmarshal type GenesisState struct { Accounts []GenesisAccount `json:"accounts"` diff --git a/client/keys/codec.go b/client/keys/codec.go new file mode 100644 index 000000000..a163f995a --- /dev/null +++ b/client/keys/codec.go @@ -0,0 +1,22 @@ +package keys + +import ( + "github.com/cosmos/cosmos-sdk/wire" +) + +var cdc *wire.Codec + +func init() { + cdc = wire.NewCodec() + wire.RegisterCrypto(cdc) +} + +// marshal keys +func MarshalJSON(o interface{}) ([]byte, error) { + return cdc.MarshalJSON(o) +} + +// unmarshal json +func UnmarshalJSON(bz []byte, ptr interface{}) error { + return cdc.UnmarshalJSON(bz, ptr) +} diff --git a/cmd/cli_test/cli_test.go b/cmd/cli_test/cli_test.go new file mode 100644 index 000000000..a8c27b119 --- /dev/null +++ b/cmd/cli_test/cli_test.go @@ -0,0 +1,246 @@ +// +build cli_test + +package clitest + +import ( + "encoding/json" + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/tendermint/tendermint/crypto" + cmn "github.com/tendermint/tendermint/libs/common" + + "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/stake" + "github.com/irisnet/irishub/app" + "github.com/irisnet/irishub/client/keys" + "github.com/irisnet/irishub/modules/gov" +) + +var ( + irisHome = "" + iriscliHome = "" +) + +func init() { + irisHome, iriscliHome = getTestingHomeDirs() +} + +func TestIrisCLISubmitProposal(t *testing.T) { + tests.ExecuteT(t, fmt.Sprintf("iris --home=%s unsafe_reset_all", irisHome), "") + executeWrite(t, fmt.Sprintf("iriscli keys delete --home=%s foo", iriscliHome), app.DefaultKeyPass) + executeWrite(t, fmt.Sprintf("iriscli keys delete --home=%s bar", iriscliHome), app.DefaultKeyPass) + chainID := executeInit(t, fmt.Sprintf("iris init -o --name=foo --home=%s --home-client=%s", irisHome, iriscliHome)) + executeWrite(t, fmt.Sprintf("iriscli keys add --home=%s bar", iriscliHome), app.DefaultKeyPass) + + // get a free port, also setup some common flags + servAddr, port, err := server.FreeTCPAddr() + require.NoError(t, err) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", iriscliHome, servAddr, chainID) + + // start iris server + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("iris start --home=%s --rpc.laddr=%v", irisHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show foo --output=json --home=%s", iriscliHome)) + + fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli account %s %v", fooAddr, flags)) + require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf("steak").Int64()) + + proposalsQuery := tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") + require.Equal(t, "No matching proposals found", proposalsQuery) + + // submit a test proposal + spStr := fmt.Sprintf("iriscli gov submit-proposal %v", flags) + spStr += fmt.Sprintf(" --from=%s", "foo") + spStr += fmt.Sprintf(" --deposit=%s", "5steak") + spStr += fmt.Sprintf(" --type=%s", "Text") + spStr += fmt.Sprintf(" --title=%s", "Test") + spStr += fmt.Sprintf(" --description=%s", "test") + + executeWrite(t, spStr, app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli account %s %v", fooAddr, flags)) + require.Equal(t, int64(45), fooAcc.GetCoins().AmountOf("steak").Int64()) + + proposal1 := executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) + require.Equal(t, int64(1), proposal1.GetProposalID()) + require.Equal(t, gov.StatusDepositPeriod, proposal1.GetStatus()) + + proposalsQuery = tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") + require.Equal(t, " 1 - Test", proposalsQuery) + + depositStr := fmt.Sprintf("iriscli gov deposit %v", flags) + depositStr += fmt.Sprintf(" --from=%s", "foo") + depositStr += fmt.Sprintf(" --deposit=%s", "10steak") + depositStr += fmt.Sprintf(" --proposal-id=%s", "1") + + executeWrite(t, depositStr, app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli account %s %v", fooAddr, flags)) + require.Equal(t, int64(35), fooAcc.GetCoins().AmountOf("steak").Int64()) + proposal1 = executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) + require.Equal(t, int64(1), proposal1.GetProposalID()) + require.Equal(t, gov.StatusVotingPeriod, proposal1.GetStatus()) + + voteStr := fmt.Sprintf("iriscli gov vote %v", flags) + voteStr += fmt.Sprintf(" --from=%s", "foo") + voteStr += fmt.Sprintf(" --proposal-id=%s", "1") + voteStr += fmt.Sprintf(" --option=%s", "Yes") + + executeWrite(t, voteStr, app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + vote := executeGetVote(t, fmt.Sprintf("iriscli gov query-vote --proposal-id=1 --voter=%s --output=json %v", fooAddr, flags)) + require.Equal(t, int64(1), vote.ProposalID) + require.Equal(t, gov.OptionYes, vote.Option) + + votes := executeGetVotes(t, fmt.Sprintf("iriscli gov query-votes --proposal-id=1 --output=json %v", flags)) + require.Len(t, votes, 1) + require.Equal(t, int64(1), votes[0].ProposalID) + require.Equal(t, gov.OptionYes, votes[0].Option) + + proposalsQuery = tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals --status=DepositPeriod %v", flags), "") + require.Equal(t, "No matching proposals found", proposalsQuery) + + proposalsQuery = tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals --status=VotingPeriod %v", flags), "") + require.Equal(t, " 1 - Test", proposalsQuery) + + // submit a second test proposal + spStr = fmt.Sprintf("iriscli gov submit-proposal %v", flags) + spStr += fmt.Sprintf(" --from=%s", "foo") + spStr += fmt.Sprintf(" --deposit=%s", "5steak") + spStr += fmt.Sprintf(" --type=%s", "Text") + spStr += fmt.Sprintf(" --title=%s", "Apples") + spStr += fmt.Sprintf(" --description=%s", "test") + + executeWrite(t, spStr, app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + proposalsQuery = tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals --latest=1 %v", flags), "") + require.Equal(t, " 2 - Apples", proposalsQuery) +} + +//___________________________________________________________________________________ +// helper methods + +func getTestingHomeDirs() (string, string) { + tmpDir := os.TempDir() + irisHome := fmt.Sprintf("%s%s.test_iris", tmpDir, string(os.PathSeparator)) + iriscliHome := fmt.Sprintf("%s%s.test_iriscli", tmpDir, string(os.PathSeparator)) + return irisHome, iriscliHome +} + +//___________________________________________________________________________________ +// executors + +func executeWrite(t *testing.T, cmdStr string, writes ...string) bool { + proc := tests.GoExecuteT(t, cmdStr) + + for _, write := range writes { + _, err := proc.StdinPipe.Write([]byte(write + "\n")) + require.NoError(t, err) + } + stdout, stderr, err := proc.ReadAll() + if err != nil { + fmt.Println("Err on proc.ReadAll()", err, cmdStr) + } + // Log output. + if len(stdout) > 0 { + t.Log("Stdout:", cmn.Green(string(stdout))) + } + if len(stderr) > 0 { + t.Log("Stderr:", cmn.Red(string(stderr))) + } + + proc.Wait() + return proc.ExitState.Success() + // bz := proc.StdoutBuffer.Bytes() + // fmt.Println("EXEC WRITE", string(bz)) +} + +func executeInit(t *testing.T, cmdStr string) (chainID string) { + out := tests.ExecuteT(t, cmdStr, app.DefaultKeyPass) + + var initRes map[string]json.RawMessage + err := json.Unmarshal([]byte(out), &initRes) + require.NoError(t, err) + + err = json.Unmarshal(initRes["chain_id"], &chainID) + require.NoError(t, err) + + return +} + +func executeGetAddrPK(t *testing.T, cmdStr string) (sdk.AccAddress, crypto.PubKey) { + out := tests.ExecuteT(t, cmdStr, "") + var ko keys.KeyOutput + keys.UnmarshalJSON([]byte(out), &ko) + + pk, err := sdk.GetAccPubKeyBech32(ko.PubKey) + require.NoError(t, err) + + return ko.Address, pk +} + +func executeGetAccount(t *testing.T, cmdStr string) auth.BaseAccount { + out := tests.ExecuteT(t, cmdStr, "") + var initRes map[string]json.RawMessage + err := json.Unmarshal([]byte(out), &initRes) + require.NoError(t, err, "out %v, err %v", out, err) + value := initRes["value"] + var acc auth.BaseAccount + cdc := wire.NewCodec() + wire.RegisterCrypto(cdc) + err = cdc.UnmarshalJSON(value, &acc) + require.NoError(t, err, "value %v, err %v", string(value), err) + return acc +} + +func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { + out := tests.ExecuteT(t, cmdStr, "") + var validator stake.Validator + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &validator) + require.NoError(t, err, "out %v\n, err %v", out, err) + return validator +} + +func executeGetProposal(t *testing.T, cmdStr string) gov.Proposal { + out := tests.ExecuteT(t, cmdStr, "") + var proposal gov.Proposal + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &proposal) + require.NoError(t, err, "out %v\n, err %v", out, err) + return proposal +} + +func executeGetVote(t *testing.T, cmdStr string) gov.Vote { + out := tests.ExecuteT(t, cmdStr, "") + var vote gov.Vote + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &vote) + require.NoError(t, err, "out %v\n, err %v", out, err) + return vote +} + +func executeGetVotes(t *testing.T, cmdStr string) []gov.Vote { + out := tests.ExecuteT(t, cmdStr, "") + var votes []gov.Vote + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &votes) + require.NoError(t, err, "out %v\n, err %v", out, err) + return votes +} From 73ac4d3dd07ec41e0a750cd6eec485624348bb7d Mon Sep 17 00:00:00 2001 From: Raymond Date: Tue, 9 Oct 2018 15:56:46 +0800 Subject: [PATCH 2/9] IRISHUB-490: convert iris coin string to sdk.Coins --- cmd/cli_test/cli_test.go | 54 ++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/cmd/cli_test/cli_test.go b/cmd/cli_test/cli_test.go index a8c27b119..7c30a2e3f 100644 --- a/cmd/cli_test/cli_test.go +++ b/cmd/cli_test/cli_test.go @@ -20,8 +20,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/stake" "github.com/irisnet/irishub/app" + "github.com/irisnet/irishub/client/bank" "github.com/irisnet/irishub/client/keys" "github.com/irisnet/irishub/modules/gov" + "github.com/irisnet/irishub/client/context" ) var ( @@ -54,8 +56,9 @@ func TestIrisCLISubmitProposal(t *testing.T) { fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show foo --output=json --home=%s", iriscliHome)) - fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli account %s %v", fooAddr, flags)) - require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf("steak").Int64()) + fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + fooAcc1 := convertToIrisBaseAccount(t, fooAcc) + require.Equal(t, int64(100), fooAcc1.GetCoins().AmountOf("iris-atto").Int64()) proposalsQuery := tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") require.Equal(t, "No matching proposals found", proposalsQuery) @@ -71,8 +74,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { executeWrite(t, spStr, app.DefaultKeyPass) tests.WaitForNextNBlocksTM(2, port) - fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli account %s %v", fooAddr, flags)) - require.Equal(t, int64(45), fooAcc.GetCoins().AmountOf("steak").Int64()) + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + //require.Equal(t, int64(45), fooAcc.GetCoins().AmountOf("steak").Int64()) proposal1 := executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) require.Equal(t, int64(1), proposal1.GetProposalID()) @@ -89,8 +92,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { executeWrite(t, depositStr, app.DefaultKeyPass) tests.WaitForNextNBlocksTM(2, port) - fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli account %s %v", fooAddr, flags)) - require.Equal(t, int64(35), fooAcc.GetCoins().AmountOf("steak").Int64()) + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + //require.Equal(t, int64(35), fooAcc.GetCoins().AmountOf("steak").Int64()) proposal1 = executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) require.Equal(t, int64(1), proposal1.GetProposalID()) require.Equal(t, gov.StatusVotingPeriod, proposal1.GetStatus()) @@ -195,20 +198,49 @@ func executeGetAddrPK(t *testing.T, cmdStr string) (sdk.AccAddress, crypto.PubKe return ko.Address, pk } -func executeGetAccount(t *testing.T, cmdStr string) auth.BaseAccount { +func executeGetAccount(t *testing.T, cmdStr string) (acc *bank.BaseAccount) { out := tests.ExecuteT(t, cmdStr, "") var initRes map[string]json.RawMessage err := json.Unmarshal([]byte(out), &initRes) require.NoError(t, err, "out %v, err %v", out, err) - value := initRes["value"] - var acc auth.BaseAccount + cdc := wire.NewCodec() wire.RegisterCrypto(cdc) - err = cdc.UnmarshalJSON(value, &acc) - require.NoError(t, err, "value %v, err %v", string(value), err) + + err = cdc.UnmarshalJSON([]byte(out), &acc) + require.NoError(t, err, "acc %v, err %v", string(out), err) + return acc } +func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (*auth.BaseAccount) { + cdc := wire.NewCodec() + wire.RegisterCrypto(cdc) + + cliCtx := context.NewCLIContext(). + WithCodec(cdc) + + coinstr := acc.Coins[0] + for i := 1; i < len(acc.Coins); i++ { + coinstr += ("," + acc.Coins[i]) + } + + coins, err := cliCtx.ParseCoins(coinstr) + require.NoError(t, err, "coins %v, err %v", coinstr, err) + + acc1 := auth.BaseAccount{ + Address :acc.Address, + Coins :coins, + PubKey :acc.PubKey, + AccountNumber :acc.AccountNumber, + Sequence :acc.Sequence, + } + + copy(acc1.Coins, coins) + + return &acc1 +} + func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { out := tests.ExecuteT(t, cmdStr, "") var validator stake.Validator From 444fbe50e966202448ce3b593ec88ee873838fb8 Mon Sep 17 00:00:00 2001 From: Raymond Date: Tue, 9 Oct 2018 16:32:43 +0800 Subject: [PATCH 3/9] IRISHUB-490: fix sdk.Coin convert issue --- cmd/cli_test/cli_test.go | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/cmd/cli_test/cli_test.go b/cmd/cli_test/cli_test.go index 7c30a2e3f..6d662d828 100644 --- a/cmd/cli_test/cli_test.go +++ b/cmd/cli_test/cli_test.go @@ -1,6 +1,5 @@ -// +build cli_test -package clitest +package cli_test import ( "encoding/json" @@ -17,7 +16,6 @@ import ( "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" - "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/stake" "github.com/irisnet/irishub/app" "github.com/irisnet/irishub/client/bank" @@ -58,7 +56,7 @@ func TestIrisCLISubmitProposal(t *testing.T) { fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) fooAcc1 := convertToIrisBaseAccount(t, fooAcc) - require.Equal(t, int64(100), fooAcc1.GetCoins().AmountOf("iris-atto").Int64()) + require.Equal(t, "100iris", fooAcc1) proposalsQuery := tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") require.Equal(t, "No matching proposals found", proposalsQuery) @@ -66,7 +64,7 @@ func TestIrisCLISubmitProposal(t *testing.T) { // submit a test proposal spStr := fmt.Sprintf("iriscli gov submit-proposal %v", flags) spStr += fmt.Sprintf(" --from=%s", "foo") - spStr += fmt.Sprintf(" --deposit=%s", "5steak") + spStr += fmt.Sprintf(" --deposit=%s", "5iris") spStr += fmt.Sprintf(" --type=%s", "Text") spStr += fmt.Sprintf(" --title=%s", "Test") spStr += fmt.Sprintf(" --description=%s", "test") @@ -75,7 +73,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { tests.WaitForNextNBlocksTM(2, port) fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) - //require.Equal(t, int64(45), fooAcc.GetCoins().AmountOf("steak").Int64()) + fooAcc1 = convertToIrisBaseAccount(t, fooAcc) + require.Equal(t, "95iris", fooAcc1) proposal1 := executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) require.Equal(t, int64(1), proposal1.GetProposalID()) @@ -93,7 +92,9 @@ func TestIrisCLISubmitProposal(t *testing.T) { tests.WaitForNextNBlocksTM(2, port) fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) - //require.Equal(t, int64(35), fooAcc.GetCoins().AmountOf("steak").Int64()) + fooAcc1 = convertToIrisBaseAccount(t, fooAcc) + require.Equal(t, "100iris", fooAcc1) + proposal1 = executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) require.Equal(t, int64(1), proposal1.GetProposalID()) require.Equal(t, gov.StatusVotingPeriod, proposal1.GetStatus()) @@ -213,7 +214,8 @@ func executeGetAccount(t *testing.T, cmdStr string) (acc *bank.BaseAccount) { return acc } -func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (*auth.BaseAccount) { +//func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (*auth.BaseAccount) { +func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (string) { cdc := wire.NewCodec() wire.RegisterCrypto(cdc) @@ -225,20 +227,10 @@ func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (*auth.BaseAc coinstr += ("," + acc.Coins[i]) } - coins, err := cliCtx.ParseCoins(coinstr) + coins, err := cliCtx.ConvertCoinToMainUnit(coinstr) require.NoError(t, err, "coins %v, err %v", coinstr, err) - acc1 := auth.BaseAccount{ - Address :acc.Address, - Coins :coins, - PubKey :acc.PubKey, - AccountNumber :acc.AccountNumber, - Sequence :acc.Sequence, - } - - copy(acc1.Coins, coins) - - return &acc1 + return coins[0] } func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { From df6b769d9a5438c62802d9a732c13ad28cf6f5d2 Mon Sep 17 00:00:00 2001 From: Raymond Date: Tue, 9 Oct 2018 17:36:12 +0800 Subject: [PATCH 4/9] IRISHUB-490: check account balance with the fee deduction --- app/genesis.go | 4 +-- cmd/{cli_test => clitest}/cli_test.go | 40 ++++++++---------------- cmd/clitest/utils.go | 44 +++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 30 deletions(-) rename cmd/{cli_test => clitest}/cli_test.go (91%) create mode 100644 cmd/clitest/utils.go diff --git a/app/genesis.go b/app/genesis.go index 31d836c9e..8dd82b92b 100644 --- a/app/genesis.go +++ b/app/genesis.go @@ -20,7 +20,7 @@ import ( ) // DefaultKeyPass contains the default key password for genesis transactions -const DefaultKeyPass = "12345678" +const DefaultKeyPass = "1234567890" // State to Unmarshal type GenesisState struct { @@ -103,7 +103,7 @@ func IrisAppGenTx(cdc *wire.Codec, pk crypto.PubKey, genTxConfig config.GenTx) ( var addr sdk.AccAddress var secret string - addr, secret, err = server.GenerateSaveCoinKey(genTxConfig.CliRoot, genTxConfig.Name, "1234567890", genTxConfig.Overwrite) + addr, secret, err = server.GenerateSaveCoinKey(genTxConfig.CliRoot, genTxConfig.Name, DefaultKeyPass, genTxConfig.Overwrite) if err != nil { return } diff --git a/cmd/cli_test/cli_test.go b/cmd/clitest/cli_test.go similarity index 91% rename from cmd/cli_test/cli_test.go rename to cmd/clitest/cli_test.go index 6d662d828..105eaea75 100644 --- a/cmd/cli_test/cli_test.go +++ b/cmd/clitest/cli_test.go @@ -1,5 +1,4 @@ - -package cli_test +package clitest import ( "encoding/json" @@ -21,7 +20,6 @@ import ( "github.com/irisnet/irishub/client/bank" "github.com/irisnet/irishub/client/keys" "github.com/irisnet/irishub/modules/gov" - "github.com/irisnet/irishub/client/context" ) var ( @@ -55,8 +53,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show foo --output=json --home=%s", iriscliHome)) fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) - fooAcc1 := convertToIrisBaseAccount(t, fooAcc) - require.Equal(t, "100iris", fooAcc1) + fooCoin := convertToIrisBaseAccount(t, fooAcc) + require.Equal(t, "100iris", fooCoin) proposalsQuery := tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") require.Equal(t, "No matching proposals found", proposalsQuery) @@ -68,13 +66,18 @@ func TestIrisCLISubmitProposal(t *testing.T) { spStr += fmt.Sprintf(" --type=%s", "Text") spStr += fmt.Sprintf(" --title=%s", "Test") spStr += fmt.Sprintf(" --description=%s", "test") + spStr += fmt.Sprintf(" --fee=%s", "0.004iris") executeWrite(t, spStr, app.DefaultKeyPass) tests.WaitForNextNBlocksTM(2, port) fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) - fooAcc1 = convertToIrisBaseAccount(t, fooAcc) - require.Equal(t, "95iris", fooAcc1) + fooCoin = convertToIrisBaseAccount(t, fooAcc) + num := getAmuntFromCoinStr(t, fooCoin) + + if !(num > 94 && num < 95) { + t.Error("Test Failed: (94, 95) expected, recieved: {}", num) + } proposal1 := executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) require.Equal(t, int64(1), proposal1.GetProposalID()) @@ -92,8 +95,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { tests.WaitForNextNBlocksTM(2, port) fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) - fooAcc1 = convertToIrisBaseAccount(t, fooAcc) - require.Equal(t, "100iris", fooAcc1) + fooCoin = convertToIrisBaseAccount(t, fooAcc) + require.Equal(t, "100iris", fooCoin) proposal1 = executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) require.Equal(t, int64(1), proposal1.GetProposalID()) @@ -214,25 +217,6 @@ func executeGetAccount(t *testing.T, cmdStr string) (acc *bank.BaseAccount) { return acc } -//func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (*auth.BaseAccount) { -func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) (string) { - cdc := wire.NewCodec() - wire.RegisterCrypto(cdc) - - cliCtx := context.NewCLIContext(). - WithCodec(cdc) - - coinstr := acc.Coins[0] - for i := 1; i < len(acc.Coins); i++ { - coinstr += ("," + acc.Coins[i]) - } - - coins, err := cliCtx.ConvertCoinToMainUnit(coinstr) - require.NoError(t, err, "coins %v, err %v", coinstr, err) - - return coins[0] -} - func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { out := tests.ExecuteT(t, cmdStr, "") var validator stake.Validator diff --git a/cmd/clitest/utils.go b/cmd/clitest/utils.go new file mode 100644 index 000000000..e9c39f1ee --- /dev/null +++ b/cmd/clitest/utils.go @@ -0,0 +1,44 @@ +package clitest + +import ( + "github.com/cosmos/cosmos-sdk/wire" + "github.com/irisnet/irishub/client/bank" + "github.com/irisnet/irishub/client/context" + "github.com/stretchr/testify/require" + "strconv" + "strings" + "testing" +) + +func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) string { + cdc := wire.NewCodec() + wire.RegisterCrypto(cdc) + + cliCtx := context.NewCLIContext(). + WithCodec(cdc) + + coinstr := acc.Coins[0] + for i := 1; i < len(acc.Coins); i++ { + coinstr += ("," + acc.Coins[i]) + } + + coins, err := cliCtx.ConvertCoinToMainUnit(coinstr) + require.NoError(t, err, "coins %v, err %v", coinstr, err) + + return coins[0] +} + +func getAmuntFromCoinStr(t *testing.T, coinStr string) int { + index := strings.Index(coinStr, "iris") + if index <= 0 { + return -1 + } + + numStr := coinStr[:index] + num, err := strconv.Atoi(numStr) + if err != nil { + return -1 + } + + return num +} From 39b6f708820bea0c8931e9cff6816cecdb8510ec Mon Sep 17 00:00:00 2001 From: Raymond Date: Tue, 9 Oct 2018 18:48:29 +0800 Subject: [PATCH 5/9] IRISHUB-490: modifyGenesisFile to give the test account enough token --- cmd/clitest/cli_test.go | 29 ++++++++++++++++++--------- cmd/clitest/utils.go | 44 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/cmd/clitest/cli_test.go b/cmd/clitest/cli_test.go index 105eaea75..18119ee38 100644 --- a/cmd/clitest/cli_test.go +++ b/cmd/clitest/cli_test.go @@ -19,6 +19,7 @@ import ( "github.com/irisnet/irishub/app" "github.com/irisnet/irishub/client/bank" "github.com/irisnet/irishub/client/keys" + govcli "github.com/irisnet/irishub/client/gov" "github.com/irisnet/irishub/modules/gov" ) @@ -38,6 +39,9 @@ func TestIrisCLISubmitProposal(t *testing.T) { chainID := executeInit(t, fmt.Sprintf("iris init -o --name=foo --home=%s --home-client=%s", irisHome, iriscliHome)) executeWrite(t, fmt.Sprintf("iriscli keys add --home=%s bar", iriscliHome), app.DefaultKeyPass) + err := modifyGenesisFile(t, irisHome) + require.NoError(t, err) + // get a free port, also setup some common flags servAddr, port, err := server.FreeTCPAddr() require.NoError(t, err) @@ -54,7 +58,7 @@ func TestIrisCLISubmitProposal(t *testing.T) { fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) fooCoin := convertToIrisBaseAccount(t, fooAcc) - require.Equal(t, "100iris", fooCoin) + require.Equal(t, "1000000000000iris", fooCoin) proposalsQuery := tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") require.Equal(t, "No matching proposals found", proposalsQuery) @@ -80,32 +84,38 @@ func TestIrisCLISubmitProposal(t *testing.T) { } proposal1 := executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) - require.Equal(t, int64(1), proposal1.GetProposalID()) - require.Equal(t, gov.StatusDepositPeriod, proposal1.GetStatus()) + require.Equal(t, int64(1), proposal1.ProposalID) + require.Equal(t, gov.StatusDepositPeriod, proposal1.Status) proposalsQuery = tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals %v", flags), "") require.Equal(t, " 1 - Test", proposalsQuery) depositStr := fmt.Sprintf("iriscli gov deposit %v", flags) depositStr += fmt.Sprintf(" --from=%s", "foo") - depositStr += fmt.Sprintf(" --deposit=%s", "10steak") + depositStr += fmt.Sprintf(" --deposit=%s", "10iris") depositStr += fmt.Sprintf(" --proposal-id=%s", "1") + depositStr += fmt.Sprintf(" --fee=%s", "0.004iris") executeWrite(t, depositStr, app.DefaultKeyPass) tests.WaitForNextNBlocksTM(2, port) fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) fooCoin = convertToIrisBaseAccount(t, fooAcc) - require.Equal(t, "100iris", fooCoin) + num = getAmuntFromCoinStr(t, fooCoin) + + if !(num > 84 && num < 85) { + t.Error("Test Failed: (84, 85) expected, recieved: {}", num) + } proposal1 = executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) - require.Equal(t, int64(1), proposal1.GetProposalID()) - require.Equal(t, gov.StatusVotingPeriod, proposal1.GetStatus()) + require.Equal(t, int64(1), proposal1.ProposalID) + require.Equal(t, gov.StatusVotingPeriod, proposal1.Status) voteStr := fmt.Sprintf("iriscli gov vote %v", flags) voteStr += fmt.Sprintf(" --from=%s", "foo") voteStr += fmt.Sprintf(" --proposal-id=%s", "1") voteStr += fmt.Sprintf(" --option=%s", "Yes") + voteStr += fmt.Sprintf(" --fee=%s", "0.004iris") executeWrite(t, voteStr, app.DefaultKeyPass) tests.WaitForNextNBlocksTM(2, port) @@ -132,6 +142,7 @@ func TestIrisCLISubmitProposal(t *testing.T) { spStr += fmt.Sprintf(" --type=%s", "Text") spStr += fmt.Sprintf(" --title=%s", "Apples") spStr += fmt.Sprintf(" --description=%s", "test") + spStr += fmt.Sprintf(" --fee=%s", "0.004iris") executeWrite(t, spStr, app.DefaultKeyPass) tests.WaitForNextNBlocksTM(2, port) @@ -226,9 +237,9 @@ func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { return validator } -func executeGetProposal(t *testing.T, cmdStr string) gov.Proposal { +func executeGetProposal(t *testing.T, cmdStr string) govcli.ProposalOutput { out := tests.ExecuteT(t, cmdStr, "") - var proposal gov.Proposal + var proposal govcli.ProposalOutput cdc := app.MakeCodec() err := cdc.UnmarshalJSON([]byte(out), &proposal) require.NoError(t, err, "out %v\n, err %v", out, err) diff --git a/cmd/clitest/utils.go b/cmd/clitest/utils.go index e9c39f1ee..f47c667c7 100644 --- a/cmd/clitest/utils.go +++ b/cmd/clitest/utils.go @@ -5,15 +5,18 @@ import ( "github.com/irisnet/irishub/client/bank" "github.com/irisnet/irishub/client/context" "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/types" "strconv" "strings" "testing" + "fmt" + "os" + "github.com/irisnet/irishub/app" ) func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) string { cdc := wire.NewCodec() wire.RegisterCrypto(cdc) - cliCtx := context.NewCLIContext(). WithCodec(cdc) @@ -28,17 +31,52 @@ func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) string { return coins[0] } -func getAmuntFromCoinStr(t *testing.T, coinStr string) int { +func getAmuntFromCoinStr(t *testing.T, coinStr string) float64 { index := strings.Index(coinStr, "iris") if index <= 0 { return -1 } numStr := coinStr[:index] - num, err := strconv.Atoi(numStr) + num, err := strconv.ParseFloat(numStr, 64) if err != nil { return -1 } return num } + +func modifyGenesisFile(t *testing.T, irisHome string) error { + genesisFilePath := fmt.Sprintf("%s%sconfig%sgenesis.json", irisHome, string(os.PathSeparator), string(os.PathSeparator)) + + genesisDoc, err := types.GenesisDocFromFile(genesisFilePath) + if err != nil { + return err + } + + var genesisState app.GenesisState + + cdc := wire.NewCodec() + wire.RegisterCrypto(cdc) + cliCtx := context.NewCLIContext(). + WithCodec(cdc) + + err = cdc.UnmarshalJSON(genesisDoc.AppState, &genesisState) + if err != nil { + return err + } + + coin, err := cliCtx.ParseCoin("1000000000000iris") + if err != nil { + return err + } + + genesisState.Accounts[0].Coins[0] = coin + bz, err := cdc.MarshalJSON(genesisState) + if err != nil { + return err + } + + genesisDoc.AppState = bz + return genesisDoc.SaveAs(genesisFilePath) +} From a544af71dcb11189933794b7c5c39e08e0aab456 Mon Sep 17 00:00:00 2001 From: Raymond Date: Tue, 9 Oct 2018 20:26:25 +0800 Subject: [PATCH 6/9] IRISHUB-490: Cli SubmitProposal test case pass --- Gopkg.lock | 228 ++++------------------------------------ cmd/clitest/cli_test.go | 12 +-- 2 files changed, 27 insertions(+), 213 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index d0bffd483..c00c758f4 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,61 +2,46 @@ [[projects]] - digest = "1:e92f5581902c345eb4ceffdcd4a854fb8f73cf436d47d837d1ec98ef1fe0a214" name = "github.com/StackExchange/wmi" packages = ["."] - pruneopts = "UT" revision = "5d049714c4a64225c3c79a7cf7d02f7fb5b96338" version = "1.0.0" [[projects]] - digest = "1:09a7f74eb6bb3c0f14d8926610c87f569c5cff68e978d30e9a3540aeb626fdf0" name = "github.com/bartekn/go-bip39" packages = ["."] - pruneopts = "UT" revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" [[projects]] branch = "master" - digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" name = "github.com/beorn7/perks" packages = ["quantile"] - pruneopts = "UT" revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] - digest = "1:1343a2963481a305ca4d051e84bc2abd16b601ee22ed324f8d605de1adb291b0" name = "github.com/bgentry/speakeasy" packages = ["."] - pruneopts = "UT" revision = "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd" version = "v0.1.0" [[projects]] branch = "master" - digest = "1:70f6b224a59b2fa453debffa85c77f71063d8754b90c8c4fbad5794e2c382b0f" name = "github.com/brejski/hid" packages = ["."] - pruneopts = "UT" revision = "06112dcfcc50a7e0e4fd06e17f9791e788fdaafc" [[projects]] branch = "master" - digest = "1:2c00f064ba355903866cbfbf3f7f4c0fe64af6638cc7d1b8bdcf3181bc67f1d8" name = "github.com/btcsuite/btcd" packages = ["btcec"] - pruneopts = "UT" revision = "79e00513b1011888b1e675157ab89f527f901cae" [[projects]] - digest = "1:386de157f7d19259a7f9c81f26ce011223ce0f090353c1152ffdf730d7d10ac2" name = "github.com/btcsuite/btcutil" packages = ["bech32"] - pruneopts = "UT" revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" [[projects]] - digest = "1:b377b858bfe55eaae4ea65a2ab5d00c039b0bae31a87a99224bd957ddbce999b" name = "github.com/cosmos/cosmos-sdk" packages = [ "baseapp", @@ -90,38 +75,30 @@ "x/stake", "x/stake/keeper", "x/stake/tags", - "x/stake/types", + "x/stake/types" ] - pruneopts = "UT" revision = "c6189e6d8c13d6b78a009f83e0ceac4a1aab3d73" source = "https://github.com/irisnet/cosmos-sdk.git" version = "v0.24.2-iris1" [[projects]] - digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec" name = "github.com/davecgh/go-spew" packages = ["spew"] - pruneopts = "UT" revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" version = "v1.1.1" [[projects]] - digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b" name = "github.com/ebuchman/fail-test" packages = ["."] - pruneopts = "UT" revision = "95f809107225be108efcf10a3509e4ea6ceef3c4" [[projects]] - digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" name = "github.com/fsnotify/fsnotify" packages = ["."] - pruneopts = "UT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" version = "v1.4.7" [[projects]] - digest = "1:fdf5169073fb0ad6dc12a70c249145e30f4058647bea25f0abd48b6d9f228a11" name = "github.com/go-kit/kit" packages = [ "log", @@ -130,41 +107,33 @@ "metrics", "metrics/discard", "metrics/internal/lv", - "metrics/prometheus", + "metrics/prometheus" ] - pruneopts = "UT" revision = "4dc7be5d2d12881735283bcab7352178e190fc71" version = "v0.6.0" [[projects]] - digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659" name = "github.com/go-logfmt/logfmt" packages = ["."] - pruneopts = "UT" revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" version = "v0.3.0" [[projects]] - digest = "1:64a5a67c69b70c2420e607a8545d674a23778ed9c3e80607bfd17b77c6c87f6a" name = "github.com/go-ole/go-ole" packages = [ ".", - "oleutil", + "oleutil" ] - pruneopts = "UT" revision = "a41e3c4b706f6ae8dfbff342b06e40fa4d2d0506" version = "v1.2.1" [[projects]] - digest = "1:586ea76dbd0374d6fb649a91d70d652b7fe0ccffb8910a77468e7702e7901f3d" name = "github.com/go-stack/stack" packages = ["."] - pruneopts = "UT" revision = "2fee6af1a9795aafbe0253a0cfbdf668e1fb8a9a" version = "v1.8.0" [[projects]] - digest = "1:35621fe20f140f05a0c4ef662c26c0ab4ee50bca78aa30fe87d33120bd28165e" name = "github.com/gogo/protobuf" packages = [ "gogoproto", @@ -172,60 +141,48 @@ "proto", "protoc-gen-gogo/descriptor", "sortkeys", - "types", + "types" ] - pruneopts = "UT" revision = "636bf0302bc95575d69441b25a2603156ffdddf1" version = "v1.1.1" [[projects]] - digest = "1:17fe264ee908afc795734e8c4e63db2accabaf57326dbf21763a7d6b86096260" name = "github.com/golang/protobuf" packages = [ "proto", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/timestamp", + "ptypes/timestamp" ] - pruneopts = "UT" revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" [[projects]] branch = "master" - digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009" name = "github.com/golang/snappy" packages = ["."] - pruneopts = "UT" revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" [[projects]] - digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1" name = "github.com/gorilla/context" packages = ["."] - pruneopts = "UT" revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42" version = "v1.1.1" [[projects]] - digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f" name = "github.com/gorilla/mux" packages = ["."] - pruneopts = "UT" revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf" version = "v1.6.2" [[projects]] - digest = "1:43dd08a10854b2056e615d1b1d22ac94559d822e1f8b6fcc92c1a1057e85188e" name = "github.com/gorilla/websocket" packages = ["."] - pruneopts = "UT" revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b" version = "v1.2.0" [[projects]] - digest = "1:ea40c24cdbacd054a6ae9de03e62c5f252479b96c716375aace5c120d68647c8" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -236,152 +193,118 @@ "hcl/token", "json/parser", "json/scanner", - "json/token", + "json/token" ] - pruneopts = "UT" revision = "8cb6e5b959231cc1119e43259c4a608f9c51a241" version = "v1.0.0" [[projects]] - digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] - pruneopts = "UT" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] branch = "master" - digest = "1:39b27d1381a30421f9813967a5866fba35dc1d4df43a6eefe3b7a5444cb07214" name = "github.com/jmhodges/levigo" packages = ["."] - pruneopts = "UT" revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" [[projects]] branch = "master" - digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72" name = "github.com/kr/logfmt" packages = ["."] - pruneopts = "UT" revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" [[projects]] - digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7" name = "github.com/magiconair/properties" packages = ["."] - pruneopts = "UT" revision = "c2353362d570a7bfa228149c62842019201cfb71" version = "v1.8.0" [[projects]] - digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb" name = "github.com/mattn/go-isatty" packages = ["."] - pruneopts = "UT" revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" version = "v0.0.3" [[projects]] - digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] - pruneopts = "UT" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] - digest = "1:645110e089152bd0f4a011a2648fbb0e4df5977be73ca605781157ac297f50c4" name = "github.com/mitchellh/mapstructure" packages = ["."] - pruneopts = "UT" revision = "fa473d140ef3c6adf42d6b391fe76707f1f243c8" version = "v1.0.0" [[projects]] - digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" name = "github.com/pelletier/go-toml" packages = ["."] - pruneopts = "UT" revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" [[projects]] - digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747" name = "github.com/pkg/errors" packages = ["."] - pruneopts = "UT" revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] - digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] - pruneopts = "UT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] - digest = "1:c1a04665f9613e082e1209cf288bf64f4068dcd6c87a64bf1c4ff006ad422ba0" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/promhttp", + "prometheus/promhttp" ] - pruneopts = "UT" revision = "ae27198cdd90bf12cd134ad79d1366a6cf49f632" [[projects]] branch = "master" - digest = "1:2d5cd61daa5565187e1d96bae64dbbc6080dacf741448e9629c64fd93203b0d4" name = "github.com/prometheus/client_model" packages = ["go"] - pruneopts = "UT" revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" [[projects]] branch = "master" - digest = "1:63b68062b8968092eb86bedc4e68894bd096ea6b24920faca8b9dcf451f54bb5" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model", + "model" ] - pruneopts = "UT" revision = "c7de2306084e37d54b8be01f3541a8464345e9a5" [[projects]] branch = "master" - digest = "1:8c49953a1414305f2ff5465147ee576dd705487c35b15918fcd4efdc0cb7a290" name = "github.com/prometheus/procfs" packages = [ ".", "internal/util", "nfs", - "xfs", + "xfs" ] - pruneopts = "UT" revision = "05ee40e3a273f7245e8777337fc7b46e533a9a92" [[projects]] - digest = "1:ea0700160aca4ef099f4e06686a665a87691f4248dddd40796925eda2e46bd64" name = "github.com/rakyll/statik" packages = ["fs"] - pruneopts = "UT" revision = "aa8a7b1baecd0f31a436bf7956fcdcc609a83035" version = "v0.1.4" [[projects]] - digest = "1:c4556a44e350b50a490544d9b06e9fba9c286c21d6c0e47f54f3a9214597298c" name = "github.com/rcrowley/go-metrics" packages = ["."] - pruneopts = "UT" revision = "e2704e165165ec55d062f5919b4b29494e9fa790" [[projects]] - digest = "1:22e4289b3741da96aceecc4d1dcbf682ae167c759d010fd88c63c65c9a2e8c72" name = "github.com/shirou/gopsutil" packages = [ "cpu", @@ -390,85 +313,67 @@ "internal/common", "mem", "net", - "process", + "process" ] - pruneopts = "UT" revision = "8048a2e9c5773235122027dd585cf821b2af1249" version = "v2.18.07" [[projects]] branch = "master" - digest = "1:99c6a6dab47067c9b898e8c8b13d130c6ab4ffbcc4b7cc6236c2cd0b1e344f5b" name = "github.com/shirou/w32" packages = ["."] - pruneopts = "UT" revision = "bb4de0191aa41b5507caa14b0650cdbddcd9280b" [[projects]] - digest = "1:bd1ae00087d17c5a748660b8e89e1043e1e5479d0fea743352cda2f8dd8c4f84" name = "github.com/spf13/afero" packages = [ ".", - "mem", + "mem" ] - pruneopts = "UT" revision = "787d034dfe70e44075ccc060d346146ef53270ad" version = "v1.1.1" [[projects]] - digest = "1:516e71bed754268937f57d4ecb190e01958452336fa73dbac880894164e91c1f" name = "github.com/spf13/cast" packages = ["."] - pruneopts = "UT" revision = "8965335b8c7107321228e3e3702cab9832751bac" version = "v1.2.0" [[projects]] - digest = "1:7ffc0983035bc7e297da3688d9fe19d60a420e9c38bef23f845c53788ed6a05e" name = "github.com/spf13/cobra" packages = ["."] - pruneopts = "UT" revision = "7b2c5ac9fc04fc5efafb60700713d4fa609b777b" version = "v0.0.1" [[projects]] branch = "master" - digest = "1:8a020f916b23ff574845789daee6818daf8d25a4852419aae3f0b12378ba432a" name = "github.com/spf13/jwalterweatherman" packages = ["."] - pruneopts = "UT" revision = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2" [[projects]] - digest = "1:dab83a1bbc7ad3d7a6ba1a1cc1760f25ac38cdf7d96a5cdd55cd915a4f5ceaf9" name = "github.com/spf13/pflag" packages = ["."] - pruneopts = "UT" revision = "9a97c102cda95a86cec2345a6f09f55a939babf5" version = "v1.0.2" [[projects]] - digest = "1:f8e1a678a2571e265f4bf91a3e5e32aa6b1474a55cb0ea849750cc177b664d96" name = "github.com/spf13/viper" packages = ["."] - pruneopts = "UT" revision = "25b30aa063fc18e48662b86996252eabdcf2f0c7" version = "v1.0.0" [[projects]] - digest = "1:7e8d267900c7fa7f35129a2a37596e38ed0f11ca746d6d9ba727980ee138f9f6" name = "github.com/stretchr/testify" packages = [ "assert", - "require", + "require" ] - pruneopts = "UT" revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71" version = "v1.2.1" [[projects]] branch = "master" - digest = "1:f2ffd421680b0a3f7887501b3c6974bcf19217ecd301d0e2c9b681940ec363d5" name = "github.com/syndtr/goleveldb" packages = [ "leveldb", @@ -482,42 +387,34 @@ "leveldb/opt", "leveldb/storage", "leveldb/table", - "leveldb/util", + "leveldb/util" ] - pruneopts = "UT" revision = "ae2bd5eed72d46b28834ec3f60db3a3ebedd8dbd" [[projects]] branch = "master" - digest = "1:087aaa7920e5d0bf79586feb57ce01c35c830396ab4392798112e8aae8c47722" name = "github.com/tendermint/ed25519" packages = [ ".", "edwards25519", - "extra25519", + "extra25519" ] - pruneopts = "UT" revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" [[projects]] - digest = "1:e0a2a4be1e20c305badc2b0a7a9ab7fef6da500763bec23ab81df3b5f9eec9ee" name = "github.com/tendermint/go-amino" packages = ["."] - pruneopts = "UT" revision = "a8328986c1608950fa5d3d1c0472cccc4f8fc02c" version = "v0.12.0-rc0" [[projects]] - digest = "1:f6e293333e941a78f8029927165d1926c5efdedd8612a3108977b30b8a871b87" name = "github.com/tendermint/iavl" packages = ["."] - pruneopts = "UT" revision = "f93c0a13ec78edd04c6faef6b3158f72e66f699f" source = "https://github.com/irisnet/iavl.git" version = "v0.9.2-iris1" [[projects]] - digest = "1:e787411e638d991be9b98018f4f31854fb33e28d8e3e4a5b1e6fbeed39f51bb4" name = "github.com/tendermint/tendermint" packages = [ "abci/client", @@ -577,23 +474,19 @@ "state/txindex/kv", "state/txindex/null", "types", - "version", + "version" ] - pruneopts = "UT" revision = "46b52ca74937f3a680a4861f7b60b262d3fda777" source = "https://github.com/irisnet/tendermint.git" version = "0.23.1-rc0-iris1" [[projects]] - digest = "1:4dcb0dd65feecb068ce23a234d1a07c7868a1e39f52a6defcae0bb371d03abf6" name = "github.com/zondax/ledger-goclient" packages = ["."] - pruneopts = "UT" revision = "4296ee5701e945f9b3a7dbe51f402e0b9be57259" [[projects]] branch = "master" - digest = "1:27507554c6d4f060d8d700c31c624a43d3a92baa634e178ddc044bdf7d13b44a" name = "golang.org/x/crypto" packages = [ "blowfish", @@ -609,13 +502,11 @@ "pbkdf2", "poly1305", "ripemd160", - "salsa20/salsa", + "salsa20/salsa" ] - pruneopts = "UT" revision = "614d502a4dac94afa3a6ce146bd1736da82514c6" [[projects]] - digest = "1:d36f55a999540d29b6ea3c2ea29d71c76b1d9853fdcd3e5c5cb4836f2ba118f1" name = "golang.org/x/net" packages = [ "context", @@ -625,25 +516,21 @@ "idna", "internal/timeseries", "netutil", - "trace", + "trace" ] - pruneopts = "UT" revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" [[projects]] branch = "master" - digest = "1:4127b29f1944eff530af85b792ea671e77efbeceffc0a9394f55c8da9798caf0" name = "golang.org/x/sys" packages = [ "cpu", "unix", - "windows", + "windows" ] - pruneopts = "UT" revision = "4910a1d54f876d7b22162a85f4d066d3ee649450" [[projects]] - digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" name = "golang.org/x/text" packages = [ "collate", @@ -659,22 +546,18 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable", + "unicode/rangetable" ] - pruneopts = "UT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] branch = "master" - digest = "1:077c1c599507b3b3e9156d17d36e1e61928ee9b53a5b420f10f28ebd4a0b275c" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] - pruneopts = "UT" revision = "c66870c02cf823ceb633bcd05be3c7cda29976f4" [[projects]] - digest = "1:2dab32a43451e320e49608ff4542fdfc653c95dcc35d0065ec9c6c3dd540ed74" name = "google.golang.org/grpc" packages = [ ".", @@ -701,89 +584,20 @@ "stats", "status", "tap", - "transport", + "transport" ] - pruneopts = "UT" revision = "168a6198bcb0ef175f7dacec0b8691fc141dc9b8" version = "v1.13.0" [[projects]] - digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" name = "gopkg.in/yaml.v2" packages = ["."] - pruneopts = "UT" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/bgentry/speakeasy", - "github.com/cosmos/cosmos-sdk/baseapp", - "github.com/cosmos/cosmos-sdk/client", - "github.com/cosmos/cosmos-sdk/client/context", - "github.com/cosmos/cosmos-sdk/client/utils", - "github.com/cosmos/cosmos-sdk/crypto", - "github.com/cosmos/cosmos-sdk/crypto/keys", - "github.com/cosmos/cosmos-sdk/server", - "github.com/cosmos/cosmos-sdk/server/config", - "github.com/cosmos/cosmos-sdk/store", - "github.com/cosmos/cosmos-sdk/tests", - "github.com/cosmos/cosmos-sdk/types", - "github.com/cosmos/cosmos-sdk/wire", - "github.com/cosmos/cosmos-sdk/x/auth", - "github.com/cosmos/cosmos-sdk/x/auth/client/cli", - "github.com/cosmos/cosmos-sdk/x/auth/client/context", - "github.com/cosmos/cosmos-sdk/x/bank", - "github.com/cosmos/cosmos-sdk/x/gov", - "github.com/cosmos/cosmos-sdk/x/ibc", - "github.com/cosmos/cosmos-sdk/x/mock", - "github.com/cosmos/cosmos-sdk/x/mock/simulation", - "github.com/cosmos/cosmos-sdk/x/params", - "github.com/cosmos/cosmos-sdk/x/slashing", - "github.com/cosmos/cosmos-sdk/x/stake", - "github.com/cosmos/cosmos-sdk/x/stake/tags", - "github.com/cosmos/cosmos-sdk/x/stake/types", - "github.com/go-kit/kit/metrics", - "github.com/go-kit/kit/metrics/prometheus", - "github.com/gorilla/mux", - "github.com/mattn/go-isatty", - "github.com/pelletier/go-toml", - "github.com/pkg/errors", - "github.com/prometheus/client_golang/prometheus", - "github.com/prometheus/client_golang/prometheus/promhttp", - "github.com/rakyll/statik/fs", - "github.com/shirou/gopsutil/cpu", - "github.com/shirou/gopsutil/disk", - "github.com/shirou/gopsutil/mem", - "github.com/shirou/gopsutil/process", - "github.com/spf13/cobra", - "github.com/spf13/pflag", - "github.com/spf13/viper", - "github.com/stretchr/testify/require", - "github.com/tendermint/go-amino", - "github.com/tendermint/tendermint/abci/server", - "github.com/tendermint/tendermint/abci/types", - "github.com/tendermint/tendermint/blockchain", - "github.com/tendermint/tendermint/consensus", - "github.com/tendermint/tendermint/crypto", - "github.com/tendermint/tendermint/crypto/ed25519", - "github.com/tendermint/tendermint/crypto/tmhash", - "github.com/tendermint/tendermint/libs/cli", - "github.com/tendermint/tendermint/libs/common", - "github.com/tendermint/tendermint/libs/db", - "github.com/tendermint/tendermint/libs/log", - "github.com/tendermint/tendermint/lite", - "github.com/tendermint/tendermint/lite/errors", - "github.com/tendermint/tendermint/lite/proxy", - "github.com/tendermint/tendermint/mempool", - "github.com/tendermint/tendermint/node", - "github.com/tendermint/tendermint/rpc/client", - "github.com/tendermint/tendermint/rpc/core/types", - "github.com/tendermint/tendermint/rpc/lib/server", - "github.com/tendermint/tendermint/state", - "github.com/tendermint/tendermint/types", - ] + inputs-digest = "ac3184a005168fdc0235424178a9dc39db00b318ce54ff8d6f1257b7e88ebfc2" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/clitest/cli_test.go b/cmd/clitest/cli_test.go index 18119ee38..130471318 100644 --- a/cmd/clitest/cli_test.go +++ b/cmd/clitest/cli_test.go @@ -79,8 +79,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { fooCoin = convertToIrisBaseAccount(t, fooAcc) num := getAmuntFromCoinStr(t, fooCoin) - if !(num > 94 && num < 95) { - t.Error("Test Failed: (94, 95) expected, recieved: {}", num) + if !(num > 999999999994 && num < 999999999995) { + t.Error("Test Failed: (999999999994, 999999999995) expected, recieved: {}", num) } proposal1 := executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) @@ -92,7 +92,7 @@ func TestIrisCLISubmitProposal(t *testing.T) { depositStr := fmt.Sprintf("iriscli gov deposit %v", flags) depositStr += fmt.Sprintf(" --from=%s", "foo") - depositStr += fmt.Sprintf(" --deposit=%s", "10iris") + depositStr += fmt.Sprintf(" --deposit=%s", "1000iris") depositStr += fmt.Sprintf(" --proposal-id=%s", "1") depositStr += fmt.Sprintf(" --fee=%s", "0.004iris") @@ -103,8 +103,8 @@ func TestIrisCLISubmitProposal(t *testing.T) { fooCoin = convertToIrisBaseAccount(t, fooAcc) num = getAmuntFromCoinStr(t, fooCoin) - if !(num > 84 && num < 85) { - t.Error("Test Failed: (84, 85) expected, recieved: {}", num) + if !(num > 999999998994 && num < 999999998995) { + t.Error("Test Failed: (999999998994, 999999998995) expected, recieved: {}", num) } proposal1 = executeGetProposal(t, fmt.Sprintf("iriscli gov query-proposal --proposal-id=1 --output=json %v", flags)) @@ -138,7 +138,7 @@ func TestIrisCLISubmitProposal(t *testing.T) { // submit a second test proposal spStr = fmt.Sprintf("iriscli gov submit-proposal %v", flags) spStr += fmt.Sprintf(" --from=%s", "foo") - spStr += fmt.Sprintf(" --deposit=%s", "5steak") + spStr += fmt.Sprintf(" --deposit=%s", "5iris") spStr += fmt.Sprintf(" --type=%s", "Text") spStr += fmt.Sprintf(" --title=%s", "Apples") spStr += fmt.Sprintf(" --description=%s", "test") From 26ca1e2b614c428f953d0bd6e3fb4bb915d418a4 Mon Sep 17 00:00:00 2001 From: Raymond Date: Tue, 9 Oct 2018 20:45:13 +0800 Subject: [PATCH 7/9] IRISHUB-490: refactor the cli test codes --- cmd/clitest/{cli_test.go => gov_test.go} | 131 +--------------------- cmd/clitest/utils.go | 135 ++++++++++++++++++++++- 2 files changed, 132 insertions(+), 134 deletions(-) rename cmd/clitest/{cli_test.go => gov_test.go} (60%) diff --git a/cmd/clitest/cli_test.go b/cmd/clitest/gov_test.go similarity index 60% rename from cmd/clitest/cli_test.go rename to cmd/clitest/gov_test.go index 130471318..6cb80bc93 100644 --- a/cmd/clitest/cli_test.go +++ b/cmd/clitest/gov_test.go @@ -1,25 +1,13 @@ package clitest import ( - "encoding/json" "fmt" - "os" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/tendermint/crypto" - cmn "github.com/tendermint/tendermint/libs/common" - "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/tests" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/wire" - "github.com/cosmos/cosmos-sdk/x/stake" + "github.com/stretchr/testify/require" + "testing" + "github.com/irisnet/irishub/app" - "github.com/irisnet/irishub/client/bank" - "github.com/irisnet/irishub/client/keys" - govcli "github.com/irisnet/irishub/client/gov" "github.com/irisnet/irishub/modules/gov" ) @@ -150,116 +138,3 @@ func TestIrisCLISubmitProposal(t *testing.T) { proposalsQuery = tests.ExecuteT(t, fmt.Sprintf("iriscli gov query-proposals --latest=1 %v", flags), "") require.Equal(t, " 2 - Apples", proposalsQuery) } - -//___________________________________________________________________________________ -// helper methods - -func getTestingHomeDirs() (string, string) { - tmpDir := os.TempDir() - irisHome := fmt.Sprintf("%s%s.test_iris", tmpDir, string(os.PathSeparator)) - iriscliHome := fmt.Sprintf("%s%s.test_iriscli", tmpDir, string(os.PathSeparator)) - return irisHome, iriscliHome -} - -//___________________________________________________________________________________ -// executors - -func executeWrite(t *testing.T, cmdStr string, writes ...string) bool { - proc := tests.GoExecuteT(t, cmdStr) - - for _, write := range writes { - _, err := proc.StdinPipe.Write([]byte(write + "\n")) - require.NoError(t, err) - } - stdout, stderr, err := proc.ReadAll() - if err != nil { - fmt.Println("Err on proc.ReadAll()", err, cmdStr) - } - // Log output. - if len(stdout) > 0 { - t.Log("Stdout:", cmn.Green(string(stdout))) - } - if len(stderr) > 0 { - t.Log("Stderr:", cmn.Red(string(stderr))) - } - - proc.Wait() - return proc.ExitState.Success() - // bz := proc.StdoutBuffer.Bytes() - // fmt.Println("EXEC WRITE", string(bz)) -} - -func executeInit(t *testing.T, cmdStr string) (chainID string) { - out := tests.ExecuteT(t, cmdStr, app.DefaultKeyPass) - - var initRes map[string]json.RawMessage - err := json.Unmarshal([]byte(out), &initRes) - require.NoError(t, err) - - err = json.Unmarshal(initRes["chain_id"], &chainID) - require.NoError(t, err) - - return -} - -func executeGetAddrPK(t *testing.T, cmdStr string) (sdk.AccAddress, crypto.PubKey) { - out := tests.ExecuteT(t, cmdStr, "") - var ko keys.KeyOutput - keys.UnmarshalJSON([]byte(out), &ko) - - pk, err := sdk.GetAccPubKeyBech32(ko.PubKey) - require.NoError(t, err) - - return ko.Address, pk -} - -func executeGetAccount(t *testing.T, cmdStr string) (acc *bank.BaseAccount) { - out := tests.ExecuteT(t, cmdStr, "") - var initRes map[string]json.RawMessage - err := json.Unmarshal([]byte(out), &initRes) - require.NoError(t, err, "out %v, err %v", out, err) - - cdc := wire.NewCodec() - wire.RegisterCrypto(cdc) - - err = cdc.UnmarshalJSON([]byte(out), &acc) - require.NoError(t, err, "acc %v, err %v", string(out), err) - - return acc -} - -func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { - out := tests.ExecuteT(t, cmdStr, "") - var validator stake.Validator - cdc := app.MakeCodec() - err := cdc.UnmarshalJSON([]byte(out), &validator) - require.NoError(t, err, "out %v\n, err %v", out, err) - return validator -} - -func executeGetProposal(t *testing.T, cmdStr string) govcli.ProposalOutput { - out := tests.ExecuteT(t, cmdStr, "") - var proposal govcli.ProposalOutput - cdc := app.MakeCodec() - err := cdc.UnmarshalJSON([]byte(out), &proposal) - require.NoError(t, err, "out %v\n, err %v", out, err) - return proposal -} - -func executeGetVote(t *testing.T, cmdStr string) gov.Vote { - out := tests.ExecuteT(t, cmdStr, "") - var vote gov.Vote - cdc := app.MakeCodec() - err := cdc.UnmarshalJSON([]byte(out), &vote) - require.NoError(t, err, "out %v\n, err %v", out, err) - return vote -} - -func executeGetVotes(t *testing.T, cmdStr string) []gov.Vote { - out := tests.ExecuteT(t, cmdStr, "") - var votes []gov.Vote - cdc := app.MakeCodec() - err := cdc.UnmarshalJSON([]byte(out), &votes) - require.NoError(t, err, "out %v\n, err %v", out, err) - return votes -} diff --git a/cmd/clitest/utils.go b/cmd/clitest/utils.go index f47c667c7..5c29f240c 100644 --- a/cmd/clitest/utils.go +++ b/cmd/clitest/utils.go @@ -1,17 +1,27 @@ package clitest import ( + "encoding/json" + "fmt" + "os" + "strconv" + "strings" + "testing" + + "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/stake" + "github.com/irisnet/irishub/app" "github.com/irisnet/irishub/client/bank" "github.com/irisnet/irishub/client/context" + govcli "github.com/irisnet/irishub/client/gov" + "github.com/irisnet/irishub/client/keys" + "github.com/irisnet/irishub/modules/gov" "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/crypto" + cmn "github.com/tendermint/tendermint/libs/common" "github.com/tendermint/tendermint/types" - "strconv" - "strings" - "testing" - "fmt" - "os" - "github.com/irisnet/irishub/app" ) func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) string { @@ -80,3 +90,116 @@ func modifyGenesisFile(t *testing.T, irisHome string) error { genesisDoc.AppState = bz return genesisDoc.SaveAs(genesisFilePath) } + +//___________________________________________________________________________________ +// helper methods + +func getTestingHomeDirs() (string, string) { + tmpDir := os.TempDir() + irisHome := fmt.Sprintf("%s%s.test_iris", tmpDir, string(os.PathSeparator)) + iriscliHome := fmt.Sprintf("%s%s.test_iriscli", tmpDir, string(os.PathSeparator)) + return irisHome, iriscliHome +} + +//___________________________________________________________________________________ +// executors + +func executeWrite(t *testing.T, cmdStr string, writes ...string) bool { + proc := tests.GoExecuteT(t, cmdStr) + + for _, write := range writes { + _, err := proc.StdinPipe.Write([]byte(write + "\n")) + require.NoError(t, err) + } + stdout, stderr, err := proc.ReadAll() + if err != nil { + fmt.Println("Err on proc.ReadAll()", err, cmdStr) + } + // Log output. + if len(stdout) > 0 { + t.Log("Stdout:", cmn.Green(string(stdout))) + } + if len(stderr) > 0 { + t.Log("Stderr:", cmn.Red(string(stderr))) + } + + proc.Wait() + return proc.ExitState.Success() + // bz := proc.StdoutBuffer.Bytes() + // fmt.Println("EXEC WRITE", string(bz)) +} + +func executeInit(t *testing.T, cmdStr string) (chainID string) { + out := tests.ExecuteT(t, cmdStr, app.DefaultKeyPass) + + var initRes map[string]json.RawMessage + err := json.Unmarshal([]byte(out), &initRes) + require.NoError(t, err) + + err = json.Unmarshal(initRes["chain_id"], &chainID) + require.NoError(t, err) + + return +} + +func executeGetAddrPK(t *testing.T, cmdStr string) (sdk.AccAddress, crypto.PubKey) { + out := tests.ExecuteT(t, cmdStr, "") + var ko keys.KeyOutput + keys.UnmarshalJSON([]byte(out), &ko) + + pk, err := sdk.GetAccPubKeyBech32(ko.PubKey) + require.NoError(t, err) + + return ko.Address, pk +} + +func executeGetAccount(t *testing.T, cmdStr string) (acc *bank.BaseAccount) { + out := tests.ExecuteT(t, cmdStr, "") + var initRes map[string]json.RawMessage + err := json.Unmarshal([]byte(out), &initRes) + require.NoError(t, err, "out %v, err %v", out, err) + + cdc := wire.NewCodec() + wire.RegisterCrypto(cdc) + + err = cdc.UnmarshalJSON([]byte(out), &acc) + require.NoError(t, err, "acc %v, err %v", string(out), err) + + return acc +} + +func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { + out := tests.ExecuteT(t, cmdStr, "") + var validator stake.Validator + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &validator) + require.NoError(t, err, "out %v\n, err %v", out, err) + return validator +} + +func executeGetProposal(t *testing.T, cmdStr string) govcli.ProposalOutput { + out := tests.ExecuteT(t, cmdStr, "") + var proposal govcli.ProposalOutput + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &proposal) + require.NoError(t, err, "out %v\n, err %v", out, err) + return proposal +} + +func executeGetVote(t *testing.T, cmdStr string) gov.Vote { + out := tests.ExecuteT(t, cmdStr, "") + var vote gov.Vote + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &vote) + require.NoError(t, err, "out %v\n, err %v", out, err) + return vote +} + +func executeGetVotes(t *testing.T, cmdStr string) []gov.Vote { + out := tests.ExecuteT(t, cmdStr, "") + var votes []gov.Vote + cdc := app.MakeCodec() + err := cdc.UnmarshalJSON([]byte(out), &votes) + require.NoError(t, err, "out %v\n, err %v", out, err) + return votes +} From 5554c9a6260a3aaa5682154c9bc8c1c00a103d92 Mon Sep 17 00:00:00 2001 From: Raymond Date: Wed, 10 Oct 2018 09:32:48 +0800 Subject: [PATCH 8/9] IRISHUB-490: cli test for the bank module --- cmd/clitest/bank_test.go | 92 ++++++++++++++++++++++++++++++++++++++++ cmd/clitest/gov_test.go | 5 --- cmd/clitest/utils.go | 5 +++ 3 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 cmd/clitest/bank_test.go diff --git a/cmd/clitest/bank_test.go b/cmd/clitest/bank_test.go new file mode 100644 index 000000000..6c0711138 --- /dev/null +++ b/cmd/clitest/bank_test.go @@ -0,0 +1,92 @@ +package clitest + +import ( + "fmt" + "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/tests" + "github.com/stretchr/testify/require" + "testing" + + "github.com/irisnet/irishub/app" +) + +func init() { + irisHome, iriscliHome = getTestingHomeDirs() +} + +func TestIrisCLIBankSend(t *testing.T) { + tests.ExecuteT(t, fmt.Sprintf("iris --home=%s unsafe_reset_all", irisHome), "") + executeWrite(t, fmt.Sprintf("iriscli keys delete --home=%s foo", iriscliHome), app.DefaultKeyPass) + executeWrite(t, fmt.Sprintf("iriscli keys delete --home=%s bar", iriscliHome), app.DefaultKeyPass) + chainID := executeInit(t, fmt.Sprintf("iris init -o --name=foo --home=%s --home-client=%s", irisHome, iriscliHome)) + executeWrite(t, fmt.Sprintf("iriscli keys add --home=%s bar", iriscliHome), app.DefaultKeyPass) + + err := modifyGenesisFile(t, irisHome) + require.NoError(t, err) + + // get a free port, also setup some common flags + servAddr, port, err := server.FreeTCPAddr() + require.NoError(t, err) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", iriscliHome, servAddr, chainID) + + // start iris server + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("iris start --home=%s --rpc.laddr=%v", irisHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show foo --output=json --home=%s", iriscliHome)) + barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show bar --output=json --home=%s", iriscliHome)) + + fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + fooCoin := convertToIrisBaseAccount(t, fooAcc) + require.Equal(t, "1000000000000iris", fooCoin) + + executeWrite(t, fmt.Sprintf("iriscli bank send %v --amount=10iris --to=%s --from=foo --gas=10000 --fee=0.04iris", flags, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", barAddr, flags)) + barCoin := convertToIrisBaseAccount(t, barAcc) + require.Equal(t, "10iris", barCoin) + + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + fooCoin = convertToIrisBaseAccount(t, fooAcc) + num := getAmuntFromCoinStr(t, fooCoin) + + if !(num > 999999999989 && num < 999999999990) { + t.Error("Test Failed: (999999999989, 999999999990) expected, recieved: {}", num) + } + + // test autosequencing + executeWrite(t, fmt.Sprintf("iriscli bank send %v --amount=10iris --to=%s --from=foo --gas=10000 --fee=0.04iris", flags, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", barAddr, flags)) + barCoin = convertToIrisBaseAccount(t, barAcc) + require.Equal(t, "20iris", barCoin) + + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + fooCoin = convertToIrisBaseAccount(t, fooAcc) + num = getAmuntFromCoinStr(t, fooCoin) + + if !(num > 999999999979 && num < 999999999980) { + t.Error("Test Failed: (999999999979, 999999999980) expected, recieved: {}", num) + } + + // test memo + executeWrite(t, fmt.Sprintf("iriscli bank send %v --amount=10iris --to=%s --from=foo --memo 'testmemo' --gas=10000 --fee=0.04iris", flags, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", barAddr, flags)) + barCoin = convertToIrisBaseAccount(t, barAcc) + require.Equal(t, "30iris", barCoin) + + fooAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + fooCoin = convertToIrisBaseAccount(t, fooAcc) + num = getAmuntFromCoinStr(t, fooCoin) + + if !(num > 999999999969 && num < 999999999970) { + t.Error("Test Failed: (999999999969, 999999999970) expected, recieved: {}", num) + } +} diff --git a/cmd/clitest/gov_test.go b/cmd/clitest/gov_test.go index 6cb80bc93..0dfffef2a 100644 --- a/cmd/clitest/gov_test.go +++ b/cmd/clitest/gov_test.go @@ -11,11 +11,6 @@ import ( "github.com/irisnet/irishub/modules/gov" ) -var ( - irisHome = "" - iriscliHome = "" -) - func init() { irisHome, iriscliHome = getTestingHomeDirs() } diff --git a/cmd/clitest/utils.go b/cmd/clitest/utils.go index 5c29f240c..e70359843 100644 --- a/cmd/clitest/utils.go +++ b/cmd/clitest/utils.go @@ -24,6 +24,11 @@ import ( "github.com/tendermint/tendermint/types" ) +var ( + irisHome = "" + iriscliHome = "" +) + func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) string { cdc := wire.NewCodec() wire.RegisterCrypto(cdc) From de460de4633a4713cf34a92767c0cbe3aea25f5f Mon Sep 17 00:00:00 2001 From: Raymond Date: Wed, 10 Oct 2018 10:48:32 +0800 Subject: [PATCH 9/9] IRISHUB-490: cli test for the stake module --- {cmd => client}/clitest/bank_test.go | 0 {cmd => client}/clitest/gov_test.go | 0 client/clitest/stake_test.go | 95 ++++++++++++++++++++++++++++ {cmd => client}/clitest/utils.go | 12 ++-- client/stake/common.go | 2 +- 5 files changed, 102 insertions(+), 7 deletions(-) rename {cmd => client}/clitest/bank_test.go (100%) rename {cmd => client}/clitest/gov_test.go (100%) create mode 100644 client/clitest/stake_test.go rename {cmd => client}/clitest/utils.go (96%) diff --git a/cmd/clitest/bank_test.go b/client/clitest/bank_test.go similarity index 100% rename from cmd/clitest/bank_test.go rename to client/clitest/bank_test.go diff --git a/cmd/clitest/gov_test.go b/client/clitest/gov_test.go similarity index 100% rename from cmd/clitest/gov_test.go rename to client/clitest/gov_test.go diff --git a/client/clitest/stake_test.go b/client/clitest/stake_test.go new file mode 100644 index 000000000..48aca69dc --- /dev/null +++ b/client/clitest/stake_test.go @@ -0,0 +1,95 @@ +package clitest + +import ( + "fmt" + "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/tests" + "github.com/stretchr/testify/require" + "testing" + + "github.com/irisnet/irishub/app" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func init() { + irisHome, iriscliHome = getTestingHomeDirs() +} + +func TestIrisCLIStakeCreateValidator(t *testing.T) { + tests.ExecuteT(t, fmt.Sprintf("iris --home=%s unsafe_reset_all", irisHome), "") + executeWrite(t, fmt.Sprintf("iriscli keys delete --home=%s foo", iriscliHome), app.DefaultKeyPass) + executeWrite(t, fmt.Sprintf("iriscli keys delete --home=%s bar", iriscliHome), app.DefaultKeyPass) + chainID := executeInit(t, fmt.Sprintf("iris init -o --name=foo --home=%s --home-client=%s", irisHome, iriscliHome)) + executeWrite(t, fmt.Sprintf("iriscli keys add --home=%s bar", iriscliHome), app.DefaultKeyPass) + + err := modifyGenesisFile(t, irisHome) + require.NoError(t, err) + + // get a free port, also setup some common flags + servAddr, port, err := server.FreeTCPAddr() + require.NoError(t, err) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", iriscliHome, servAddr, chainID) + + // start iris server + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("iris start --home=%s --rpc.laddr=%v", irisHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show foo --output=json --home=%s", iriscliHome)) + barAddr, barPubKey := executeGetAddrPK(t, fmt.Sprintf("iriscli keys show bar --output=json --home=%s", iriscliHome)) + barCeshPubKey := sdk.MustBech32ifyValPub(barPubKey) + + executeWrite(t, fmt.Sprintf("iriscli bank send %v --amount=10iris --to=%s --from=foo --gas=10000 --fee=0.04iris", flags, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", barAddr, flags)) + barCoin := convertToIrisBaseAccount(t, barAcc) + require.Equal(t, "10iris", barCoin) + + fooAcc := executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", fooAddr, flags)) + fooCoin := convertToIrisBaseAccount(t, fooAcc) + num := getAmuntFromCoinStr(t, fooCoin) + + if !(num > 999999999989 && num < 999999999990) { + t.Error("Test Failed: (999999999989, 999999999990) expected, recieved: {}", num) + } + + // create validator + cvStr := fmt.Sprintf("iriscli stake create-validator %v", flags) + cvStr += fmt.Sprintf(" --from=%s", "bar") + cvStr += fmt.Sprintf(" --pubkey=%s", barCeshPubKey) + cvStr += fmt.Sprintf(" --amount=%v", "2iris") + cvStr += fmt.Sprintf(" --moniker=%v", "bar-vally") + cvStr += fmt.Sprintf(" --fee=%s", "0.004iris") + + executeWrite(t, cvStr, app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc = executeGetAccount(t, fmt.Sprintf("iriscli bank account %s %v", barAddr, flags)) + barCoin = convertToIrisBaseAccount(t, barAcc) + num = getAmuntFromCoinStr(t, barCoin) + + if !(num > 7 && num < 8) { + t.Error("Test Failed: (7, 8) expected, recieved: {}", num) + } + + validator := executeGetValidator(t, fmt.Sprintf("iriscli stake validator %s --output=json %v", barAddr, flags)) + require.Equal(t, validator.Owner, barAddr) + require.Equal(t, "2.0000000000", validator.Tokens) + + // unbond a single share + unbondStr := fmt.Sprintf("iriscli stake unbond begin %v", flags) + unbondStr += fmt.Sprintf(" --from=%s", "bar") + unbondStr += fmt.Sprintf(" --address-validator=%s", barAddr) + unbondStr += fmt.Sprintf(" --shares-amount=%v", "1") + unbondStr += fmt.Sprintf(" --fee=%s", "0.004iris") + + success := executeWrite(t, unbondStr, app.DefaultKeyPass) + require.True(t, success) + tests.WaitForNextNBlocksTM(2, port) + + validator = executeGetValidator(t, fmt.Sprintf("iriscli stake validator %s --output=json %v", barAddr, flags)) + require.Equal(t, "1.0000000000", validator.Tokens) +} diff --git a/cmd/clitest/utils.go b/client/clitest/utils.go similarity index 96% rename from cmd/clitest/utils.go rename to client/clitest/utils.go index e70359843..35cf01740 100644 --- a/cmd/clitest/utils.go +++ b/client/clitest/utils.go @@ -11,12 +11,12 @@ import ( "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" - "github.com/cosmos/cosmos-sdk/x/stake" "github.com/irisnet/irishub/app" "github.com/irisnet/irishub/client/bank" "github.com/irisnet/irishub/client/context" govcli "github.com/irisnet/irishub/client/gov" "github.com/irisnet/irishub/client/keys" + stakecli "github.com/irisnet/irishub/client/stake" "github.com/irisnet/irishub/modules/gov" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto" @@ -29,6 +29,9 @@ var ( iriscliHome = "" ) +//___________________________________________________________________________________ +// helper methods + func convertToIrisBaseAccount(t *testing.T, acc *bank.BaseAccount) string { cdc := wire.NewCodec() wire.RegisterCrypto(cdc) @@ -96,9 +99,6 @@ func modifyGenesisFile(t *testing.T, irisHome string) error { return genesisDoc.SaveAs(genesisFilePath) } -//___________________________________________________________________________________ -// helper methods - func getTestingHomeDirs() (string, string) { tmpDir := os.TempDir() irisHome := fmt.Sprintf("%s%s.test_iris", tmpDir, string(os.PathSeparator)) @@ -173,9 +173,9 @@ func executeGetAccount(t *testing.T, cmdStr string) (acc *bank.BaseAccount) { return acc } -func executeGetValidator(t *testing.T, cmdStr string) stake.Validator { +func executeGetValidator(t *testing.T, cmdStr string) stakecli.ValidatorOutput { out := tests.ExecuteT(t, cmdStr, "") - var validator stake.Validator + var validator stakecli.ValidatorOutput cdc := app.MakeCodec() err := cdc.UnmarshalJSON([]byte(out), &validator) require.NoError(t, err, "out %v\n, err %v", out, err) diff --git a/client/stake/common.go b/client/stake/common.go index dd7a6a319..2f9aae70e 100644 --- a/client/stake/common.go +++ b/client/stake/common.go @@ -95,7 +95,7 @@ type ValidatorOutput struct { CommissionChangeToday sdk.Rat `json:"commission_change_today"` // XXX commission rate change today, reset each day (UTC time) // fee related - LastBondedTokens sdk.Rat `json:"prev_bonded_shares"` // last bonded token amount + LastBondedTokens sdk.Rat `json:"prev_bonded_tokens"` // last bonded token amount } func (v ValidatorOutput) HumanReadableString() (string, error) {