cosmos-sdk/x/distribution/keeper/delegation_test.go

95 lines
3.2 KiB
Go
Raw Normal View History

2018-10-04 18:37:40 -07:00
package keeper
2018-10-09 10:58:59 -07:00
import (
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
2018-10-09 10:58:59 -07:00
"github.com/cosmos/cosmos-sdk/x/stake"
"github.com/stretchr/testify/require"
)
2018-10-04 18:37:40 -07:00
2018-10-10 23:14:06 -07:00
func TestWithdrawDelegationRewardBasic(t *testing.T) {
ctx, accMapper, keeper, sk, fck := CreateTestInputAdvanced(t, false, 100, sdk.ZeroDec())
2018-10-09 10:58:59 -07:00
stakeHandler := stake.NewHandler(sk)
denom := sk.GetParams(ctx).BondDenom
//first make a validator
msgCreateValidator := stake.NewTestMsgCreateValidator(valOpAddr1, valConsPk1, 10)
2018-10-09 10:58:59 -07:00
got := stakeHandler(ctx, msgCreateValidator)
require.True(t, got.IsOK(), "expected msg to be ok, got %v", got)
_ = sk.ApplyAndReturnValidatorSetUpdates(ctx)
2018-10-09 10:58:59 -07:00
// delegate
msgDelegate := stake.NewTestMsgDelegate(delAddr1, valOpAddr1, 10)
2018-10-09 10:58:59 -07:00
got = stakeHandler(ctx, msgDelegate)
require.True(t, got.IsOK())
2018-10-09 18:43:23 -07:00
amt := accMapper.GetAccount(ctx, delAddr1).GetCoins().AmountOf(denom)
require.Equal(t, int64(90), amt.Int64())
2018-10-09 18:59:07 -07:00
2018-10-10 23:14:06 -07:00
totalPower := int64(20)
totalPowerDec := sdk.NewDec(totalPower)
// allocate 100 denom of fees
feeInputs := sdk.NewInt(100)
fck.SetCollectedFees(sdk.Coins{sdk.NewCoin(denom, feeInputs)})
require.Equal(t, feeInputs, fck.GetCollectedFees(ctx).AmountOf(denom))
2018-10-10 23:14:06 -07:00
keeper.SetProposerConsAddr(ctx, valConsAddr1)
keeper.SetSumPrecommitPower(ctx, totalPowerDec)
keeper.AllocateFees(ctx)
2018-10-10 23:14:06 -07:00
// withdraw delegation
ctx = ctx.WithBlockHeight(1)
keeper.WithdrawDelegationReward(ctx, delAddr1, valOpAddr1)
amt = accMapper.GetAccount(ctx, delAddr1).GetCoins().AmountOf(denom)
2018-10-10 23:14:06 -07:00
expRes := sdk.NewDec(90).Add(sdk.NewDec(100).Quo(sdk.NewDec(2))) // 90 + 100 tokens * 10/20
require.True(sdk.DecEq(t, expRes, sdk.NewDecFromInt(amt)))
}
func TestWithdrawDelegationRewardWithCommission(t *testing.T) {
ctx, accMapper, keeper, sk, fck := CreateTestInputAdvanced(t, false, 100, sdk.ZeroDec())
stakeHandler := stake.NewHandler(sk)
denom := sk.GetParams(ctx).BondDenom
//first make a validator with 10% commission
msgCreateValidator := stake.NewTestMsgCreateValidatorWithCommission(
valOpAddr1, valConsPk1, 10, sdk.NewDecWithPrec(1, 1))
got := stakeHandler(ctx, msgCreateValidator)
require.True(t, got.IsOK(), "expected msg to be ok, got %v", got)
_ = sk.ApplyAndReturnValidatorSetUpdates(ctx)
// delegate
msgDelegate := stake.NewTestMsgDelegate(delAddr1, valOpAddr1, 10)
got = stakeHandler(ctx, msgDelegate)
require.True(t, got.IsOK())
amt := accMapper.GetAccount(ctx, delAddr1).GetCoins().AmountOf(denom)
require.Equal(t, int64(90), amt.Int64())
2018-10-10 23:14:06 -07:00
totalPower := int64(20)
totalPowerDec := sdk.NewDec(totalPower)
// allocate 100 denom of fees
feeInputs := sdk.NewInt(100)
fck.SetCollectedFees(sdk.Coins{sdk.NewCoin(denom, feeInputs)})
require.Equal(t, feeInputs, fck.GetCollectedFees(ctx).AmountOf(denom))
keeper.SetProposerConsAddr(ctx, valConsAddr1)
keeper.SetSumPrecommitPower(ctx, totalPowerDec)
keeper.AllocateFees(ctx)
// withdraw delegation
ctx = ctx.WithBlockHeight(1)
keeper.WithdrawDelegationReward(ctx, delAddr1, valOpAddr1)
amt = accMapper.GetAccount(ctx, delAddr1).GetCoins().AmountOf(denom)
expRes := sdk.NewDec(90).Add(sdk.NewDec(90).Quo(sdk.NewDec(2))) // 90 + 100*90% tokens * 10/20
require.True(sdk.DecEq(t, expRes, sdk.NewDecFromInt(amt)))
2018-10-04 18:37:40 -07:00
}
func TestWithdrawDelegationRewardsAll(t *testing.T) {
}
func TestGetDelegatorRewardsAll(t *testing.T) {
}