Skip to content

Commit

Permalink
missing cli tests for distr and mint (#6349)
Browse files Browse the repository at this point in the history
Add cli tests for distribution and mint modules.

Co-authored-by: Alexander Bezobchuk <[email protected]>
Co-authored-by: Alessio Treglia <[email protected]>
  • Loading branch information
3 people authored Jun 11, 2020
1 parent 783e995 commit 4ecbd00
Show file tree
Hide file tree
Showing 5 changed files with 224 additions and 9 deletions.
78 changes: 73 additions & 5 deletions x/distribution/client/cli/cli_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -40,18 +41,85 @@ func TestCLIWithdrawRewards(t *testing.T) {
proc := f.SDStart()
t.Cleanup(func() { proc.Stop(false) })

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.Equal(t, 1, len(rewards.Rewards))
require.NotNil(t, rewards.Total)
require.Len(t, rewards.Rewards, 1)
require.NotEmpty(t, rewards.Total)

fooVal := sdk.ValAddress(fooAddr)
// 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()
}
6 changes: 4 additions & 2 deletions x/distribution/client/cli/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
},
}
Expand Down
77 changes: 75 additions & 2 deletions x/distribution/client/testutil/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,92 @@ 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())
res, errStr := tests.ExecuteT(f.T, cmd, "")
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
}
28 changes: 28 additions & 0 deletions x/mint/client/cli/cli_test.go
Original file line number Diff line number Diff line change
@@ -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 changes: 44 additions & 0 deletions x/mint/client/testutil/helpers.go
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit 4ecbd00

Please sign in to comment.