end refactor handler_test

This commit is contained in:
Jonathan Gimeno 2020-02-26 15:48:51 +01:00
parent 015fd43f51
commit bbbbc61276
1 changed files with 177 additions and 175 deletions

View File

@ -1,6 +1,7 @@
package staking_test package staking_test
import ( import (
"strings"
"testing" "testing"
"time" "time"
@ -1327,178 +1328,179 @@ func TestUnbondingWhenExcessValidators(t *testing.T) {
require.Equal(t, sdk.Bonded, val1.Status, "%v", val1) require.Equal(t, sdk.Bonded, val1.Status, "%v", val1)
} }
//func TestBondUnbondRedelegateSlashTwice(t *testing.T) { func TestBondUnbondRedelegateSlashTwice(t *testing.T) {
// ctx, _, _, keeper, _ := CreateTestInput(t, false, 1000) app, ctx, delAddrs, valAddrs := bootstrapHandlerGenesisTest(t, 1000, 3, 1000000000)
// handler := NewHandler(keeper)
// handler := staking.NewHandler(app.StakingKeeper)
// valA, valB, del := sdk.ValAddress(Addrs[0]), sdk.ValAddress(Addrs[1]), Addrs[2]
// consAddr0 := sdk.ConsAddress(PKs[0].Address()) valA, valB, del := valAddrs[0], valAddrs[1], delAddrs[2]
// consAddr0 := sdk.ConsAddress(PKs[0].Address())
// valTokens := sdk.TokensFromConsensusPower(10)
// msgCreateValidator := NewTestMsgCreateValidator(valA, PKs[0], valTokens) valTokens := sdk.TokensFromConsensusPower(10)
// res, err := handler(ctx, msgCreateValidator) msgCreateValidator := NewTestMsgCreateValidator(valA, PKs[0], valTokens)
// require.NoError(t, err) res, err := handler(ctx, msgCreateValidator)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// msgCreateValidator = NewTestMsgCreateValidator(valB, PKs[1], valTokens)
// res, err = handler(ctx, msgCreateValidator) msgCreateValidator = NewTestMsgCreateValidator(valB, PKs[1], valTokens)
// require.NoError(t, err) res, err = handler(ctx, msgCreateValidator)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// // delegate 10 stake
// msgDelegate := NewTestMsgDelegate(del, valA, valTokens) // delegate 10 stake
// res, err = handler(ctx, msgDelegate) msgDelegate := NewTestMsgDelegate(del, valA, valTokens)
// require.NoError(t, err) res, err = handler(ctx, msgDelegate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// // apply Tendermint updates
// updates := keeper.ApplyAndReturnValidatorSetUpdates(ctx) // apply Tendermint updates
// require.Equal(t, 2, len(updates)) updates := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
// require.Equal(t, 2, len(updates))
// // a block passes
// ctx = ctx.WithBlockHeight(1) // a block passes
// ctx = ctx.WithBlockHeight(1)
// // begin unbonding 4 stake
// unbondAmt := sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromConsensusPower(4)) // begin unbonding 4 stake
// msgUndelegate := NewMsgUndelegate(del, valA, unbondAmt) unbondAmt := sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromConsensusPower(4))
// res, err = handler(ctx, msgUndelegate) msgUndelegate := types.NewMsgUndelegate(del, valA, unbondAmt)
// require.NoError(t, err) res, err = handler(ctx, msgUndelegate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// // begin redelegate 6 stake
// redAmt := sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromConsensusPower(6)) // begin redelegate 6 stake
// msgBeginRedelegate := NewMsgBeginRedelegate(del, valA, valB, redAmt) redAmt := sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromConsensusPower(6))
// res, err = handler(ctx, msgBeginRedelegate) msgBeginRedelegate := types.NewMsgBeginRedelegate(del, valA, valB, redAmt)
// require.NoError(t, err) res, err = handler(ctx, msgBeginRedelegate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// // destination delegation should have 6 shares
// delegation, found := keeper.GetDelegation(ctx, del, valB) // destination delegation should have 6 shares
// require.True(t, found) delegation, found := app.StakingKeeper.GetDelegation(ctx, del, valB)
// require.Equal(t, sdk.NewDecFromInt(redAmt.Amount), delegation.Shares) require.True(t, found)
// require.Equal(t, sdk.NewDecFromInt(redAmt.Amount), delegation.Shares)
// // must apply validator updates
// updates = keeper.ApplyAndReturnValidatorSetUpdates(ctx) // must apply validator updates
// require.Equal(t, 2, len(updates)) updates = app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
// require.Equal(t, 2, len(updates))
// // slash the validator by half
// keeper.Slash(ctx, consAddr0, 0, 20, sdk.NewDecWithPrec(5, 1)) // slash the validator by half
// app.StakingKeeper.Slash(ctx, consAddr0, 0, 20, sdk.NewDecWithPrec(5, 1))
// // unbonding delegation should have been slashed by half
// ubd, found := keeper.GetUnbondingDelegation(ctx, del, valA) // unbonding delegation should have been slashed by half
// require.True(t, found) ubd, found := app.StakingKeeper.GetUnbondingDelegation(ctx, del, valA)
// require.Len(t, ubd.Entries, 1) require.True(t, found)
// require.Equal(t, unbondAmt.Amount.QuoRaw(2), ubd.Entries[0].Balance) require.Len(t, ubd.Entries, 1)
// require.Equal(t, unbondAmt.Amount.QuoRaw(2), ubd.Entries[0].Balance)
// // redelegation should have been slashed by half
// redelegation, found := keeper.GetRedelegation(ctx, del, valA, valB) // redelegation should have been slashed by half
// require.True(t, found) redelegation, found := app.StakingKeeper.GetRedelegation(ctx, del, valA, valB)
// require.Len(t, redelegation.Entries, 1) require.True(t, found)
// require.Len(t, redelegation.Entries, 1)
// // destination delegation should have been slashed by half
// delegation, found = keeper.GetDelegation(ctx, del, valB) // destination delegation should have been slashed by half
// require.True(t, found) delegation, found = app.StakingKeeper.GetDelegation(ctx, del, valB)
// require.Equal(t, sdk.NewDecFromInt(redAmt.Amount.QuoRaw(2)), delegation.Shares) require.True(t, found)
// require.Equal(t, sdk.NewDecFromInt(redAmt.Amount.QuoRaw(2)), delegation.Shares)
// // validator power should have been reduced by half
// validator, found := keeper.GetValidator(ctx, valA) // validator power should have been reduced by half
// require.True(t, found) validator, found := app.StakingKeeper.GetValidator(ctx, valA)
// require.Equal(t, valTokens.QuoRaw(2), validator.GetBondedTokens()) require.True(t, found)
// require.Equal(t, valTokens.QuoRaw(2), validator.GetBondedTokens())
// // slash the validator for an infraction committed after the unbonding and redelegation begin
// ctx = ctx.WithBlockHeight(3) // slash the validator for an infraction committed after the unbonding and redelegation begin
// keeper.Slash(ctx, consAddr0, 2, 10, sdk.NewDecWithPrec(5, 1)) ctx = ctx.WithBlockHeight(3)
// app.StakingKeeper.Slash(ctx, consAddr0, 2, 10, sdk.NewDecWithPrec(5, 1))
// // unbonding delegation should be unchanged
// ubd, found = keeper.GetUnbondingDelegation(ctx, del, valA) // unbonding delegation should be unchanged
// require.True(t, found) ubd, found = app.StakingKeeper.GetUnbondingDelegation(ctx, del, valA)
// require.Len(t, ubd.Entries, 1) require.True(t, found)
// require.Equal(t, unbondAmt.Amount.QuoRaw(2), ubd.Entries[0].Balance) require.Len(t, ubd.Entries, 1)
// require.Equal(t, unbondAmt.Amount.QuoRaw(2), ubd.Entries[0].Balance)
// // redelegation should be unchanged
// redelegation, found = keeper.GetRedelegation(ctx, del, valA, valB) // redelegation should be unchanged
// require.True(t, found) redelegation, found = app.StakingKeeper.GetRedelegation(ctx, del, valA, valB)
// require.Len(t, redelegation.Entries, 1) require.True(t, found)
// require.Len(t, redelegation.Entries, 1)
// // destination delegation should be unchanged
// delegation, found = keeper.GetDelegation(ctx, del, valB) // destination delegation should be unchanged
// require.True(t, found) delegation, found = app.StakingKeeper.GetDelegation(ctx, del, valB)
// require.Equal(t, sdk.NewDecFromInt(redAmt.Amount.QuoRaw(2)), delegation.Shares) require.True(t, found)
// require.Equal(t, sdk.NewDecFromInt(redAmt.Amount.QuoRaw(2)), delegation.Shares)
// // end blocker
// EndBlocker(ctx, keeper) // end blocker
// staking.EndBlocker(ctx, app.StakingKeeper)
// // validator power should have been reduced to zero
// // validator should be in unbonding state // validator power should have been reduced to zero
// validator, _ = keeper.GetValidator(ctx, valA) // validator should be in unbonding state
// require.Equal(t, validator.GetStatus(), sdk.Unbonding) validator, _ = app.StakingKeeper.GetValidator(ctx, valA)
//} require.Equal(t, validator.GetStatus(), sdk.Unbonding)
// }
//func TestInvalidMsg(t *testing.T) {
// k := Keeper{} func TestInvalidMsg(t *testing.T) {
// h := NewHandler(k) k := staking.Keeper{}
// h := staking.NewHandler(k)
// res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), sdk.NewTestMsg())
// require.Error(t, err) res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), sdk.NewTestMsg())
// require.Nil(t, res) require.Error(t, err)
// require.True(t, strings.Contains(err.Error(), "unrecognized staking message type")) require.Nil(t, res)
//} require.True(t, strings.Contains(err.Error(), "unrecognized staking message type"))
// }
//func TestInvalidCoinDenom(t *testing.T) {
// ctx, _, _, keeper, _ := CreateTestInput(t, false, 1000) func TestInvalidCoinDenom(t *testing.T) {
// handler := NewHandler(keeper) app, ctx, delAddrs, valAddrs := bootstrapHandlerGenesisTest(t, 1000, 3, 1000000000)
// handler := staking.NewHandler(app.StakingKeeper)
// valA, valB, delAddr := sdk.ValAddress(Addrs[0]), sdk.ValAddress(Addrs[1]), Addrs[2]
// valA, valB, delAddr := valAddrs[0], valAddrs[1], delAddrs[2]
// valTokens := sdk.TokensFromConsensusPower(100)
// invalidCoin := sdk.NewCoin("churros", valTokens) valTokens := sdk.TokensFromConsensusPower(100)
// validCoin := sdk.NewCoin(sdk.DefaultBondDenom, valTokens) invalidCoin := sdk.NewCoin("churros", valTokens)
// oneCoin := sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt()) validCoin := sdk.NewCoin(sdk.DefaultBondDenom, valTokens)
// oneCoin := sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())
// commission := types.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.ZeroDec())
// commission := types.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.ZeroDec())
// msgCreate := types.NewMsgCreateValidator(valA, PKs[0], invalidCoin, Description{}, commission, sdk.OneInt())
// res, err := handler(ctx, msgCreate) msgCreate := types.NewMsgCreateValidator(valA, PKs[0], invalidCoin, types.Description{}, commission, sdk.OneInt())
// require.Error(t, err) res, err := handler(ctx, msgCreate)
// require.Nil(t, res) require.Error(t, err)
// require.Nil(t, res)
// msgCreate = types.NewMsgCreateValidator(valA, PKs[0], validCoin, Description{}, commission, sdk.OneInt())
// res, err = handler(ctx, msgCreate) msgCreate = types.NewMsgCreateValidator(valA, PKs[0], validCoin, types.Description{}, commission, sdk.OneInt())
// require.NoError(t, err) res, err = handler(ctx, msgCreate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// msgCreate = types.NewMsgCreateValidator(valB, PKs[1], validCoin, Description{}, commission, sdk.OneInt())
// res, err = handler(ctx, msgCreate) msgCreate = types.NewMsgCreateValidator(valB, PKs[1], validCoin, types.Description{}, commission, sdk.OneInt())
// require.NoError(t, err) res, err = handler(ctx, msgCreate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// msgDelegate := types.NewMsgDelegate(delAddr, valA, invalidCoin)
// res, err = handler(ctx, msgDelegate) msgDelegate := types.NewMsgDelegate(delAddr, valA, invalidCoin)
// require.Error(t, err) res, err = handler(ctx, msgDelegate)
// require.Nil(t, res) require.Error(t, err)
// require.Nil(t, res)
// msgDelegate = types.NewMsgDelegate(delAddr, valA, validCoin)
// res, err = handler(ctx, msgDelegate) msgDelegate = types.NewMsgDelegate(delAddr, valA, validCoin)
// require.NoError(t, err) res, err = handler(ctx, msgDelegate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// msgUndelegate := types.NewMsgUndelegate(delAddr, valA, invalidCoin)
// res, err = handler(ctx, msgUndelegate) msgUndelegate := types.NewMsgUndelegate(delAddr, valA, invalidCoin)
// require.Error(t, err) res, err = handler(ctx, msgUndelegate)
// require.Nil(t, res) require.Error(t, err)
// require.Nil(t, res)
// msgUndelegate = types.NewMsgUndelegate(delAddr, valA, oneCoin)
// res, err = handler(ctx, msgUndelegate) msgUndelegate = types.NewMsgUndelegate(delAddr, valA, oneCoin)
// require.NoError(t, err) res, err = handler(ctx, msgUndelegate)
// require.NotNil(t, res) require.NoError(t, err)
// require.NotNil(t, res)
// msgRedelegate := types.NewMsgBeginRedelegate(delAddr, valA, valB, invalidCoin)
// res, err = handler(ctx, msgRedelegate) msgRedelegate := types.NewMsgBeginRedelegate(delAddr, valA, valB, invalidCoin)
// require.Error(t, err) res, err = handler(ctx, msgRedelegate)
// require.Nil(t, res) require.Error(t, err)
// require.Nil(t, res)
// msgRedelegate = types.NewMsgBeginRedelegate(delAddr, valA, valB, oneCoin)
// res, err = handler(ctx, msgRedelegate) msgRedelegate = types.NewMsgBeginRedelegate(delAddr, valA, valB, oneCoin)
// require.NoError(t, err) res, err = handler(ctx, msgRedelegate)
// require.NotNil(t, res) require.NoError(t, err)
//} require.NotNil(t, res)
}