From 2d9ce3121b185c2ebcd219dffeda7e315a963d1b Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Tue, 27 Nov 2018 16:52:27 +0100 Subject: [PATCH] updated tests --- cmd/gaia/cli_test/cli_test.go | 654 ++++++++++++++++------------------ 1 file changed, 310 insertions(+), 344 deletions(-) diff --git a/cmd/gaia/cli_test/cli_test.go b/cmd/gaia/cli_test/cli_test.go index 148eb8b33..b4f7ee98d 100644 --- a/cmd/gaia/cli_test/cli_test.go +++ b/cmd/gaia/cli_test/cli_test.go @@ -2,42 +2,12 @@ package clitest -// import ( -// "encoding/json" -// "fmt" -// "io/ioutil" -// "os" -// "path" -// "path/filepath" -// "testing" -// -// "github.com/tendermint/tendermint/types" -// -// "github.com/stretchr/testify/require" -// -// abci "github.com/tendermint/tendermint/abci/types" -// "github.com/tendermint/tendermint/crypto" -// cmn "github.com/tendermint/tendermint/libs/common" -// -// "github.com/cosmos/cosmos-sdk/client" -// "github.com/cosmos/cosmos-sdk/client/keys" -// "github.com/cosmos/cosmos-sdk/client/tx" -// "github.com/cosmos/cosmos-sdk/cmd/gaia/app" -// "github.com/cosmos/cosmos-sdk/codec" -// "github.com/cosmos/cosmos-sdk/server" -// "github.com/cosmos/cosmos-sdk/tests" -// sdk "github.com/cosmos/cosmos-sdk/types" -// "github.com/cosmos/cosmos-sdk/x/auth" -// "github.com/cosmos/cosmos-sdk/x/gov" -// "github.com/cosmos/cosmos-sdk/x/stake" -// stakeTypes "github.com/cosmos/cosmos-sdk/x/stake/types" -// ) - import ( "encoding/json" "fmt" "io/ioutil" "os" + "path" "path/filepath" "testing" @@ -45,9 +15,11 @@ import ( "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" cmn "github.com/tendermint/tendermint/libs/common" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/cmd/gaia/app" @@ -70,173 +42,173 @@ func init() { gaiadHome, gaiacliHome = getTestingHomeDirs() } -// func TestGaiaCLIMinimumFees(t *testing.T) { -// chainID, servAddr, port := initializeFixtures(t) -// flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) -// -// // start gaiad server with minimum fees -// proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v --minimum_fees=2feeToken", gaiadHome, servAddr)) -// -// defer proc.Stop(false) -// tests.WaitForTMStart(port) -// tests.WaitForNextNBlocksTM(2, port) -// -// fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) -// barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) -// -// fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// success := executeWrite(t, fmt.Sprintf( -// "gaiacli tx send %v --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// require.False(t, success) -// tests.WaitForNextNBlocksTM(2, port) -// -// } -// -// func TestGaiaCLIFeesDeduction(t *testing.T) { -// chainID, servAddr, port := initializeFixtures(t) -// flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) -// -// // start gaiad server with minimum fees -// proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v --minimum_fees=1fooToken", gaiadHome, servAddr)) -// -// defer proc.Stop(false) -// tests.WaitForTMStart(port) -// tests.WaitForNextNBlocksTM(2, port) -// -// fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) -// barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) -// -// fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(1000), fooAcc.GetCoins().AmountOf("fooToken").Int64()) -// -// // test simulation -// success := executeWrite(t, fmt.Sprintf( -// "gaiacli tx send %v --amount=1000fooToken --to=%s --from=foo --fee=1fooToken --dry-run", flags, barAddr), app.DefaultKeyPass) -// require.True(t, success) -// tests.WaitForNextNBlocksTM(2, port) -// // ensure state didn't change -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(1000), fooAcc.GetCoins().AmountOf("fooToken").Int64()) -// -// // insufficient funds (coins + fees) -// success = executeWrite(t, fmt.Sprintf( -// "gaiacli tx send %v --amount=1000fooToken --to=%s --from=foo --fee=1fooToken", flags, barAddr), app.DefaultKeyPass) -// require.False(t, success) -// tests.WaitForNextNBlocksTM(2, port) -// // ensure state didn't change -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(1000), fooAcc.GetCoins().AmountOf("fooToken").Int64()) -// -// // test success (transfer = coins + fees) -// success = executeWrite(t, fmt.Sprintf( -// "gaiacli tx send %v --fee=300fooToken --amount=500fooToken --to=%s --from=foo", flags, barAddr), app.DefaultKeyPass) -// require.True(t, success) -// tests.WaitForNextNBlocksTM(2, port) -// } -// -// func TestGaiaCLISend(t *testing.T) { -// chainID, servAddr, port := initializeFixtures(t) -// flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) -// -// // start gaiad server -// proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v", gaiadHome, servAddr)) -// -// defer proc.Stop(false) -// tests.WaitForTMStart(port) -// tests.WaitForNextNBlocksTM(2, port) -// -// fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) -// barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) -// -// fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// tests.WaitForNextNBlocksTM(2, port) -// -// barAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) -// require.Equal(t, int64(10), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// // Test --dry-run -// success := executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo --dry-run", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// require.True(t, success) -// // Check state didn't change -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// // test autosequencing -// executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// tests.WaitForNextNBlocksTM(2, port) -// -// barAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) -// require.Equal(t, int64(20), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(30), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// // test memo -// executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo --memo 'testmemo'", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// tests.WaitForNextNBlocksTM(2, port) -// -// barAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) -// require.Equal(t, int64(30), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(20), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// } -// -// func TestGaiaCLIGasAuto(t *testing.T) { -// chainID, servAddr, port := initializeFixtures(t) -// flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) -// -// // start gaiad server -// proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v", gaiadHome, servAddr)) -// -// defer proc.Stop(false) -// tests.WaitForTMStart(port) -// tests.WaitForNextNBlocksTM(2, port) -// -// fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) -// barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) -// -// fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// // Test failure with auto gas disabled and very little gas set by hand -// success := executeWrite(t, fmt.Sprintf("gaiacli tx send %v --gas=10 --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// require.False(t, success) -// tests.WaitForNextNBlocksTM(2, port) -// // Check state didn't change -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// // Test failure with negative gas -// success = executeWrite(t, fmt.Sprintf("gaiacli tx send %v --gas=-100 --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// require.False(t, success) -// -// // Test failure with 0 gas -// success = executeWrite(t, fmt.Sprintf("gaiacli tx send %v --gas=0 --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// require.False(t, success) -// -// // Enable auto gas -// success, stdout, _ := executeWriteRetStdStreams(t, fmt.Sprintf("gaiacli tx send %v --json --gas=simulate --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) -// require.True(t, success) -// // check that gas wanted == gas used -// cdc := app.MakeCodec() -// jsonOutput := struct { -// Height int64 -// TxHash string -// Response abci.ResponseDeliverTx -// }{} -// require.Nil(t, cdc.UnmarshalJSON([]byte(stdout), &jsonOutput)) -// require.Equal(t, jsonOutput.Response.GasWanted, jsonOutput.Response.GasUsed) -// tests.WaitForNextNBlocksTM(2, port) -// // Check state has changed accordingly -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// } +func TestGaiaCLIMinimumFees(t *testing.T) { + chainID, servAddr, port := initializeFixtures(t) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) + + // start gaiad server with minimum fees + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v --minimum_fees=2feeToken", gaiadHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) + barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) + + fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + success := executeWrite(t, fmt.Sprintf( + "gaiacli tx send %v --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + require.False(t, success) + tests.WaitForNextNBlocksTM(2, port) + +} + +func TestGaiaCLIFeesDeduction(t *testing.T) { + chainID, servAddr, port := initializeFixtures(t) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) + + // start gaiad server with minimum fees + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v --minimum_fees=1fooToken", gaiadHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) + barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) + + fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(1000), fooAcc.GetCoins().AmountOf("fooToken").Int64()) + + // test simulation + success := executeWrite(t, fmt.Sprintf( + "gaiacli tx send %v --amount=1000fooToken --to=%s --from=foo --fee=1fooToken --dry-run", flags, barAddr), app.DefaultKeyPass) + require.True(t, success) + tests.WaitForNextNBlocksTM(2, port) + // ensure state didn't change + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(1000), fooAcc.GetCoins().AmountOf("fooToken").Int64()) + + // insufficient funds (coins + fees) + success = executeWrite(t, fmt.Sprintf( + "gaiacli tx send %v --amount=1000fooToken --to=%s --from=foo --fee=1fooToken", flags, barAddr), app.DefaultKeyPass) + require.False(t, success) + tests.WaitForNextNBlocksTM(2, port) + // ensure state didn't change + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(1000), fooAcc.GetCoins().AmountOf("fooToken").Int64()) + + // test success (transfer = coins + fees) + success = executeWrite(t, fmt.Sprintf( + "gaiacli tx send %v --fee=300fooToken --amount=500fooToken --to=%s --from=foo", flags, barAddr), app.DefaultKeyPass) + require.True(t, success) + tests.WaitForNextNBlocksTM(2, port) +} + +func TestGaiaCLISend(t *testing.T) { + chainID, servAddr, port := initializeFixtures(t) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) + + // start gaiad server + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v", gaiadHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) + barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) + + fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) + require.Equal(t, int64(10), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + // Test --dry-run + success := executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo --dry-run", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + require.True(t, success) + // Check state didn't change + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + // test autosequencing + executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) + require.Equal(t, int64(20), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(30), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + // test memo + executeWrite(t, fmt.Sprintf("gaiacli tx send %v --amount=10%s --to=%s --from=foo --memo 'testmemo'", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + tests.WaitForNextNBlocksTM(2, port) + + barAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) + require.Equal(t, int64(30), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(20), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) +} + +func TestGaiaCLIGasAuto(t *testing.T) { + chainID, servAddr, port := initializeFixtures(t) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) + + // start gaiad server + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf("gaiad start --home=%s --rpc.laddr=%v", gaiadHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) + barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) + + fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + // Test failure with auto gas disabled and very little gas set by hand + success := executeWrite(t, fmt.Sprintf("gaiacli tx send %v --gas=10 --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + require.False(t, success) + tests.WaitForNextNBlocksTM(2, port) + // Check state didn't change + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + // Test failure with negative gas + success = executeWrite(t, fmt.Sprintf("gaiacli tx send %v --gas=-100 --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + require.False(t, success) + + // Test failure with 0 gas + success = executeWrite(t, fmt.Sprintf("gaiacli tx send %v --gas=0 --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + require.False(t, success) + + // Enable auto gas + success, stdout, _ := executeWriteRetStdStreams(t, fmt.Sprintf("gaiacli tx send %v --json --gas=simulate --amount=10%s --to=%s --from=foo", flags, stakeTypes.DefaultBondDenom, barAddr), app.DefaultKeyPass) + require.True(t, success) + // check that gas wanted == gas used + cdc := app.MakeCodec() + jsonOutput := struct { + Height int64 + TxHash string + Response abci.ResponseDeliverTx + }{} + require.Nil(t, cdc.UnmarshalJSON([]byte(stdout), &jsonOutput)) + require.Equal(t, jsonOutput.Response.GasWanted, jsonOutput.Response.GasUsed) + tests.WaitForNextNBlocksTM(2, port) + // Check state has changed accordingly + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) +} func TestGaiaCLICreateValidator(t *testing.T) { chainID, servAddr, port := initializeFixtures(t) @@ -305,9 +277,6 @@ func TestGaiaCLICreateValidator(t *testing.T) { require.Len(t, validatorDelegations, 1) require.NotZero(t, validatorDelegations[0].Shares) - txs := executeGetTxs(t, fmt.Sprintf("gaiacli query txs --tags='action:delegate&delegator:%s&destination-validator:%s' %v", "bar", sdk.ValAddress(barAddr).String(), flags)) - require.Len(t, txs, 1) - // unbond a single share unbondStr := fmt.Sprintf("gaiacli tx stake unbond %v", flags) unbondStr += fmt.Sprintf(" --from=%s", "bar") @@ -331,9 +300,6 @@ func TestGaiaCLICreateValidator(t *testing.T) { require.Len(t, validatorUbds, 1) require.Equal(t, "1", validatorUbds[0].Balance.Amount.String()) - txs = executeGetTxs(t, fmt.Sprintf("gaiacli query txs --tags='action:begin-unbonding&delegator:%s&source-validator:%s' %v", "bar", sdk.ValAddress(barAddr).String(), flags)) - require.Len(t, txs, 1) - params := executeGetParams(t, fmt.Sprintf("gaiacli query stake parameters --output=json %v", flags)) require.True(t, defaultParams.Equal(params)) @@ -497,146 +463,146 @@ func TestGaiaCLISubmitProposal(t *testing.T) { require.Equal(t, " 2 - Apples", proposalsQuery) } -// func TestGaiaCLISendGenerateSignAndBroadcast(t *testing.T) { -// chainID, servAddr, port := initializeFixtures(t) -// flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) -// -// // start gaiad server -// proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf( -// "gaiad start --home=%s --rpc.laddr=%v", gaiadHome, servAddr)) -// -// defer proc.Stop(false) -// tests.WaitForTMStart(port) -// tests.WaitForNextNBlocksTM(2, port) -// -// fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) -// barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) -// -// // Test generate sendTx with default gas -// success, stdout, stderr := executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx send %v --amount=10%s --to=%s --from=foo --generate-only", -// flags, stakeTypes.DefaultBondDenom, barAddr), []string{}...) -// require.True(t, success) -// require.Empty(t, stderr) -// msg := unmarshalStdTx(t, stdout) -// require.Equal(t, msg.Fee.Gas, uint64(client.DefaultGasLimit)) -// require.Equal(t, len(msg.Msgs), 1) -// require.Equal(t, 0, len(msg.GetSignatures())) -// -// // Test generate sendTx with --gas=$amount -// success, stdout, stderr = executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx send %v --amount=10%s --to=%s --from=foo --gas=100 --generate-only", -// flags, stakeTypes.DefaultBondDenom, barAddr), []string{}...) -// require.True(t, success) -// require.Empty(t, stderr) -// msg = unmarshalStdTx(t, stdout) -// require.Equal(t, msg.Fee.Gas, uint64(100)) -// require.Equal(t, len(msg.Msgs), 1) -// require.Equal(t, 0, len(msg.GetSignatures())) -// -// // Test generate sendTx, estimate gas -// success, stdout, stderr = executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx send %v --amount=10%s --to=%s --from=foo --gas=simulate --generate-only", -// flags, stakeTypes.DefaultBondDenom, barAddr), []string{}...) -// require.True(t, success) -// require.NotEmpty(t, stderr) -// msg = unmarshalStdTx(t, stdout) -// require.True(t, msg.Fee.Gas > 0) -// require.Equal(t, len(msg.Msgs), 1) -// -// // Write the output to disk -// unsignedTxFile := writeToNewTempFile(t, stdout) -// defer os.Remove(unsignedTxFile.Name()) -// -// // Test sign --validate-signatures -// success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx sign %v --validate-signatures %v", flags, unsignedTxFile.Name())) -// require.False(t, success) -// require.Equal(t, fmt.Sprintf("Signers:\n 0: %v\n\nSignatures:\n\n", fooAddr.String()), stdout) -// -// // Test sign -// success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx sign %v --name=foo %v", flags, unsignedTxFile.Name()), app.DefaultKeyPass) -// require.True(t, success) -// msg = unmarshalStdTx(t, stdout) -// require.Equal(t, len(msg.Msgs), 1) -// require.Equal(t, 1, len(msg.GetSignatures())) -// require.Equal(t, fooAddr.String(), msg.GetSigners()[0].String()) -// -// // Write the output to disk -// signedTxFile := writeToNewTempFile(t, stdout) -// defer os.Remove(signedTxFile.Name()) -// -// // Test sign --print-signatures -// success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx sign %v --validate-signatures %v", flags, signedTxFile.Name())) -// require.True(t, success) -// require.Equal(t, fmt.Sprintf("Signers:\n 0: %v\n\nSignatures:\n 0: %v\t[OK]\n\n", fooAddr.String(), -// fooAddr.String()), stdout) -// -// // Test broadcast -// fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( -// "gaiacli tx broadcast %v --json %v", flags, signedTxFile.Name())) -// require.True(t, success) -// -// var result struct { -// Response abci.ResponseDeliverTx -// } -// -// require.Nil(t, app.MakeCodec().UnmarshalJSON([]byte(stdout), &result)) -// require.Equal(t, msg.Fee.Gas, uint64(result.Response.GasUsed)) -// require.Equal(t, msg.Fee.Gas, uint64(result.Response.GasWanted)) -// tests.WaitForNextNBlocksTM(2, port) -// -// barAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) -// require.Equal(t, int64(10), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// -// fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) -// require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) -// } -// -// func TestGaiaCLIConfig(t *testing.T) { -// require.NoError(t, os.RemoveAll(gaiacliHome)) -// require.NoError(t, os.RemoveAll(gaiadHome)) -// servAddr, port, err := server.FreeTCPAddr() -// require.NoError(t, err) -// node := fmt.Sprintf("%s:%s", servAddr, port) -// chainID := executeInit(t, fmt.Sprintf("gaiad init -o --moniker=foo --home=%s", gaiadHome)) -// executeWrite(t, fmt.Sprintf("gaiacli --home=%s config", gaiadHome), gaiacliHome, node, "y") -// config, err := ioutil.ReadFile(path.Join(gaiacliHome, "config", "config.toml")) -// require.NoError(t, err) -// expectedConfig := fmt.Sprintf(`chain_id = "%s" -// home = "%s" -// node = "%s" -// output = "text" -// trace = false -// trust_node = true -// `, chainID, gaiacliHome, node) -// require.Equal(t, expectedConfig, string(config)) -// // ensure a backup gets created -// executeWrite(t, "gaiacli config", gaiacliHome, node, "y", "y") -// configBackup, err := ioutil.ReadFile(path.Join(gaiacliHome, "config", "config.toml-old")) -// require.NoError(t, err) -// require.Equal(t, expectedConfig, string(configBackup)) -// -// require.NoError(t, os.RemoveAll(gaiadHome)) -// executeWrite(t, "gaiacli config", gaiacliHome, node, "y") -// -// // ensure it works without an initialized gaiad state -// expectedConfig = fmt.Sprintf(`chain_id = "" -// home = "%s" -// node = "%s" -// output = "text" -// trace = false -// trust_node = true -// `, gaiacliHome, node) -// config, err = ioutil.ReadFile(path.Join(gaiacliHome, "config", "config.toml")) -// require.NoError(t, err) -// require.Equal(t, expectedConfig, string(config)) -// } +func TestGaiaCLISendGenerateSignAndBroadcast(t *testing.T) { + chainID, servAddr, port := initializeFixtures(t) + flags := fmt.Sprintf("--home=%s --node=%v --chain-id=%v", gaiacliHome, servAddr, chainID) + + // start gaiad server + proc := tests.GoExecuteTWithStdout(t, fmt.Sprintf( + "gaiad start --home=%s --rpc.laddr=%v", gaiadHome, servAddr)) + + defer proc.Stop(false) + tests.WaitForTMStart(port) + tests.WaitForNextNBlocksTM(2, port) + + fooAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show foo --output=json --home=%s", gaiacliHome)) + barAddr, _ := executeGetAddrPK(t, fmt.Sprintf("gaiacli keys show bar --output=json --home=%s", gaiacliHome)) + + // Test generate sendTx with default gas + success, stdout, stderr := executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx send %v --amount=10%s --to=%s --from=foo --generate-only", + flags, stakeTypes.DefaultBondDenom, barAddr), []string{}...) + require.True(t, success) + require.Empty(t, stderr) + msg := unmarshalStdTx(t, stdout) + require.Equal(t, msg.Fee.Gas, uint64(client.DefaultGasLimit)) + require.Equal(t, len(msg.Msgs), 1) + require.Equal(t, 0, len(msg.GetSignatures())) + + // Test generate sendTx with --gas=$amount + success, stdout, stderr = executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx send %v --amount=10%s --to=%s --from=foo --gas=100 --generate-only", + flags, stakeTypes.DefaultBondDenom, barAddr), []string{}...) + require.True(t, success) + require.Empty(t, stderr) + msg = unmarshalStdTx(t, stdout) + require.Equal(t, msg.Fee.Gas, uint64(100)) + require.Equal(t, len(msg.Msgs), 1) + require.Equal(t, 0, len(msg.GetSignatures())) + + // Test generate sendTx, estimate gas + success, stdout, stderr = executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx send %v --amount=10%s --to=%s --from=foo --gas=simulate --generate-only", + flags, stakeTypes.DefaultBondDenom, barAddr), []string{}...) + require.True(t, success) + require.NotEmpty(t, stderr) + msg = unmarshalStdTx(t, stdout) + require.True(t, msg.Fee.Gas > 0) + require.Equal(t, len(msg.Msgs), 1) + + // Write the output to disk + unsignedTxFile := writeToNewTempFile(t, stdout) + defer os.Remove(unsignedTxFile.Name()) + + // Test sign --validate-signatures + success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx sign %v --validate-signatures %v", flags, unsignedTxFile.Name())) + require.False(t, success) + require.Equal(t, fmt.Sprintf("Signers:\n 0: %v\n\nSignatures:\n\n", fooAddr.String()), stdout) + + // Test sign + success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx sign %v --name=foo %v", flags, unsignedTxFile.Name()), app.DefaultKeyPass) + require.True(t, success) + msg = unmarshalStdTx(t, stdout) + require.Equal(t, len(msg.Msgs), 1) + require.Equal(t, 1, len(msg.GetSignatures())) + require.Equal(t, fooAddr.String(), msg.GetSigners()[0].String()) + + // Write the output to disk + signedTxFile := writeToNewTempFile(t, stdout) + defer os.Remove(signedTxFile.Name()) + + // Test sign --print-signatures + success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx sign %v --validate-signatures %v", flags, signedTxFile.Name())) + require.True(t, success) + require.Equal(t, fmt.Sprintf("Signers:\n 0: %v\n\nSignatures:\n 0: %v\t[OK]\n\n", fooAddr.String(), + fooAddr.String()), stdout) + + // Test broadcast + fooAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(50), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + success, stdout, _ = executeWriteRetStdStreams(t, fmt.Sprintf( + "gaiacli tx broadcast %v --json %v", flags, signedTxFile.Name())) + require.True(t, success) + + var result struct { + Response abci.ResponseDeliverTx + } + + require.Nil(t, app.MakeCodec().UnmarshalJSON([]byte(stdout), &result)) + require.Equal(t, msg.Fee.Gas, uint64(result.Response.GasUsed)) + require.Equal(t, msg.Fee.Gas, uint64(result.Response.GasWanted)) + tests.WaitForNextNBlocksTM(2, port) + + barAcc := executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", barAddr, flags)) + require.Equal(t, int64(10), barAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) + + fooAcc = executeGetAccount(t, fmt.Sprintf("gaiacli query account %s %v", fooAddr, flags)) + require.Equal(t, int64(40), fooAcc.GetCoins().AmountOf(stakeTypes.DefaultBondDenom).Int64()) +} + +func TestGaiaCLIConfig(t *testing.T) { + require.NoError(t, os.RemoveAll(gaiacliHome)) + require.NoError(t, os.RemoveAll(gaiadHome)) + servAddr, port, err := server.FreeTCPAddr() + require.NoError(t, err) + node := fmt.Sprintf("%s:%s", servAddr, port) + chainID := executeInit(t, fmt.Sprintf("gaiad init -o --moniker=foo --home=%s", gaiadHome)) + executeWrite(t, fmt.Sprintf("gaiacli --home=%s config", gaiadHome), gaiacliHome, node, "y") + config, err := ioutil.ReadFile(path.Join(gaiacliHome, "config", "config.toml")) + require.NoError(t, err) + expectedConfig := fmt.Sprintf(`chain_id = "%s" +home = "%s" +node = "%s" +output = "text" +trace = false +trust_node = true +`, chainID, gaiacliHome, node) + require.Equal(t, expectedConfig, string(config)) + // ensure a backup gets created + executeWrite(t, "gaiacli config", gaiacliHome, node, "y", "y") + configBackup, err := ioutil.ReadFile(path.Join(gaiacliHome, "config", "config.toml-old")) + require.NoError(t, err) + require.Equal(t, expectedConfig, string(configBackup)) + + require.NoError(t, os.RemoveAll(gaiadHome)) + executeWrite(t, "gaiacli config", gaiacliHome, node, "y") + + // ensure it works without an initialized gaiad state + expectedConfig = fmt.Sprintf(`chain_id = "" +home = "%s" +node = "%s" +output = "text" +trace = false +trust_node = true +`, gaiacliHome, node) + config, err = ioutil.ReadFile(path.Join(gaiacliHome, "config", "config.toml")) + require.NoError(t, err) + require.Equal(t, expectedConfig, string(config)) +} //___________________________________________________________________________________ // helper methods