refactor TestSlashToZeroPowerRemoved

This commit is contained in:
Jonathan Gimeno 2020-02-25 13:18:49 +01:00
parent 385c5c556b
commit ed401119e4
2 changed files with 38 additions and 36 deletions

View File

@ -14,36 +14,6 @@ import (
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
func TestSlashToZeroPowerRemoved(t *testing.T) {
// initialize setup
ctx, _, bk, keeper, _ := CreateTestInput(t, false, 100)
// add a validator
validator := types.NewValidator(addrVals[0], PKs[0], types.Description{})
valTokens := sdk.TokensFromConsensusPower(100)
bondedPool := keeper.GetBondedPool(ctx)
err := bk.SetBalances(ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(keeper.BondDenom(ctx), valTokens)))
require.NoError(t, err)
keeper.supplyKeeper.SetModuleAccount(ctx, bondedPool)
validator, _ = validator.AddTokensFromDel(valTokens)
require.Equal(t, sdk.Unbonded, validator.Status)
require.Equal(t, valTokens, validator.Tokens)
keeper.SetValidatorByConsAddr(ctx, validator)
validator = TestingUpdateValidator(keeper, ctx, validator, true)
require.Equal(t, valTokens, validator.Tokens, "\nvalidator %v\npool %v", validator, valTokens)
// slash the validator by 100%
consAddr0 := sdk.ConsAddress(PKs[0].Address())
keeper.Slash(ctx, consAddr0, 0, 100, sdk.OneDec())
// apply TM updates
keeper.ApplyAndReturnValidatorSetUpdates(ctx)
// validator should be unbonding
validator, _ = keeper.GetValidator(ctx, addrVals[0])
require.Equal(t, validator.GetStatus(), sdk.Unbonding)
}
// This function tests UpdateValidator, GetValidator, GetLastValidators, RemoveValidator
func TestValidatorBasics(t *testing.T) {
ctx, _, _, keeper, _ := CreateTestInput(t, false, 1000)

View File

@ -4,6 +4,8 @@ import (
"fmt"
"testing"
"github.com/cosmos/cosmos-sdk/x/supply"
"github.com/cosmos/cosmos-sdk/x/staking/keeper"
"github.com/cosmos/cosmos-sdk/simapp"
@ -15,10 +17,10 @@ import (
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
func bootstrapValidatorTest(t *testing.T, power int64) (*simapp.SimApp, sdk.Context, []sdk.AccAddress, []sdk.ValAddress) {
func bootstrapValidatorTest(t *testing.T, power int64, numAddrs int) (*simapp.SimApp, sdk.Context, []sdk.AccAddress, []sdk.ValAddress) {
_, app, ctx := getBaseSimappWithCustomKeeper()
addrDels, addrVals := generateAddresses(app, ctx, 100)
addrDels, addrVals := generateAddresses(app, ctx, numAddrs)
amt := sdk.TokensFromConsensusPower(power)
totalSupply := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), amt.MulRaw(int64(len(addrDels)))))
@ -28,11 +30,13 @@ func bootstrapValidatorTest(t *testing.T, power int64) (*simapp.SimApp, sdk.Cont
require.NoError(t, err)
app.SupplyKeeper.SetModuleAccount(ctx, notBondedPool)
app.SupplyKeeper.SetSupply(ctx, supply.NewSupply(totalSupply))
return app, ctx, addrDels, addrVals
}
func TestSetValidator(t *testing.T) {
app, ctx, _, _ := bootstrapValidatorTest(t, 10)
app, ctx, _, _ := bootstrapValidatorTest(t, 10, 100)
valPubKey := PKs[0]
valAddr := sdk.ValAddress(valPubKey.Address().Bytes())
@ -85,7 +89,7 @@ func TestSetValidator(t *testing.T) {
}
func TestUpdateValidatorByPowerIndex(t *testing.T) {
app, ctx, _, _ := bootstrapValidatorTest(t, 0)
app, ctx, _, _ := bootstrapValidatorTest(t, 0, 100)
_, addrVals := generateAddresses(app, ctx, 1)
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
@ -127,8 +131,7 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) {
maxVals := 5
// create context, keeper, and pool for tests
app, ctx, _, _ := bootstrapValidatorTest(t, 0)
_, valAddrs := generateAddresses(app, ctx, 10)
app, ctx, _, valAddrs := bootstrapValidatorTest(t, 0, 100)
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
@ -180,3 +183,32 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) {
)
}
}
func TestSlashToZeroPowerRemoved(t *testing.T) {
// initialize setup
app, ctx, _, addrVals := bootstrapValidatorTest(t, 100, 20)
// add a validator
validator := types.NewValidator(addrVals[0], PKs[0], types.Description{})
valTokens := sdk.TokensFromConsensusPower(100)
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
err := app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), valTokens)))
require.NoError(t, err)
app.SupplyKeeper.SetModuleAccount(ctx, bondedPool)
validator, _ = validator.AddTokensFromDel(valTokens)
require.Equal(t, sdk.Unbonded, validator.Status)
require.Equal(t, valTokens, validator.Tokens)
app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
require.Equal(t, valTokens, validator.Tokens, "\nvalidator %v\npool %v", validator, valTokens)
// slash the validator by 100%
app.StakingKeeper.Slash(ctx, sdk.ConsAddress(PKs[0].Address()), 0, 100, sdk.OneDec())
// apply TM updates
app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
// validator should be unbonding
validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
require.Equal(t, validator.GetStatus(), sdk.Unbonding)
}