2018-06-21 17:19:14 -07:00
|
|
|
package gov
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-28 17:54:47 -07:00
|
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
2018-07-26 00:10:31 -07:00
|
|
|
"github.com/tendermint/tendermint/crypto"
|
2018-07-25 13:43:37 -07:00
|
|
|
"github.com/tendermint/tendermint/crypto/ed25519"
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-12-10 06:27:25 -08:00
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
2019-01-11 12:08:01 -08:00
|
|
|
"github.com/cosmos/cosmos-sdk/x/staking"
|
2018-06-21 17:19:14 -07:00
|
|
|
)
|
|
|
|
|
2018-07-26 00:10:31 -07:00
|
|
|
var (
|
|
|
|
pubkeys = []crypto.PubKey{ed25519.GenPrivKey().PubKey(), ed25519.GenPrivKey().PubKey(), ed25519.GenPrivKey().PubKey()}
|
2018-09-24 15:23:58 -07:00
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
testDescription = staking.NewDescription("T", "E", "S", "T")
|
|
|
|
testCommissionMsg = staking.NewCommissionMsg(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec())
|
2018-07-26 00:10:31 -07:00
|
|
|
)
|
|
|
|
|
2019-02-05 21:30:48 -08:00
|
|
|
func createValidators(t *testing.T, stakingHandler sdk.Handler, ctx sdk.Context, addrs []sdk.ValAddress, powerAmt []int64) {
|
2018-07-26 00:10:31 -07:00
|
|
|
require.True(t, len(addrs) <= len(pubkeys), "Not enough pubkeys specified at top of file.")
|
2018-09-24 15:23:58 -07:00
|
|
|
|
2018-07-26 00:10:31 -07:00
|
|
|
for i := 0; i < len(addrs); i++ {
|
2019-02-05 21:30:48 -08:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
valTokens := sdk.TokensFromTendermintPower(powerAmt[i])
|
2019-01-11 12:08:01 -08:00
|
|
|
valCreateMsg := staking.NewMsgCreateValidator(
|
2019-02-13 15:01:50 -08:00
|
|
|
addrs[i], pubkeys[i], sdk.NewCoin(sdk.DefaultBondDenom, valTokens),
|
2019-02-08 12:44:19 -08:00
|
|
|
testDescription, testCommissionMsg, sdk.OneInt(),
|
2018-09-24 15:23:58 -07:00
|
|
|
)
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
res := stakingHandler(ctx, valCreateMsg)
|
2018-07-26 00:10:31 -07:00
|
|
|
require.True(t, res.IsOK())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-21 17:19:14 -07:00
|
|
|
func TestTallyNoOneVotes(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:2]))
|
|
|
|
for i, addr := range addrs[:2] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 5})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.True(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
2018-12-10 02:50:20 -08:00
|
|
|
func TestTallyNoQuorum(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-12-10 02:50:20 -08:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-12-10 02:50:20 -08:00
|
|
|
|
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:2]))
|
|
|
|
for i, addr := range addrs[:2] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{2, 5})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-12-10 02:50:20 -08:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
|
|
|
passes, _ := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
|
|
|
require.False(t, passes)
|
|
|
|
}
|
|
|
|
|
2018-06-21 17:19:14 -07:00
|
|
|
func TestTallyOnlyValidatorsAllYes(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:2]))
|
|
|
|
for i, addr := range addrs[:2] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 5})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.True(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyOnlyValidators51No(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:2]))
|
|
|
|
for i, addr := range addrs[:2] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, _ := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyOnlyValidators51Yes(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{6, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.True(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyOnlyValidatorsVetoed(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{6, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionNoWithVeto)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyOnlyValidatorsAbstainPasses(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{6, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionAbstain)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.True(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyOnlyValidatorsAbstainFails(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{6, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionAbstain)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyOnlyValidatorsNonVoter(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{6, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyDelgatorOverride(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delTokens := sdk.TokensFromTendermintPower(30)
|
|
|
|
delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[3], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyDelgatorInherit(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delTokens := sdk.TokensFromTendermintPower(30)
|
|
|
|
delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.True(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyDelgatorMultipleOverride(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delTokens := sdk.TokensFromTendermintPower(10)
|
|
|
|
delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg)
|
2019-02-13 15:01:50 -08:00
|
|
|
delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg2)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[3], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTallyDelgatorMultipleInherit(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-06-21 17:19:14 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
valTokens1 := sdk.TokensFromTendermintPower(25)
|
2019-01-11 12:08:01 -08:00
|
|
|
val1CreateMsg := staking.NewMsgCreateValidator(
|
2019-02-13 15:01:50 -08:00
|
|
|
sdk.ValAddress(addrs[0]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(sdk.DefaultBondDenom, valTokens1), testDescription, testCommissionMsg, sdk.OneInt(),
|
2018-08-30 21:06:44 -07:00
|
|
|
)
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, val1CreateMsg)
|
2018-08-30 21:06:44 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
valTokens2 := sdk.TokensFromTendermintPower(6)
|
2019-01-11 12:08:01 -08:00
|
|
|
val2CreateMsg := staking.NewMsgCreateValidator(
|
2019-02-13 15:01:50 -08:00
|
|
|
sdk.ValAddress(addrs[1]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(sdk.DefaultBondDenom, valTokens2), testDescription, testCommissionMsg, sdk.OneInt(),
|
2018-08-30 21:06:44 -07:00
|
|
|
)
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, val2CreateMsg)
|
2018-08-30 21:06:44 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
valTokens3 := sdk.TokensFromTendermintPower(7)
|
2019-01-11 12:08:01 -08:00
|
|
|
val3CreateMsg := staking.NewMsgCreateValidator(
|
2019-02-13 15:01:50 -08:00
|
|
|
sdk.ValAddress(addrs[2]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(sdk.DefaultBondDenom, valTokens3), testDescription, testCommissionMsg, sdk.OneInt(),
|
2018-08-30 21:06:44 -07:00
|
|
|
)
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, val3CreateMsg)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delTokens := sdk.TokensFromTendermintPower(10)
|
|
|
|
delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg)
|
2018-08-30 21:06:44 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg2)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-10-03 09:37:06 -07:00
|
|
|
|
2018-06-21 17:19:14 -07:00
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionNo)
|
2018-06-29 18:10:15 -07:00
|
|
|
require.Nil(t, err)
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-06-21 17:19:14 -07:00
|
|
|
|
2018-06-29 18:10:15 -07:00
|
|
|
require.False(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-06-21 17:19:14 -07:00
|
|
|
}
|
2018-07-24 12:00:56 -07:00
|
|
|
|
2018-08-22 08:56:13 -07:00
|
|
|
func TestTallyJailedValidator(t *testing.T) {
|
2019-01-07 14:24:04 -08:00
|
|
|
mapp, keeper, sk, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
2018-07-24 12:00:56 -07:00
|
|
|
mapp.BeginBlock(abci.RequestBeginBlock{})
|
|
|
|
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler := staking.NewHandler(sk)
|
2018-07-24 12:00:56 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
valAddrs := make([]sdk.ValAddress, len(addrs[:3]))
|
|
|
|
for i, addr := range addrs[:3] {
|
|
|
|
valAddrs[i] = sdk.ValAddress(addr)
|
|
|
|
}
|
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
createValidators(t, stakingHandler, ctx, valAddrs, []int64{25, 6, 7})
|
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-08-30 21:06:44 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delTokens := sdk.TokensFromTendermintPower(10)
|
|
|
|
delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg)
|
2018-08-30 21:06:44 -07:00
|
|
|
|
2019-02-13 15:01:50 -08:00
|
|
|
delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens))
|
2019-01-11 12:08:01 -08:00
|
|
|
stakingHandler(ctx, delegator1Msg2)
|
2018-07-24 12:00:56 -07:00
|
|
|
|
2018-08-30 21:06:44 -07:00
|
|
|
val2, found := sk.GetValidator(ctx, sdk.ValAddress(addrs[1]))
|
2018-07-24 12:00:56 -07:00
|
|
|
require.True(t, found)
|
2018-09-24 21:09:31 -07:00
|
|
|
sk.Jail(ctx, sdk.ConsAddress(val2.ConsPubKey.Address()))
|
2018-07-24 12:00:56 -07:00
|
|
|
|
2019-01-11 12:08:01 -08:00
|
|
|
staking.EndBlocker(ctx, sk)
|
2018-10-03 09:37:06 -07:00
|
|
|
|
2018-07-24 12:00:56 -07:00
|
|
|
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
|
|
|
proposalID := proposal.GetProposalID()
|
|
|
|
proposal.SetStatus(StatusVotingPeriod)
|
|
|
|
keeper.SetProposal(ctx, proposal)
|
|
|
|
|
|
|
|
err := keeper.AddVote(ctx, proposalID, addrs[0], OptionYes)
|
|
|
|
require.Nil(t, err)
|
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[1], OptionNo)
|
|
|
|
require.Nil(t, err)
|
|
|
|
err = keeper.AddVote(ctx, proposalID, addrs[2], OptionNo)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2018-09-25 11:45:20 -07:00
|
|
|
passes, tallyResults := tally(ctx, keeper, keeper.GetProposal(ctx, proposalID))
|
2018-07-24 12:00:56 -07:00
|
|
|
|
|
|
|
require.True(t, passes)
|
2018-08-08 03:28:52 -07:00
|
|
|
require.False(t, tallyResults.Equals(EmptyTallyResult()))
|
2018-07-24 12:00:56 -07:00
|
|
|
}
|