missing cli tests for distr and mint (#6349)

Add cli tests for distribution and mint modules.

Co-authored-by: Alexander Bezobchuk <alexanderbez@users.noreply.github.com>
Co-authored-by: Alessio Treglia <alessio@tendermint.com>
This commit is contained in:
atheeshp 2020-06-11 16:33:43 +05:30 committed by GitHub
parent 783e9959e0
commit 4ecbd00436
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 225 additions and 10 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/stretchr/testify/require"
tmtypes "github.com/tendermint/tendermint/types"
"github.com/cosmos/cosmos-sdk/tests"
"github.com/cosmos/cosmos-sdk/tests/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/distribution/client/testutil"
@ -40,18 +41,85 @@ func TestCLIWithdrawRewards(t *testing.T) {
proc := f.SDStart()
t.Cleanup(func() { proc.Stop(false) })
fooAddr := f.KeyAddress(cli.KeyFoo)
rewards := testutil.QueryRewards(f, fooAddr)
require.Equal(t, 1, len(rewards.Rewards))
require.NotNil(t, rewards.Total)
params := testutil.QueryParameters(f)
require.NotEmpty(t, params)
fooAddr := f.KeyAddress(cli.KeyFoo)
barAddr := f.KeyAddress(cli.KeyBar)
fooVal := sdk.ValAddress(fooAddr)
outstandingRewards := testutil.QueryValidatorOutstandingRewards(f, fooVal.String())
require.NotEmpty(t, outstandingRewards)
require.False(t, outstandingRewards.Rewards.IsZero())
commission := testutil.QueryCommission(f, fooVal.String())
require.NotEmpty(t, commission)
require.False(t, commission.Commission.IsZero())
rewards := testutil.QueryRewards(f, fooAddr)
require.Len(t, rewards.Rewards, 1)
require.NotEmpty(t, rewards.Total)
// withdrawing rewards of a delegation for a single validator
success := testutil.TxWithdrawRewards(f, fooVal, fooAddr.String(), "-y")
require.True(t, success)
rewards = testutil.QueryRewards(f, fooAddr)
require.Equal(t, 1, len(rewards.Rewards))
require.Len(t, rewards.Rewards, 1)
require.Nil(t, rewards.Total)
// Setting up a new withdraw address
success, stdout, stderr := testutil.TxSetWithdrawAddress(f, fooAddr.String(), barAddr.String(), "--generate-only")
require.True(t, success)
require.Empty(t, stderr)
msg := cli.UnmarshalStdTx(t, f.Cdc, stdout)
require.NotZero(t, msg.Fee.Gas)
require.Len(t, msg.Msgs, 1)
require.Len(t, msg.GetSignatures(), 0)
success, _, stderr = testutil.TxSetWithdrawAddress(f, cli.KeyFoo, barAddr.String(), "-y")
require.True(t, success)
require.Empty(t, stderr)
tests.WaitForNextNBlocksTM(1, f.Port)
// Withdraw all delegation rewards from all validators
success, stdout, stderr = testutil.TxWithdrawAllRewards(f, fooAddr.String(), "--generate-only")
require.True(t, success)
require.Empty(t, stderr)
msg = cli.UnmarshalStdTx(t, f.Cdc, stdout)
require.NotZero(t, msg.Fee.Gas)
require.Len(t, msg.Msgs, 1)
require.Len(t, msg.GetSignatures(), 0)
success, _, stderr = testutil.TxWithdrawAllRewards(f, cli.KeyFoo, "-y")
require.True(t, success)
require.Empty(t, stderr)
tests.WaitForNextNBlocksTM(1, f.Port)
newTokens := sdk.NewCoin(cli.Denom, sdk.TokensFromConsensusPower(1))
// Withdraw all delegation rewards from all validators
success, stdout, stderr = testutil.TxFundCommunityPool(f, fooAddr.String(), newTokens, "--generate-only")
require.True(t, success)
require.Empty(t, stderr)
msg = cli.UnmarshalStdTx(t, f.Cdc, stdout)
require.NotZero(t, msg.Fee.Gas)
require.Len(t, msg.Msgs, 1)
require.Len(t, msg.GetSignatures(), 0)
success, _, stderr = testutil.TxFundCommunityPool(f, cli.KeyFoo, newTokens, "-y")
require.True(t, success)
require.Empty(t, stderr)
tests.WaitForNextNBlocksTM(1, f.Port)
amount := testutil.QueryCommunityPool(f)
require.False(t, amount.IsZero())
slashes := testutil.QuerySlashes(f, fooVal.String())
require.Nil(t, slashes, nil)
f.Cleanup()
}

View File

@ -190,8 +190,10 @@ $ %s query distribution slashes cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmq
return err
}
var slashes types.ValidatorSlashEvents
cdc.MustUnmarshalJSON(res, &slashes)
var slashes []types.ValidatorSlashEvent
if err = cdc.UnmarshalJSON(res, &slashes); err != nil {
return fmt.Errorf("failed to unmarshal response: %w", err)
}
return clientCtx.PrintOutput(slashes)
},
}

