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:
parent
783e9959e0
commit
4ecbd00436
@ -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()
|
||||
}
|
||||
|
||||
@ -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)
|
||||
},
|
||||
}
|
||||
|
||||
@ -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), ¶ms))
|
||||
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
|
||||
}
|
||||
|
||||
28
x/mint/client/cli/cli_test.go
Normal file
28
x/mint/client/cli/cli_test.go
Normal 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())
|
||||
}
|
||||
44
x/mint/client/testutil/helpers.go
Normal file
44
x/mint/client/testutil/helpers.go
Normal 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), ¶ms))
|
||||
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
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user