|
6 | 6 | "github.com/stretchr/testify/require"
|
7 | 7 |
|
8 | 8 | sdk "github.com/cosmos/cosmos-sdk/types"
|
| 9 | + "github.com/cosmos/cosmos-sdk/x/stake" |
9 | 10 | abci "github.com/tendermint/tendermint/abci/types"
|
10 | 11 | )
|
11 | 12 |
|
@@ -166,3 +167,49 @@ func TestTickPassedVotingPeriod(t *testing.T) {
|
166 | 167 | depositsIterator.Close()
|
167 | 168 | require.Equal(t, StatusRejected, keeper.GetProposal(ctx, proposalID).GetStatus())
|
168 | 169 | }
|
| 170 | + |
| 171 | +func TestSlashing(t *testing.T) { |
| 172 | + mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10) |
| 173 | + SortAddresses(addrs) |
| 174 | + mapp.BeginBlock(abci.RequestBeginBlock{}) |
| 175 | + ctx := mapp.BaseApp.NewContext(false, abci.Header{}) |
| 176 | + govHandler := NewHandler(keeper) |
| 177 | + stakeHandler := stake.NewHandler(sk) |
| 178 | + |
| 179 | + createValidators(t, stakeHandler, ctx, addrs[:3], []int64{25, 6, 7}) |
| 180 | + |
| 181 | + initTotalPower := keeper.ds.GetValidatorSet().TotalPower(ctx) |
| 182 | + val0Initial := keeper.ds.GetValidatorSet().Validator(ctx, addrs[0]).GetPower().Quo(initTotalPower) |
| 183 | + val1Initial := keeper.ds.GetValidatorSet().Validator(ctx, addrs[1]).GetPower().Quo(initTotalPower) |
| 184 | + val2Initial := keeper.ds.GetValidatorSet().Validator(ctx, addrs[2]).GetPower().Quo(initTotalPower) |
| 185 | + |
| 186 | + newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewCoin("steak", 15)}) |
| 187 | + |
| 188 | + res := govHandler(ctx, newProposalMsg) |
| 189 | + require.True(t, res.IsOK()) |
| 190 | + var proposalID int64 |
| 191 | + keeper.cdc.UnmarshalBinaryBare(res.Data, &proposalID) |
| 192 | + |
| 193 | + ctx = ctx.WithBlockHeight(10) |
| 194 | + require.Equal(t, StatusVotingPeriod, keeper.GetProposal(ctx, proposalID).GetStatus()) |
| 195 | + |
| 196 | + newVoteMsg := NewMsgVote(addrs[0], proposalID, OptionYes) |
| 197 | + res = govHandler(ctx, newVoteMsg) |
| 198 | + require.True(t, res.IsOK()) |
| 199 | + |
| 200 | + EndBlocker(ctx, keeper) |
| 201 | + |
| 202 | + ctx = ctx.WithBlockHeight(215) |
| 203 | + require.Equal(t, StatusVotingPeriod, keeper.GetProposal(ctx, proposalID).GetStatus()) |
| 204 | + |
| 205 | + EndBlocker(ctx, keeper) |
| 206 | + |
| 207 | + endTotalPower := keeper.ds.GetValidatorSet().TotalPower(ctx) |
| 208 | + val0End := keeper.ds.GetValidatorSet().Validator(ctx, addrs[0]).GetPower().Quo(endTotalPower) |
| 209 | + val1End := keeper.ds.GetValidatorSet().Validator(ctx, addrs[1]).GetPower().Quo(endTotalPower) |
| 210 | + val2End := keeper.ds.GetValidatorSet().Validator(ctx, addrs[2]).GetPower().Quo(endTotalPower) |
| 211 | + |
| 212 | + require.True(t, val0End.GTE(val0Initial)) |
| 213 | + require.True(t, val1End.LT(val1Initial)) |
| 214 | + require.True(t, val2End.LT(val2Initial)) |
| 215 | +} |
0 commit comments