diff --git a/x/stake/keeper_test.go b/x/stake/keeper_test.go index 181093d19..77a214df8 100644 --- a/x/stake/keeper_test.go +++ b/x/stake/keeper_test.go @@ -15,160 +15,160 @@ import ( // XXX revive these tests but for the store update proceedure // XXX XXX XXX -//func TestUpdateVotingPower(t *testing.T) { -//assert := assert.New(t) -//store := initTestStore(t) -//params := GetParams(store) -//gs := GetPool(store) +func TestUpdateVotingPower(t *testing.T) { + ctx, _, keeper := createTestInput(t, nil, false, 0) -//N := 5 -//actors := newAddrs(N) -//candidates := candidatesFromActors(actors, []int64{400, 200, 100, 10, 1}) + candidates := candidatesFromAddrs(ctx, keeper, addrs, []int64{400, 200, 100, 10, 1}) -//// test a basic change in voting power -//candidates[0].Assets = sdk.NewRat(500) -//candidates.updateVotingPower(store, p, params) -//assert.Equal(int64(500), candidates[0].VotingPower.Evaluate(), "%v", candidates[0]) + // test a basic change in voting power + candidates[0].Assets = sdk.NewRat(500) + candidates.updateVotingPower(store, p, params) + keeper.updaate + assert.Equal(int64(500), candidates[0].VotingPower.Evaluate(), "%v", candidates[0]) -//// test a swap in voting power -//candidates[1].Assets = sdk.NewRat(600) -//candidates.updateVotingPower(store, p, params) -//assert.Equal(int64(600), candidates[0].VotingPower.Evaluate(), "%v", candidates[0]) -//assert.Equal(int64(500), candidates[1].VotingPower.Evaluate(), "%v", candidates[1]) + // test a swap in voting power + candidates[1].Assets = sdk.NewRat(600) + candidates.updateVotingPower(store, p, params) + assert.Equal(int64(600), candidates[0].VotingPower.Evaluate(), "%v", candidates[0]) + assert.Equal(int64(500), candidates[1].VotingPower.Evaluate(), "%v", candidates[1]) -//// test the max validators term -//params.MaxValidators = 4 -//setParams(store, params) -//candidates.updateVotingPower(store, p, params) -//assert.Equal(int64(0), candidates[4].VotingPower.Evaluate(), "%v", candidates[4]) -//} + // test the max validators term + params.MaxValidators = 4 + setParams(store, params) + candidates.updateVotingPower(store, p, params) + assert.Equal(int64(0), candidates[4].VotingPower.Evaluate(), "%v", candidates[4]) +} -//func TestValidatorsChanged(t *testing.T) { -//require := require.New(t) +func TestValidatorsChanged(t *testing.T) { + require := require.New(t) -//v1 := (&Candidate{PubKey: pks[0], VotingPower: sdk.NewRat(10)}).validator() -//v2 := (&Candidate{PubKey: pks[1], VotingPower: sdk.NewRat(10)}).validator() -//v3 := (&Candidate{PubKey: pks[2], VotingPower: sdk.NewRat(10)}).validator() -//v4 := (&Candidate{PubKey: pks[3], VotingPower: sdk.NewRat(10)}).validator() -//v5 := (&Candidate{PubKey: pks[4], VotingPower: sdk.NewRat(10)}).validator() + v1 := (&Candidate{PubKey: pks[0], VotingPower: sdk.NewRat(10)}).validator() + v2 := (&Candidate{PubKey: pks[1], VotingPower: sdk.NewRat(10)}).validator() + v3 := (&Candidate{PubKey: pks[2], VotingPower: sdk.NewRat(10)}).validator() + v4 := (&Candidate{PubKey: pks[3], VotingPower: sdk.NewRat(10)}).validator() + v5 := (&Candidate{PubKey: pks[4], VotingPower: sdk.NewRat(10)}).validator() -//// test from nothing to something -//vs1 := []Validator{} -//vs2 := []Validator{v1, v2} -//changed := vs1.validatorsUpdated(vs2) -//require.Equal(2, len(changed)) -//testChange(t, vs2[0], changed[0]) -//testChange(t, vs2[1], changed[1]) + // test from nothing to something + vs1 := []Validator{} + vs2 := []Validator{v1, v2} + changed := vs1.validatorsUpdated(vs2) + require.Equal(2, len(changed)) + testChange(t, vs2[0], changed[0]) + testChange(t, vs2[1], changed[1]) -//// test from something to nothing -//vs1 = []Validator{v1, v2} -//vs2 = []Validator{} -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(2, len(changed)) -//testRemove(t, vs1[0], changed[0]) -//testRemove(t, vs1[1], changed[1]) + // test from something to nothing + vs1 = []Validator{v1, v2} + vs2 = []Validator{} + changed = vs1.validatorsUpdated(vs2) + require.Equal(2, len(changed)) + testRemove(t, vs1[0], changed[0]) + testRemove(t, vs1[1], changed[1]) -//// test identical -//vs1 = []Validator{v1, v2, v4} -//vs2 = []Validator{v1, v2, v4} -//changed = vs1.validatorsUpdated(vs2) -//require.ZeroRat(len(changed)) + // test identical + vs1 = []Validator{v1, v2, v4} + vs2 = []Validator{v1, v2, v4} + changed = vs1.validatorsUpdated(vs2) + require.ZeroRat(len(changed)) -//// test single value change -//vs2[2].VotingPower = sdk.OneRat -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(1, len(changed)) -//testChange(t, vs2[2], changed[0]) + // test single value change + vs2[2].VotingPower = sdk.OneRat + changed = vs1.validatorsUpdated(vs2) + require.Equal(1, len(changed)) + testChange(t, vs2[2], changed[0]) -//// test multiple value change -//vs2[0].VotingPower = sdk.NewRat(11) -//vs2[2].VotingPower = sdk.NewRat(5) -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(2, len(changed)) -//testChange(t, vs2[0], changed[0]) -//testChange(t, vs2[2], changed[1]) + // test multiple value change + vs2[0].VotingPower = sdk.NewRat(11) + vs2[2].VotingPower = sdk.NewRat(5) + changed = vs1.validatorsUpdated(vs2) + require.Equal(2, len(changed)) + testChange(t, vs2[0], changed[0]) + testChange(t, vs2[2], changed[1]) -//// test validator added at the beginning -//vs1 = []Validator{v2, v4} -//vs2 = []Validator{v2, v4, v1} -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(1, len(changed)) -//testChange(t, vs2[0], changed[0]) + // test validator added at the beginning + vs1 = []Validator{v2, v4} + vs2 = []Validator{v2, v4, v1} + changed = vs1.validatorsUpdated(vs2) + require.Equal(1, len(changed)) + testChange(t, vs2[0], changed[0]) -//// test validator added in the middle -//vs1 = []Validator{v1, v2, v4} -//vs2 = []Validator{v3, v1, v4, v2} -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(1, len(changed)) -//testChange(t, vs2[2], changed[0]) + // test validator added in the middle + vs1 = []Validator{v1, v2, v4} + vs2 = []Validator{v3, v1, v4, v2} + changed = vs1.validatorsUpdated(vs2) + require.Equal(1, len(changed)) + testChange(t, vs2[2], changed[0]) -//// test validator added at the end -//vs2 = []Validator{v1, v2, v4, v5} -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(1, len(changed)) //testChange(t, vs2[3], changed[0]) //// test multiple validators added //vs2 = []Validator{v1, v2, v3, v4, v5} //changed = vs1.validatorsUpdated(vs2) //require.Equal(2, len(changed)) //testChange(t, vs2[2], changed[0]) //testChange(t, vs2[4], changed[1]) //// test validator removed at the beginning //vs2 = []Validator{v2, v4} //changed = vs1.validatorsUpdated(vs2) //require.Equal(1, len(changed)) //testRemove(t, vs1[0], changed[0]) //// test validator removed in the middle //vs2 = []Validator{v1, v4} //changed = vs1.validatorsUpdated(vs2) //require.Equal(1, len(changed)) //testRemove(t, vs1[1], changed[0]) //// test validator removed at the end -//vs2 = []Validator{v1, v2} -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(1, len(changed)) -//testRemove(t, vs1[2], changed[0]) + // test validator added at the end + vs2 = []Validator{v1, v2, v4, v5} + changed = vs1.validatorsUpdated(vs2) + require.Equal(1, len(changed)) //testChange(t, vs2[3], changed[0]) //// test multiple validators added //vs2 = []Validator{v1, v2, v3, v4, v5} //changed = vs1.validatorsUpdated(vs2) //require.Equal(2, len(changed)) //testChange(t, vs2[2], changed[0]) //testChange(t, vs2[4], changed[1]) //// test validator removed at the beginning //vs2 = []Validator{v2, v4} //changed = vs1.validatorsUpdated(vs2) //require.Equal(1, len(changed)) //testRemove(t, vs1[0], changed[0]) //// test validator removed in the middle //vs2 = []Validator{v1, v4} //changed = vs1.validatorsUpdated(vs2) //require.Equal(1, len(changed)) //testRemove(t, vs1[1], changed[0]) //// test validator removed at the end + vs2 = []Validator{v1, v2} + changed = vs1.validatorsUpdated(vs2) + require.Equal(1, len(changed)) + testRemove(t, vs1[2], changed[0]) -//// test multiple validators removed -//vs2 = []Validator{v1} -//changed = vs1.validatorsUpdated(vs2) -//require.Equal(2, len(changed)) -//testRemove(t, vs1[1], changed[0]) -//testRemove(t, vs1[2], changed[1]) + // test multiple validators removed + vs2 = []Validator{v1} + changed = vs1.validatorsUpdated(vs2) + require.Equal(2, len(changed)) + testRemove(t, vs1[1], changed[0]) + testRemove(t, vs1[2], changed[1]) -//// test many sdk of changes //vs2 = []Validator{v1, v3, v4, v5} //vs2[2].VotingPower = sdk.NewRat(11) //changed = vs1.validatorsUpdated(vs2) //require.Equal(4, len(changed), "%v", changed) // change 1, remove 1, add 2 //testRemove(t, vs1[1], changed[0]) //testChange(t, vs2[1], changed[1]) //testChange(t, vs2[2], changed[2]) //testChange(t, vs2[3], changed[3]) //} //func TestUpdateValidatorSet(t *testing.T) { //assert, require := assert.New(t), require.New(t) //store := initTestStore(t) //params := GetParams(store) //gs := GetPool(store) //N := 5 -//actors := newAddrs(N) -//candidates := candidatesFromActors(actors, []int64{400, 200, 100, 10, 1}) -//for _, c := range candidates { -//setCandidate(store, c) -//} + // test many sdk of changes //vs2 = []Validator{v1, v3, v4, v5} //vs2[2].VotingPower = sdk.NewRat(11) //changed = vs1.validatorsUpdated(vs2) //require.Equal(4, len(changed), "%v", changed) // change 1, remove 1, add 2 //testRemove(t, vs1[1], changed[0]) //testChange(t, vs2[1], changed[1]) //testChange(t, vs2[2], changed[2]) //testChange(t, vs2[3], changed[3]) //} //func TestUpdateValidatorSet(t *testing.T) { //assert, require := assert.New(t), require.New(t) //store := initTestStore(t) //params := GetParams(store) //gs := GetPool(store) //N := 5 + actors := newAddrs(N) + candidates := candidatesFromActors(actors, []int64{400, 200, 100, 10, 1}) + for _, c := range candidates { + setCandidate(store, c) + } -//// they should all already be validators -//change, err := UpdateValidatorSet(store, p, params) -//require.Nil(err) -//require.Equal(0, len(change), "%v", change) // change 1, remove 1, add 2 + // they should all already be validators + change, err := UpdateValidatorSet(store, p, params) + require.Nil(err) + require.Equal(0, len(change), "%v", change) // change 1, remove 1, add 2 -//// test the max value and test again -//params.MaxValidators = 4 -//setParams(store, params) -//change, err = UpdateValidatorSet(store, p, params) -//require.Nil(err) -//require.Equal(1, len(change), "%v", change) -//testRemove(t, candidates[4].validator(), change[0]) -//candidates = GetCandidates(store) -//assert.Equal(int64(0), candidates[4].VotingPower.Evaluate()) + // test the max value and test again + params.MaxValidators = 4 + setParams(store, params) + change, err = UpdateValidatorSet(store, p, params) + require.Nil(err) + require.Equal(1, len(change), "%v", change) + testRemove(t, candidates[4].validator(), change[0]) + candidates = GetCandidates(store) + assert.Equal(int64(0), candidates[4].VotingPower.Evaluate()) -//// mess with the power's of the candidates and test -//candidates[0].Assets = sdk.NewRat(10) -//candidates[1].Assets = sdk.NewRat(600) -//candidates[2].Assets = sdk.NewRat(1000) -//candidates[3].Assets = sdk.OneRat -//candidates[4].Assets = sdk.NewRat(10) -//for _, c := range candidates { -//setCandidate(store, c) -//} -//change, err = UpdateValidatorSet(store, p, params) -//require.Nil(err) -//require.Equal(5, len(change), "%v", change) // 3 changed, 1 added, 1 removed -//candidates = GetCandidates(store) -//testChange(t, candidates[0].validator(), change[0]) -//testChange(t, candidates[1].validator(), change[1]) -//testChange(t, candidates[2].validator(), change[2]) -//testRemove(t, candidates[3].validator(), change[3]) -//testChange(t, candidates[4].validator(), change[4]) -//} + // mess with the power's of the candidates and test + candidates[0].Assets = sdk.NewRat(10) + candidates[1].Assets = sdk.NewRat(600) + candidates[2].Assets = sdk.NewRat(1000) + candidates[3].Assets = sdk.OneRat + candidates[4].Assets = sdk.NewRat(10) + for _, c := range candidates { + setCandidate(store, c) + } + change, err = UpdateValidatorSet(store, p, params) + require.Nil(err) + require.Equal(5, len(change), "%v", change) // 3 changed, 1 added, 1 removed + candidates = GetCandidates(store) + testChange(t, candidates[0].validator(), change[0]) + testChange(t, candidates[1].validator(), change[1]) + testChange(t, candidates[2].validator(), change[2]) + testRemove(t, candidates[3].validator(), change[3]) + testChange(t, candidates[4].validator(), change[4]) +} -//func TestGetValidators(t *testing.T) { -//ctx, _, keeper := createTestInput(t, nil, false, 0) -//candidatesFromAddrs(ctx, keeper, addrs, []int64{400, 200, 0, 0, 0}) +// XXX BROKEN TEST +func TestGetValidators(t *testing.T) { + ctx, _, keeper := createTestInput(t, nil, false, 0) + params := keeper.GetParams(ctx) + params.MaxValidators = 2 + keeper.setParams(ctx, params) + candidatesFromAddrs(ctx, keeper, addrs, []int64{0, 0, 0, 400, 200, 0}) // XXX rearrange these something messed is happenning! -//validators := keeper.GetValidators(ctx, 2) -//require.Equal(t, 2, len(validators)) -//assert.Equal(t, addrs[0], validators[0].Address) -//assert.Equal(t, addrs[1], validators[1].Address) -//} + validators := keeper.GetValidators(ctx) + require.Equal(t, 2, len(validators)) + assert.Equal(t, addrs[0], validators[0].Address, "%v", validators) + assert.Equal(t, addrs[1], validators[1].Address, "%v", validators) +} var ( addrDel1 = addrs[0]