bring back old keeper_test
This commit is contained in:
parent
ee9fe541f4
commit
0ad2cc0dc7
|
@ -23,128 +23,128 @@ var (
|
|||
}
|
||||
)
|
||||
|
||||
// This function tests GetValidator, GetValidators, setValidator, removeValidator
|
||||
func TestValidator(t *testing.T) {
|
||||
// This function tests GetCandidate, GetCandidates, setCandidate, removeCandidate
|
||||
func TestCandidate(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
||||
//construct the validators
|
||||
var validators [3]Validator
|
||||
//construct the candidates
|
||||
var candidates [3]Candidate
|
||||
amts := []int64{9, 8, 7}
|
||||
for i, amt := range amts {
|
||||
validators[i] = NewValidator(addrVals[i], pks[i], Description{})
|
||||
validators[i].BondedShares = sdk.NewRat(amt)
|
||||
validators[i].DelegatorShares = sdk.NewRat(amt)
|
||||
candidates[i] = NewCandidate(addrVals[i], pks[i], Description{})
|
||||
candidates[i].BondedShares = sdk.NewRat(amt)
|
||||
candidates[i].DelegatorShares = sdk.NewRat(amt)
|
||||
}
|
||||
|
||||
// check the empty keeper first
|
||||
_, found := keeper.GetValidator(ctx, addrVals[0])
|
||||
_, found := keeper.GetCandidate(ctx, addrVals[0])
|
||||
assert.False(t, found)
|
||||
resCands := keeper.GetValidators(ctx, 100)
|
||||
resCands := keeper.GetCandidates(ctx, 100)
|
||||
assert.Zero(t, len(resCands))
|
||||
|
||||
// set and retrieve a record
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
resCand, found := keeper.GetValidator(ctx, addrVals[0])
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
resCand, found := keeper.GetCandidate(ctx, addrVals[0])
|
||||
require.True(t, found)
|
||||
assert.True(t, validators[0].equal(resCand), "%v \n %v", resCand, validators[0])
|
||||
assert.True(t, candidates[0].equal(resCand), "%v \n %v", resCand, candidates[0])
|
||||
|
||||
// modify a records, save, and retrieve
|
||||
validators[0].DelegatorShares = sdk.NewRat(99)
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
resCand, found = keeper.GetValidator(ctx, addrVals[0])
|
||||
candidates[0].DelegatorShares = sdk.NewRat(99)
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
resCand, found = keeper.GetCandidate(ctx, addrVals[0])
|
||||
require.True(t, found)
|
||||
assert.True(t, validators[0].equal(resCand))
|
||||
assert.True(t, candidates[0].equal(resCand))
|
||||
|
||||
// also test that the address has been added to address list
|
||||
resCands = keeper.GetValidators(ctx, 100)
|
||||
resCands = keeper.GetCandidates(ctx, 100)
|
||||
require.Equal(t, 1, len(resCands))
|
||||
assert.Equal(t, addrVals[0], resCands[0].Address)
|
||||
|
||||
// add other validators
|
||||
keeper.setValidator(ctx, validators[1])
|
||||
keeper.setValidator(ctx, validators[2])
|
||||
resCand, found = keeper.GetValidator(ctx, addrVals[1])
|
||||
// add other candidates
|
||||
keeper.setCandidate(ctx, candidates[1])
|
||||
keeper.setCandidate(ctx, candidates[2])
|
||||
resCand, found = keeper.GetCandidate(ctx, addrVals[1])
|
||||
require.True(t, found)
|
||||
assert.True(t, validators[1].equal(resCand), "%v \n %v", resCand, validators[1])
|
||||
resCand, found = keeper.GetValidator(ctx, addrVals[2])
|
||||
assert.True(t, candidates[1].equal(resCand), "%v \n %v", resCand, candidates[1])
|
||||
resCand, found = keeper.GetCandidate(ctx, addrVals[2])
|
||||
require.True(t, found)
|
||||
assert.True(t, validators[2].equal(resCand), "%v \n %v", resCand, validators[2])
|
||||
resCands = keeper.GetValidators(ctx, 100)
|
||||
assert.True(t, candidates[2].equal(resCand), "%v \n %v", resCand, candidates[2])
|
||||
resCands = keeper.GetCandidates(ctx, 100)
|
||||
require.Equal(t, 3, len(resCands))
|
||||
assert.True(t, validators[0].equal(resCands[0]), "%v \n %v", resCands[0], validators[0])
|
||||
assert.True(t, validators[1].equal(resCands[1]), "%v \n %v", resCands[1], validators[1])
|
||||
assert.True(t, validators[2].equal(resCands[2]), "%v \n %v", resCands[2], validators[2])
|
||||
assert.True(t, candidates[0].equal(resCands[0]), "%v \n %v", resCands[0], candidates[0])
|
||||
assert.True(t, candidates[1].equal(resCands[1]), "%v \n %v", resCands[1], candidates[1])
|
||||
assert.True(t, candidates[2].equal(resCands[2]), "%v \n %v", resCands[2], candidates[2])
|
||||
|
||||
// remove a record
|
||||
keeper.removeValidator(ctx, validators[1].Address)
|
||||
_, found = keeper.GetValidator(ctx, addrVals[1])
|
||||
keeper.removeCandidate(ctx, candidates[1].Address)
|
||||
_, found = keeper.GetCandidate(ctx, addrVals[1])
|
||||
assert.False(t, found)
|
||||
}
|
||||
|
||||
// tests GetDelegation, GetDelegations, SetDelegation, removeDelegation, GetBonds
|
||||
// tests GetDelegatorBond, GetDelegatorBonds, SetDelegatorBond, removeDelegatorBond, GetBonds
|
||||
func TestBond(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
||||
//construct the validators
|
||||
//construct the candidates
|
||||
amts := []int64{9, 8, 7}
|
||||
var validators [3]Validator
|
||||
var candidates [3]Candidate
|
||||
for i, amt := range amts {
|
||||
validators[i] = NewValidator(addrVals[i], pks[i], Description{})
|
||||
validators[i].BondedShares = sdk.NewRat(amt)
|
||||
validators[i].DelegatorShares = sdk.NewRat(amt)
|
||||
candidates[i] = NewCandidate(addrVals[i], pks[i], Description{})
|
||||
candidates[i].BondedShares = sdk.NewRat(amt)
|
||||
candidates[i].DelegatorShares = sdk.NewRat(amt)
|
||||
}
|
||||
|
||||
// first add a validators[0] to delegate too
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
// first add a candidates[0] to delegate too
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
|
||||
bond1to1 := Delegation{
|
||||
bond1to1 := DelegatorBond{
|
||||
DelegatorAddr: addrDels[0],
|
||||
ValidatorAddr: addrVals[0],
|
||||
CandidateAddr: addrVals[0],
|
||||
Shares: sdk.NewRat(9),
|
||||
}
|
||||
|
||||
// check the empty keeper first
|
||||
_, found := keeper.GetDelegation(ctx, addrDels[0], addrVals[0])
|
||||
_, found := keeper.GetDelegatorBond(ctx, addrDels[0], addrVals[0])
|
||||
assert.False(t, found)
|
||||
|
||||
// set and retrieve a record
|
||||
keeper.setDelegation(ctx, bond1to1)
|
||||
resBond, found := keeper.GetDelegation(ctx, addrDels[0], addrVals[0])
|
||||
keeper.setDelegatorBond(ctx, bond1to1)
|
||||
resBond, found := keeper.GetDelegatorBond(ctx, addrDels[0], addrVals[0])
|
||||
assert.True(t, found)
|
||||
assert.True(t, bond1to1.equal(resBond))
|
||||
|
||||
// modify a records, save, and retrieve
|
||||
bond1to1.Shares = sdk.NewRat(99)
|
||||
keeper.setDelegation(ctx, bond1to1)
|
||||
resBond, found = keeper.GetDelegation(ctx, addrDels[0], addrVals[0])
|
||||
keeper.setDelegatorBond(ctx, bond1to1)
|
||||
resBond, found = keeper.GetDelegatorBond(ctx, addrDels[0], addrVals[0])
|
||||
assert.True(t, found)
|
||||
assert.True(t, bond1to1.equal(resBond))
|
||||
|
||||
// add some more records
|
||||
keeper.setValidator(ctx, validators[1])
|
||||
keeper.setValidator(ctx, validators[2])
|
||||
bond1to2 := Delegation{addrDels[0], addrVals[1], sdk.NewRat(9), 0}
|
||||
bond1to3 := Delegation{addrDels[0], addrVals[2], sdk.NewRat(9), 1}
|
||||
bond2to1 := Delegation{addrDels[1], addrVals[0], sdk.NewRat(9), 2}
|
||||
bond2to2 := Delegation{addrDels[1], addrVals[1], sdk.NewRat(9), 3}
|
||||
bond2to3 := Delegation{addrDels[1], addrVals[2], sdk.NewRat(9), 4}
|
||||
keeper.setDelegation(ctx, bond1to2)
|
||||
keeper.setDelegation(ctx, bond1to3)
|
||||
keeper.setDelegation(ctx, bond2to1)
|
||||
keeper.setDelegation(ctx, bond2to2)
|
||||
keeper.setDelegation(ctx, bond2to3)
|
||||
keeper.setCandidate(ctx, candidates[1])
|
||||
keeper.setCandidate(ctx, candidates[2])
|
||||
bond1to2 := DelegatorBond{addrDels[0], addrVals[1], sdk.NewRat(9), 0}
|
||||
bond1to3 := DelegatorBond{addrDels[0], addrVals[2], sdk.NewRat(9), 1}
|
||||
bond2to1 := DelegatorBond{addrDels[1], addrVals[0], sdk.NewRat(9), 2}
|
||||
bond2to2 := DelegatorBond{addrDels[1], addrVals[1], sdk.NewRat(9), 3}
|
||||
bond2to3 := DelegatorBond{addrDels[1], addrVals[2], sdk.NewRat(9), 4}
|
||||
keeper.setDelegatorBond(ctx, bond1to2)
|
||||
keeper.setDelegatorBond(ctx, bond1to3)
|
||||
keeper.setDelegatorBond(ctx, bond2to1)
|
||||
keeper.setDelegatorBond(ctx, bond2to2)
|
||||
keeper.setDelegatorBond(ctx, bond2to3)
|
||||
|
||||
// test all bond retrieve capabilities
|
||||
resBonds := keeper.GetDelegations(ctx, addrDels[0], 5)
|
||||
resBonds := keeper.GetDelegatorBonds(ctx, addrDels[0], 5)
|
||||
require.Equal(t, 3, len(resBonds))
|
||||
assert.True(t, bond1to1.equal(resBonds[0]))
|
||||
assert.True(t, bond1to2.equal(resBonds[1]))
|
||||
assert.True(t, bond1to3.equal(resBonds[2]))
|
||||
resBonds = keeper.GetDelegations(ctx, addrDels[0], 3)
|
||||
resBonds = keeper.GetDelegatorBonds(ctx, addrDels[0], 3)
|
||||
require.Equal(t, 3, len(resBonds))
|
||||
resBonds = keeper.GetDelegations(ctx, addrDels[0], 2)
|
||||
resBonds = keeper.GetDelegatorBonds(ctx, addrDels[0], 2)
|
||||
require.Equal(t, 2, len(resBonds))
|
||||
resBonds = keeper.GetDelegations(ctx, addrDels[1], 5)
|
||||
resBonds = keeper.GetDelegatorBonds(ctx, addrDels[1], 5)
|
||||
require.Equal(t, 3, len(resBonds))
|
||||
assert.True(t, bond2to1.equal(resBonds[0]))
|
||||
assert.True(t, bond2to2.equal(resBonds[1]))
|
||||
|
@ -159,76 +159,76 @@ func TestBond(t *testing.T) {
|
|||
assert.True(t, bond2to3.equal(allBonds[5]))
|
||||
|
||||
// delete a record
|
||||
keeper.removeDelegation(ctx, bond2to3)
|
||||
_, found = keeper.GetDelegation(ctx, addrDels[1], addrVals[2])
|
||||
keeper.removeDelegatorBond(ctx, bond2to3)
|
||||
_, found = keeper.GetDelegatorBond(ctx, addrDels[1], addrVals[2])
|
||||
assert.False(t, found)
|
||||
resBonds = keeper.GetDelegations(ctx, addrDels[1], 5)
|
||||
resBonds = keeper.GetDelegatorBonds(ctx, addrDels[1], 5)
|
||||
require.Equal(t, 2, len(resBonds))
|
||||
assert.True(t, bond2to1.equal(resBonds[0]))
|
||||
assert.True(t, bond2to2.equal(resBonds[1]))
|
||||
|
||||
// delete all the records from delegator 2
|
||||
keeper.removeDelegation(ctx, bond2to1)
|
||||
keeper.removeDelegation(ctx, bond2to2)
|
||||
_, found = keeper.GetDelegation(ctx, addrDels[1], addrVals[0])
|
||||
keeper.removeDelegatorBond(ctx, bond2to1)
|
||||
keeper.removeDelegatorBond(ctx, bond2to2)
|
||||
_, found = keeper.GetDelegatorBond(ctx, addrDels[1], addrVals[0])
|
||||
assert.False(t, found)
|
||||
_, found = keeper.GetDelegation(ctx, addrDels[1], addrVals[1])
|
||||
_, found = keeper.GetDelegatorBond(ctx, addrDels[1], addrVals[1])
|
||||
assert.False(t, found)
|
||||
resBonds = keeper.GetDelegations(ctx, addrDels[1], 5)
|
||||
resBonds = keeper.GetDelegatorBonds(ctx, addrDels[1], 5)
|
||||
require.Equal(t, 0, len(resBonds))
|
||||
}
|
||||
|
||||
// TODO seperate out into multiple tests
|
||||
func TestGetValidatorsBonded(t *testing.T) {
|
||||
func TestGetValidators(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
||||
// initialize some validators into the state
|
||||
// initialize some candidates into the state
|
||||
amts := []int64{0, 100, 1, 400, 200}
|
||||
n := len(amts)
|
||||
var validators [5]Validator
|
||||
var candidates [5]Candidate
|
||||
for i, amt := range amts {
|
||||
validators[i] = NewValidator(addrs[i], pks[i], Description{})
|
||||
validators[i].BondedShares = sdk.NewRat(amt)
|
||||
validators[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setValidator(ctx, validators[i])
|
||||
candidates[i] = NewCandidate(addrs[i], pks[i], Description{})
|
||||
candidates[i].BondedShares = sdk.NewRat(amt)
|
||||
candidates[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setCandidate(ctx, candidates[i])
|
||||
}
|
||||
|
||||
// first make sure everything made it in to the validator group
|
||||
validators := keeper.GetValidatorsBondedByPower(ctx)
|
||||
validators := keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, sdk.NewRat(400), validators[0].Power, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(200), validators[1].Power, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(100), validators[2].Power, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(1), validators[3].Power, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(0), validators[4].Power, "%v", validators)
|
||||
assert.Equal(t, validators[3].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, validators[4].Address, validators[1].Address, "%v", validators)
|
||||
assert.Equal(t, validators[1].Address, validators[2].Address, "%v", validators)
|
||||
assert.Equal(t, validators[2].Address, validators[3].Address, "%v", validators)
|
||||
assert.Equal(t, validators[0].Address, validators[4].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[3].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[4].Address, validators[1].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[1].Address, validators[2].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[2].Address, validators[3].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[0].Address, validators[4].Address, "%v", validators)
|
||||
|
||||
// test a basic increase in voting power
|
||||
validators[3].BondedShares = sdk.NewRat(500)
|
||||
keeper.setValidator(ctx, validators[3])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
candidates[3].BondedShares = sdk.NewRat(500)
|
||||
keeper.setCandidate(ctx, candidates[3])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, sdk.NewRat(500), validators[0].Power, "%v", validators)
|
||||
assert.Equal(t, validators[3].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[3].Address, validators[0].Address, "%v", validators)
|
||||
|
||||
// test a decrease in voting power
|
||||
validators[3].BondedShares = sdk.NewRat(300)
|
||||
keeper.setValidator(ctx, validators[3])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
candidates[3].BondedShares = sdk.NewRat(300)
|
||||
keeper.setCandidate(ctx, candidates[3])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, sdk.NewRat(300), validators[0].Power, "%v", validators)
|
||||
assert.Equal(t, candidates[3].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[4].Address, validators[1].Address, "%v", validators)
|
||||
|
||||
// test equal voting power, different age
|
||||
validators[3].BondedShares = sdk.NewRat(200)
|
||||
candidates[3].BondedShares = sdk.NewRat(200)
|
||||
ctx = ctx.WithBlockHeight(10)
|
||||
keeper.setValidator(ctx, validators[3])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
keeper.setCandidate(ctx, candidates[3])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, sdk.NewRat(200), validators[0].Power, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(200), validators[1].Power, "%v", validators)
|
||||
|
@ -239,8 +239,8 @@ func TestGetValidatorsBonded(t *testing.T) {
|
|||
|
||||
// no change in voting power - no change in sort
|
||||
ctx = ctx.WithBlockHeight(20)
|
||||
keeper.setValidator(ctx, validators[4])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
keeper.setCandidate(ctx, candidates[4])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, candidates[3].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[4].Address, validators[1].Address, "%v", validators)
|
||||
|
@ -252,8 +252,8 @@ func TestGetValidatorsBonded(t *testing.T) {
|
|||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
ctx = ctx.WithBlockHeight(30)
|
||||
keeper.setValidator(ctx, validators[4])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
keeper.setCandidate(ctx, candidates[4])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n, "%v", validators)
|
||||
assert.Equal(t, candidates[3].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[4].Address, validators[1].Address, "%v", validators)
|
||||
|
@ -271,17 +271,17 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
|||
// initialize some candidates into the state
|
||||
amts := []int64{0, 100, 400, 400, 200}
|
||||
n := len(amts)
|
||||
var validators [5]Validator
|
||||
var candidates [5]Candidate
|
||||
for i, amt := range amts {
|
||||
validators[i] = NewValidator(addrs[i], pks[i], Description{})
|
||||
validators[i].BondedShares = sdk.NewRat(amt)
|
||||
validators[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setValidator(ctx, validators[i])
|
||||
candidates[i] = NewCandidate(addrs[i], pks[i], Description{})
|
||||
candidates[i].BondedShares = sdk.NewRat(amt)
|
||||
candidates[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setCandidate(ctx, candidates[i])
|
||||
}
|
||||
|
||||
validators[0].BondedShares = sdk.NewRat(500)
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
validators := keeper.GetValidatorsBondedByPower(ctx)
|
||||
candidates[0].BondedShares = sdk.NewRat(500)
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
validators := keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, uint16(len(validators)), params.MaxValidators)
|
||||
require.Equal(t, candidates[0].Address, validators[0].Address, "%v", validators)
|
||||
// candidate 3 was set before candidate 4
|
||||
|
@ -314,7 +314,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
|||
require.Equal(t, candidates[2].Address, validators[1].Address, "%v", validators)
|
||||
candidate, exists := keeper.GetCandidate(ctx, candidates[3].Address)
|
||||
require.Equal(t, exists, true)
|
||||
require.Equal(t, validator.BondHeight, int64(40))
|
||||
require.Equal(t, candidate.ValidatorBondHeight, int64(40))
|
||||
|
||||
// If two candidates both increase to the same voting power in the same block,
|
||||
// the one with the first transaction should take precedence (become a validator).
|
||||
|
@ -327,299 +327,339 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
|||
keeper.setCandidate(ctx, candidates[2])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, uint16(len(validators)), params.MaxValidators)
|
||||
require.Equal(t, validators[0].Address, validators[0].Address, "%v", validators)
|
||||
require.Equal(t, validators[1].Address, validators[1].Address, "%v", validators)
|
||||
validators[1].BondedShares = sdk.NewRat(1100)
|
||||
validators[2].BondedShares = sdk.NewRat(1100)
|
||||
keeper.setValidator(ctx, validators[2])
|
||||
keeper.setValidator(ctx, validators[1])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
require.Equal(t, candidates[0].Address, validators[0].Address, "%v", validators)
|
||||
require.Equal(t, candidates[1].Address, validators[1].Address, "%v", validators)
|
||||
candidates[1].BondedShares = sdk.NewRat(1100)
|
||||
candidates[2].BondedShares = sdk.NewRat(1100)
|
||||
keeper.setCandidate(ctx, candidates[2])
|
||||
keeper.setCandidate(ctx, candidates[1])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, uint16(len(validators)), params.MaxValidators)
|
||||
require.Equal(t, validators[0].Address, validators[0].Address, "%v", validators)
|
||||
require.Equal(t, validators[2].Address, validators[1].Address, "%v", validators)
|
||||
require.Equal(t, candidates[0].Address, validators[0].Address, "%v", validators)
|
||||
require.Equal(t, candidates[2].Address, validators[1].Address, "%v", validators)
|
||||
|
||||
// reset assets / heights
|
||||
params.MaxValidators = 100
|
||||
keeper.setParams(ctx, params)
|
||||
validators[0].BondedShares = sdk.NewRat(0)
|
||||
validators[1].BondedShares = sdk.NewRat(100)
|
||||
validators[2].BondedShares = sdk.NewRat(1)
|
||||
validators[3].BondedShares = sdk.NewRat(300)
|
||||
validators[4].BondedShares = sdk.NewRat(200)
|
||||
candidates[0].BondedShares = sdk.NewRat(0)
|
||||
candidates[1].BondedShares = sdk.NewRat(100)
|
||||
candidates[2].BondedShares = sdk.NewRat(1)
|
||||
candidates[3].BondedShares = sdk.NewRat(300)
|
||||
candidates[4].BondedShares = sdk.NewRat(200)
|
||||
ctx = ctx.WithBlockHeight(0)
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
keeper.setValidator(ctx, validators[1])
|
||||
keeper.setValidator(ctx, validators[2])
|
||||
keeper.setValidator(ctx, validators[3])
|
||||
keeper.setValidator(ctx, validators[4])
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
keeper.setCandidate(ctx, candidates[1])
|
||||
keeper.setCandidate(ctx, candidates[2])
|
||||
keeper.setCandidate(ctx, candidates[3])
|
||||
keeper.setCandidate(ctx, candidates[4])
|
||||
|
||||
// test a swap in voting power
|
||||
validators[0].BondedShares = sdk.NewRat(600)
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
candidates[0].BondedShares = sdk.NewRat(600)
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, sdk.NewRat(600), validators[0].Power, "%v", validators)
|
||||
assert.Equal(t, validators[0].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[0].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(300), validators[1].Power, "%v", validators)
|
||||
assert.Equal(t, validators[3].Address, validators[1].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[3].Address, validators[1].Address, "%v", validators)
|
||||
|
||||
// test the max validators term
|
||||
params = keeper.GetParams(ctx)
|
||||
n = 2
|
||||
params.MaxValidators = uint16(n)
|
||||
keeper.setParams(ctx, params)
|
||||
validators = keeper.GetValidatorsBondedByPower(ctx)
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, len(validators), n)
|
||||
assert.Equal(t, sdk.NewRat(600), validators[0].Power, "%v", validators)
|
||||
assert.Equal(t, validators[0].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[0].Address, validators[0].Address, "%v", validators)
|
||||
assert.Equal(t, sdk.NewRat(300), validators[1].Power, "%v", validators)
|
||||
assert.Equal(t, validators[3].Address, validators[1].Address, "%v", validators)
|
||||
assert.Equal(t, candidates[3].Address, validators[1].Address, "%v", validators)
|
||||
}
|
||||
|
||||
// clear the tracked changes to the validator set
|
||||
func TestClearValidatorsTendermintUpdates(t *testing.T) {
|
||||
func TestClearAccUpdateValidators(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
||||
amts := []int64{100, 400, 200}
|
||||
validators := make([]Validator, len(amts))
|
||||
candidates := make([]Candidate, len(amts))
|
||||
for i, amt := range amts {
|
||||
validators[i] = NewValidator(addrs[i], pks[i], Description{})
|
||||
validators[i].BondedShares = sdk.NewRat(amt)
|
||||
validators[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setValidator(ctx, validators[i])
|
||||
candidates[i] = NewCandidate(addrs[i], pks[i], Description{})
|
||||
candidates[i].BondedShares = sdk.NewRat(amt)
|
||||
candidates[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setCandidate(ctx, candidates[i])
|
||||
}
|
||||
|
||||
acc := keeper.getValidatorsTendermintUpdates(ctx)
|
||||
acc := keeper.getAccUpdateValidators(ctx)
|
||||
assert.Equal(t, len(amts), len(acc))
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 0, len(acc))
|
||||
}
|
||||
|
||||
// test the mechanism which keeps track of a validator set change
|
||||
func TestGetValidatorsTendermintUpdates(t *testing.T) {
|
||||
func TestGetAccUpdateValidators(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
params := defaultParams()
|
||||
params.MaxValidators = 4
|
||||
keeper.setParams(ctx, params)
|
||||
|
||||
// TODO eliminate use of validatorsIn here
|
||||
// TODO eliminate use of candidatesIn here
|
||||
// tests could be clearer if they just
|
||||
// created the validator at time of use
|
||||
// created the candidate at time of use
|
||||
// and were labelled by power in the comments
|
||||
// outlining in each test
|
||||
amts := []int64{10, 11, 12, 13, 1}
|
||||
var validatorsIn [5]Validator
|
||||
var candidatesIn [5]Candidate
|
||||
for i, amt := range amts {
|
||||
validatorsIn[i] = NewValidator(addrs[i], pks[i], Description{})
|
||||
validatorsIn[i].BondedShares = sdk.NewRat(amt)
|
||||
validatorsIn[i].DelegatorShares = sdk.NewRat(amt)
|
||||
candidatesIn[i] = NewCandidate(addrs[i], pks[i], Description{})
|
||||
candidatesIn[i].BondedShares = sdk.NewRat(amt)
|
||||
candidatesIn[i].DelegatorShares = sdk.NewRat(amt)
|
||||
}
|
||||
|
||||
// test from nothing to something
|
||||
// validator set: {} -> {c1, c3}
|
||||
// candidate set: {} -> {c1, c3}
|
||||
// validator set: {} -> {c1, c3}
|
||||
// accUpdate set: {} -> {c1, c3}
|
||||
assert.Equal(t, 0, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.GetValidatorsBonded(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.GetValidators(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
keeper.setValidator(ctx, validatorsIn[1])
|
||||
keeper.setValidator(ctx, validatorsIn[3])
|
||||
keeper.setCandidate(ctx, candidatesIn[1])
|
||||
keeper.setCandidate(ctx, candidatesIn[3])
|
||||
|
||||
vals := keeper.GetValidatorsBondedByPower(ctx) // to init recent validator set
|
||||
vals := keeper.getValidatorsOrdered(ctx) // to init recent validator set
|
||||
require.Equal(t, 2, len(vals))
|
||||
acc := keeper.getValidatorsTendermintUpdates(ctx)
|
||||
acc := keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 2, len(acc))
|
||||
validators := keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 2, len(validators))
|
||||
assert.Equal(t, validators[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
assert.Equal(t, validators[1].validator().abciValidator(keeper.cdc), acc[1])
|
||||
assert.True(t, validators[0].validator().equal(vals[1]))
|
||||
assert.True(t, validators[1].validator().equal(vals[0]))
|
||||
candidates := keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 2, len(candidates))
|
||||
assert.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
assert.Equal(t, candidates[1].validator().abciValidator(keeper.cdc), acc[1])
|
||||
assert.True(t, candidates[0].validator().equal(vals[1]))
|
||||
assert.True(t, candidates[1].validator().equal(vals[0]))
|
||||
|
||||
// test identical,
|
||||
// validator set: {c1, c3} -> {c1, c3}
|
||||
// candidate set: {c1, c3} -> {c1, c3}
|
||||
// accUpdate set: {} -> {}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
keeper.setValidator(ctx, validators[1])
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
keeper.setCandidate(ctx, candidates[1])
|
||||
|
||||
require.Equal(t, 2, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
require.Equal(t, 2, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
// test single value change
|
||||
// validator set: {c1, c3} -> {c1', c3}
|
||||
// candidate set: {c1, c3} -> {c1', c3}
|
||||
// accUpdate set: {} -> {c1'}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
validators[0].BondedShares = sdk.NewRat(600)
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
candidates[0].BondedShares = sdk.NewRat(600)
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
|
||||
validators = keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 2, len(validators))
|
||||
assert.True(t, validators[0].BondedShares.Equal(sdk.NewRat(600)))
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
candidates = keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 2, len(candidates))
|
||||
assert.True(t, candidates[0].BondedShares.Equal(sdk.NewRat(600)))
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 1, len(acc))
|
||||
assert.Equal(t, validators[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
assert.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
|
||||
// test multiple value change
|
||||
// validator set: {c1, c3} -> {c1', c3'}
|
||||
// candidate set: {c1, c3} -> {c1', c3'}
|
||||
// accUpdate set: {c1, c3} -> {c1', c3'}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
validators[0].BondedShares = sdk.NewRat(200)
|
||||
validators[1].BondedShares = sdk.NewRat(100)
|
||||
keeper.setValidator(ctx, validators[0])
|
||||
keeper.setValidator(ctx, validators[1])
|
||||
candidates[0].BondedShares = sdk.NewRat(200)
|
||||
candidates[1].BondedShares = sdk.NewRat(100)
|
||||
keeper.setCandidate(ctx, candidates[0])
|
||||
keeper.setCandidate(ctx, candidates[1])
|
||||
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 2, len(acc))
|
||||
validators = keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 2, len(validators))
|
||||
require.Equal(t, validators[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
require.Equal(t, validators[1].validator().abciValidator(keeper.cdc), acc[1])
|
||||
candidates = keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 2, len(candidates))
|
||||
require.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
require.Equal(t, candidates[1].validator().abciValidator(keeper.cdc), acc[1])
|
||||
|
||||
// test validtor added at the beginning
|
||||
// validator set: {c1, c3} -> {c0, c1, c3}
|
||||
// candidate set: {c1, c3} -> {c0, c1, c3}
|
||||
// accUpdate set: {} -> {c0}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 2, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
keeper.setValidator(ctx, validatorsIn[0])
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
keeper.setCandidate(ctx, candidatesIn[0])
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 1, len(acc))
|
||||
validators = keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 3, len(validators))
|
||||
assert.Equal(t, validators[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
candidates = keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 3, len(candidates))
|
||||
assert.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
|
||||
|
||||
// test validator added at the middle
|
||||
// validator set: {c0, c1, c3} -> {c0, c1, c2, c3}
|
||||
// candidate set: {c0, c1, c3} -> {c0, c1, c2, c3]
|
||||
// accUpdate set: {} -> {c2}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 3, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 3, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
keeper.setValidator(ctx, validatorsIn[2])
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
keeper.setCandidate(ctx, candidatesIn[2])
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 1, len(acc))
|
||||
validators = keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 4, len(validators))
|
||||
assert.Equal(t, validators[2].validator().abciValidator(keeper.cdc), acc[0])
|
||||
candidates = keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 4, len(candidates))
|
||||
assert.Equal(t, candidates[2].validator().abciValidator(keeper.cdc), acc[0])
|
||||
|
||||
// test validator added at the end but not inserted in the valset
|
||||
// validator set: {c0, c1, c2, c3} -> {c0, c1, c2, c3, c4}
|
||||
// test candidate added at the end but not inserted in the valset
|
||||
// candidate set: {c0, c1, c2, c3} -> {c0, c1, c2, c3, c4}
|
||||
// validator set: {c0, c1, c2, c3} -> {c0, c1, c2, c3}
|
||||
// accUpdate set: {} -> {}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidatorsBonded(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 4, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
keeper.setValidator(ctx, validatorsIn[4])
|
||||
keeper.setCandidate(ctx, candidatesIn[4])
|
||||
|
||||
assert.Equal(t, 5, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidatorsBonded(ctx)))
|
||||
require.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx))) // max validator number is 4
|
||||
assert.Equal(t, 5, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx)))
|
||||
require.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx))) // max validator number is 4
|
||||
|
||||
// test validator change its power but still not in the valset
|
||||
// validator set: {c0, c1, c2, c3, c4} -> {c0, c1, c2, c3, c4}
|
||||
// test candidate change its power but still not in the valset
|
||||
// candidate set: {c0, c1, c2, c3, c4} -> {c0, c1, c2, c3, c4}
|
||||
// validator set: {c0, c1, c2, c3} -> {c0, c1, c2, c3}
|
||||
// accUpdate set: {} -> {}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 5, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidatorsBonded(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 5, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
validatorsIn[4].BondedShares = sdk.NewRat(1)
|
||||
keeper.setValidator(ctx, validatorsIn[4])
|
||||
candidatesIn[4].BondedShares = sdk.NewRat(1)
|
||||
keeper.setCandidate(ctx, candidatesIn[4])
|
||||
|
||||
assert.Equal(t, 5, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidatorsBonded(ctx)))
|
||||
require.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx))) // max validator number is 4
|
||||
assert.Equal(t, 5, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx)))
|
||||
require.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx))) // max validator number is 4
|
||||
|
||||
// test validator change its power and become a validator (pushing out an existing)
|
||||
// validator set: {c0, c1, c2, c3, c4} -> {c0, c1, c2, c3, c4}
|
||||
// test candidate change its power and become a validator (pushing out an existing)
|
||||
// candidate set: {c0, c1, c2, c3, c4} -> {c0, c1, c2, c3, c4}
|
||||
// validator set: {c0, c1, c2, c3} -> {c1, c2, c3, c4}
|
||||
// accUpdate set: {} -> {c0, c4}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 5, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidatorsBonded(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 5, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
validatorsIn[4].BondedShares = sdk.NewRat(1000)
|
||||
keeper.setValidator(ctx, validatorsIn[4])
|
||||
candidatesIn[4].BondedShares = sdk.NewRat(1000)
|
||||
keeper.setCandidate(ctx, candidatesIn[4])
|
||||
|
||||
validators = keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 5, len(validators))
|
||||
vals = keeper.GetValidatorsBondedByPower(ctx)
|
||||
candidates = keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 5, len(candidates))
|
||||
vals = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, 4, len(vals))
|
||||
assert.Equal(t, validatorsIn[1].Address, vals[1].Address)
|
||||
assert.Equal(t, validatorsIn[2].Address, vals[3].Address)
|
||||
assert.Equal(t, validatorsIn[3].Address, vals[2].Address)
|
||||
assert.Equal(t, validatorsIn[4].Address, vals[0].Address)
|
||||
assert.Equal(t, candidatesIn[1].Address, vals[1].Address)
|
||||
assert.Equal(t, candidatesIn[2].Address, vals[3].Address)
|
||||
assert.Equal(t, candidatesIn[3].Address, vals[2].Address)
|
||||
assert.Equal(t, candidatesIn[4].Address, vals[0].Address)
|
||||
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 2, len(acc), "%v", acc)
|
||||
|
||||
assert.Equal(t, validatorsIn[0].PubKey.Bytes(), acc[0].PubKey)
|
||||
assert.Equal(t, candidatesIn[0].PubKey.Bytes(), acc[0].PubKey)
|
||||
assert.Equal(t, int64(0), acc[0].Power)
|
||||
assert.Equal(t, vals[0].abciValidator(keeper.cdc), acc[1])
|
||||
|
||||
// test from something to nothing
|
||||
// validator set: {c0, c1, c2, c3, c4} -> {}
|
||||
// candidate set: {c0, c1, c2, c3, c4} -> {}
|
||||
// validator set: {c1, c2, c3, c4} -> {}
|
||||
// accUpdate set: {} -> {c1, c2, c3, c4}
|
||||
keeper.clearValidatorsTendermintUpdates(ctx)
|
||||
assert.Equal(t, 5, len(keeper.GetValidators(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidatorsBonded(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getValidatorsTendermintUpdates(ctx)))
|
||||
keeper.clearAccUpdateValidators(ctx)
|
||||
assert.Equal(t, 5, len(keeper.GetCandidates(ctx, 5)))
|
||||
assert.Equal(t, 4, len(keeper.GetValidators(ctx)))
|
||||
assert.Equal(t, 0, len(keeper.getAccUpdateValidators(ctx)))
|
||||
|
||||
keeper.removeValidator(ctx, validatorsIn[0].Address)
|
||||
keeper.removeValidator(ctx, validatorsIn[1].Address)
|
||||
keeper.removeValidator(ctx, validatorsIn[2].Address)
|
||||
keeper.removeValidator(ctx, validatorsIn[3].Address)
|
||||
keeper.removeValidator(ctx, validatorsIn[4].Address)
|
||||
keeper.removeCandidate(ctx, candidatesIn[0].Address)
|
||||
keeper.removeCandidate(ctx, candidatesIn[1].Address)
|
||||
keeper.removeCandidate(ctx, candidatesIn[2].Address)
|
||||
keeper.removeCandidate(ctx, candidatesIn[3].Address)
|
||||
keeper.removeCandidate(ctx, candidatesIn[4].Address)
|
||||
|
||||
vals = keeper.GetValidatorsBondedByPower(ctx)
|
||||
vals = keeper.getValidatorsOrdered(ctx)
|
||||
assert.Equal(t, 0, len(vals), "%v", vals)
|
||||
validators = keeper.GetValidators(ctx, 5)
|
||||
require.Equal(t, 0, len(validators))
|
||||
acc = keeper.getValidatorsTendermintUpdates(ctx)
|
||||
candidates = keeper.GetCandidates(ctx, 5)
|
||||
require.Equal(t, 0, len(candidates))
|
||||
acc = keeper.getAccUpdateValidators(ctx)
|
||||
require.Equal(t, 4, len(acc))
|
||||
assert.Equal(t, validatorsIn[1].PubKey.Bytes(), acc[0].PubKey)
|
||||
assert.Equal(t, validatorsIn[2].PubKey.Bytes(), acc[1].PubKey)
|
||||
assert.Equal(t, validatorsIn[3].PubKey.Bytes(), acc[2].PubKey)
|
||||
assert.Equal(t, validatorsIn[4].PubKey.Bytes(), acc[3].PubKey)
|
||||
assert.Equal(t, candidatesIn[1].PubKey.Bytes(), acc[0].PubKey)
|
||||
assert.Equal(t, candidatesIn[2].PubKey.Bytes(), acc[1].PubKey)
|
||||
assert.Equal(t, candidatesIn[3].PubKey.Bytes(), acc[2].PubKey)
|
||||
assert.Equal(t, candidatesIn[4].PubKey.Bytes(), acc[3].PubKey)
|
||||
assert.Equal(t, int64(0), acc[0].Power)
|
||||
assert.Equal(t, int64(0), acc[1].Power)
|
||||
assert.Equal(t, int64(0), acc[2].Power)
|
||||
assert.Equal(t, int64(0), acc[3].Power)
|
||||
}
|
||||
|
||||
// test if is a validator from the last update
|
||||
func TestIsValidator(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
||||
amts := []int64{9, 8, 7, 10, 6}
|
||||
var candidatesIn [5]Candidate
|
||||
for i, amt := range amts {
|
||||
candidatesIn[i] = NewCandidate(addrVals[i], pks[i], Description{})
|
||||
candidatesIn[i].BondedShares = sdk.NewRat(amt)
|
||||
candidatesIn[i].DelegatorShares = sdk.NewRat(amt)
|
||||
}
|
||||
|
||||
// test that an empty validator set doesn't have any validators
|
||||
validators := keeper.getValidatorsOrdered(ctx)
|
||||
assert.Equal(t, 0, len(validators))
|
||||
|
||||
// get the validators for the first time
|
||||
keeper.setCandidate(ctx, candidatesIn[0])
|
||||
keeper.setCandidate(ctx, candidatesIn[1])
|
||||
validators = keeper.getValidatorsOrdered(ctx)
|
||||
require.Equal(t, 2, len(validators))
|
||||
assert.True(t, candidatesIn[0].validator().equal(validators[0]))
|
||||
c1ValWithCounter := candidatesIn[1].validator()
|
||||
c1ValWithCounter.Counter = int16(1)
|
||||
assert.True(t, c1ValWithCounter.equal(validators[1]))
|
||||
|
||||
// test a basic retrieve of something that should be a recent validator
|
||||
assert.True(t, keeper.IsValidator(ctx, candidatesIn[0].PubKey))
|
||||
assert.True(t, keeper.IsValidator(ctx, candidatesIn[1].PubKey))
|
||||
|
||||
// test a basic retrieve of something that should not be a recent validator
|
||||
assert.False(t, keeper.IsValidator(ctx, candidatesIn[2].PubKey))
|
||||
|
||||
// remove that validator, but don't retrieve the recent validator group
|
||||
keeper.removeCandidate(ctx, candidatesIn[0].Address)
|
||||
|
||||
// test that removed validator is not considered a recent validator
|
||||
assert.False(t, keeper.IsValidator(ctx, candidatesIn[0].PubKey))
|
||||
}
|
||||
|
||||
// test if is a validator from the last update
|
||||
func TestGetTotalPrecommitVotingPower(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
||||
amts := []int64{10000, 1000, 100, 10, 1}
|
||||
var validatorsIn [5]Validator
|
||||
var candidatesIn [5]Candidate
|
||||
for i, amt := range amts {
|
||||
validatorsIn[i] = NewValidator(addrVals[i], pks[i], Description{})
|
||||
validatorsIn[i].BondedShares = sdk.NewRat(amt)
|
||||
validatorsIn[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setValidator(ctx, validatorsIn[i])
|
||||
candidatesIn[i] = NewCandidate(addrVals[i], pks[i], Description{})
|
||||
candidatesIn[i].BondedShares = sdk.NewRat(amt)
|
||||
candidatesIn[i].DelegatorShares = sdk.NewRat(amt)
|
||||
keeper.setCandidate(ctx, candidatesIn[i])
|
||||
}
|
||||
|
||||
// test that an empty validator set doesn't have any validators
|
||||
validators := keeper.GetValidatorsBonded(ctx)
|
||||
validators := keeper.GetValidators(ctx)
|
||||
assert.Equal(t, 5, len(validators))
|
||||
|
||||
totPow := keeper.GetTotalPrecommitVotingPower(ctx)
|
||||
|
@ -664,6 +704,7 @@ func TestPool(t *testing.T) {
|
|||
resPool = keeper.GetPool(ctx)
|
||||
assert.True(t, expPool.equal(resPool))
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
func TestValidatorsetKeeper(t *testing.T) {
|
||||
ctx, _, keeper := createTestInput(t, false, 0)
|
||||
|
|
Loading…
Reference in New Issue