View File

@ -12,11 +12,30 @@ import (
"github.com/cosmos/cosmos-sdk/x/distribution"
)
// TxWithdrawRewards raises a txn to withdraw rewards
func TxWithdrawRewards(f *cli.Fixtures, valAddr sdk.ValAddress, from string, flags ...string) bool {
cmd := fmt.Sprintf("%s tx distribution withdraw-rewards %s %v --keyring-backend=test --from=%s", f.SimcliBinary, valAddr, f.Flags(), from)
return cli.ExecuteWrite(f.T, cli.AddFlags(cmd, flags), clientkeys.DefaultKeyPass)
}
// TxSetWithdrawAddress helps to set the withdraw address for rewards associated with a delegator address
func TxSetWithdrawAddress(f *cli.Fixtures, from, withDrawAddr string, flags ...string) (bool, string, string) {
cmd := fmt.Sprintf("%s tx distribution set-withdraw-addr %s --from %s %v --keyring-backend=test", f.SimcliBinary, withDrawAddr, from, f.Flags())
return cli.ExecuteWriteRetStdStreams(f.T, cli.AddFlags(cmd, flags), clientkeys.DefaultKeyPass)
}
// TxWithdrawAllRewards raises a txn to withdraw all rewards of a delegator address
func TxWithdrawAllRewards(f *cli.Fixtures, from string, flags ...string) (bool, string, string) {
cmd := fmt.Sprintf("%s tx distribution withdraw-all-rewards %v --keyring-backend=test --from=%s", f.SimcliBinary, f.Flags(), from)
return cli.ExecuteWriteRetStdStreams(f.T, cli.AddFlags(cmd, flags), clientkeys.DefaultKeyPass)
}
// TxFundCommunityPool Funds the community pool with the specified amount
func TxFundCommunityPool(f *cli.Fixtures, from string, amount sdk.Coin, flags ...string) (bool, string, string) {
cmd := fmt.Sprintf("%s tx distribution fund-community-pool %v %v --keyring-backend=test --from=%s", f.SimcliBinary, amount, f.Flags(), from)
return cli.ExecuteWriteRetStdStreams(f.T, cli.AddFlags(cmd, flags), clientkeys.DefaultKeyPass)
}
// QueryRewards returns the rewards of a delegator
func QueryRewards(f *cli.Fixtures, delAddr sdk.AccAddress, flags ...string) distribution.QueryDelegatorTotalRewardsResponse {
cmd := fmt.Sprintf("%s query distribution rewards %s %s", f.SimcliBinary, delAddr, f.Flags())
@ -24,7 +43,61 @@ func QueryRewards(f *cli.Fixtures, delAddr sdk.AccAddress, flags ...string) dist
require.Empty(f.T, errStr)
var rewards distribution.QueryDelegatorTotalRewardsResponse
err := f.Cdc.UnmarshalJSON([]byte(res), &rewards)
require.NoError(f.T, err)
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(res), &rewards))
return rewards
}
// QueryValidatorOutstandingRewards distribution outstanding (un-withdrawn) rewards
func QueryValidatorOutstandingRewards(f *cli.Fixtures, valAddr string) distribution.ValidatorOutstandingRewards {
cmd := fmt.Sprintf("%s query distribution validator-outstanding-rewards %s %v", f.SimcliBinary, valAddr, f.Flags())
res, errStr := tests.ExecuteT(f.T, cmd, "")
require.Empty(f.T, errStr)
var outstandingRewards distribution.ValidatorOutstandingRewards
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(res), &outstandingRewards))
return outstandingRewards
}
// QueryParameters is simcli query distribution parameters
func QueryParameters(f *cli.Fixtures, flags ...string) distribution.Params {
cmd := fmt.Sprintf("%s query distribution params %v", f.SimcliBinary, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var params distribution.Params
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &params))
return params
}
// QueryCommission returns validator commission rewards from delegators to that validator.
func QueryCommission(f *cli.Fixtures, valAddr string, flags ...string) distribution.ValidatorAccumulatedCommission {
cmd := fmt.Sprintf("%s query distribution commission %s %v", f.SimcliBinary, valAddr, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var commission distribution.ValidatorAccumulatedCommission
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &commission))
return commission
}
// QuerySlashes returns all slashes of a validator for a given block range.
func QuerySlashes(f *cli.Fixtures, valAddr string, flags ...string) []distribution.ValidatorSlashEvent {
cmd := fmt.Sprintf("%s query distribution slashes %s 0 5 %v ", f.SimcliBinary, valAddr, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var slashes []distribution.ValidatorSlashEvent
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &slashes))
return slashes
}
// QueryCommunityPool returns the amount of coins in the community pool
func QueryCommunityPool(f *cli.Fixtures, flags ...string) sdk.DecCoins {
cmd := fmt.Sprintf("%s query distribution community-pool %v ", f.SimcliBinary, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var amount sdk.DecCoins
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &amount))
return amount
}

View File

@ -0,0 +1,28 @@
// +build cli_test
package cli_test
import (
"testing"
"github.com/cosmos/cosmos-sdk/tests/cli"
"github.com/cosmos/cosmos-sdk/x/mint/client/testutil"
"github.com/stretchr/testify/require"
)
func TestCLIMintQueries(t *testing.T) {
t.Parallel()
f := cli.InitFixtures(t)
proc := f.SDStart()
t.Cleanup(func() { proc.Stop(false) })
params := testutil.QueryMintingParams(f)
require.NotEmpty(t, params)
inflation := testutil.QueryInflation(f)
require.False(t, inflation.IsZero())
annualProvisions := testutil.QueryAnnualProvisions(f)
require.False(t, annualProvisions.IsZero())
}

View File

@ -0,0 +1,44 @@
package testutil
import (
"fmt"
"github.com/cosmos/cosmos-sdk/tests"
"github.com/cosmos/cosmos-sdk/tests/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/mint/types"
"github.com/stretchr/testify/require"
)
// QueryMintingParams returns the current minting parameters
func QueryMintingParams(f *cli.Fixtures, flags ...string) types.Params {
cmd := fmt.Sprintf("%s query mint params %v", f.SimcliBinary, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var params types.Params
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &params))
return params
}
// QueryInflation returns the current minting inflation value
func QueryInflation(f *cli.Fixtures, flags ...string) sdk.Dec {
cmd := fmt.Sprintf("%s query mint inflation %v", f.SimcliBinary, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var inflation sdk.Dec
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &inflation))
return inflation
}
// QueryAnnualProvisions returns the current minting annual provisions value
func QueryAnnualProvisions(f *cli.Fixtures, flags ...string) sdk.Dec {
cmd := fmt.Sprintf("%s query mint annual-provisions %v", f.SimcliBinary, f.Flags())
out, errStr := tests.ExecuteT(f.T, cli.AddFlags(cmd, flags), "")
require.Empty(f.T, errStr)
var annualProvisions sdk.Dec
require.NoError(f.T, f.Cdc.UnmarshalJSON([]byte(out), &annualProvisions))
return annualProvisions
}