- package consensus
-
- import (
- "testing"
-
- "github.com/tendermint/tendermint/types"
- cmn "github.com/tendermint/tmlibs/common"
- )
-
- func init() {
- config = ResetConfig("consensus_height_vote_set_test")
- }
-
- func TestPeerCatchupRounds(t *testing.T) {
- valSet, privVals := types.RandValidatorSet(10, 1)
-
- hvs := NewHeightVoteSet(config.ChainID, 1, valSet)
-
- vote999_0 := makeVoteHR(t, 1, 999, privVals, 0)
- added, err := hvs.AddVote(vote999_0, "peer1")
- if !added || err != nil {
- t.Error("Expected to successfully add vote from peer", added, err)
- }
-
- vote1000_0 := makeVoteHR(t, 1, 1000, privVals, 0)
- added, err = hvs.AddVote(vote1000_0, "peer1")
- if !added || err != nil {
- t.Error("Expected to successfully add vote from peer", added, err)
- }
-
- vote1001_0 := makeVoteHR(t, 1, 1001, privVals, 0)
- added, err = hvs.AddVote(vote1001_0, "peer1")
- if err != nil {
- t.Error("AddVote error", err)
- }
- if added {
- t.Error("Expected to *not* add vote from peer, too many catchup rounds.")
- }
-
- added, err = hvs.AddVote(vote1001_0, "peer2")
- if !added || err != nil {
- t.Error("Expected to successfully add vote from another peer")
- }
-
- }
-
- func makeVoteHR(t *testing.T, height, round int, privVals []*types.PrivValidatorFS, valIndex int) *types.Vote {
- privVal := privVals[valIndex]
- vote := &types.Vote{
- ValidatorAddress: privVal.GetAddress(),
- ValidatorIndex: valIndex,
- Height: height,
- Round: round,
- Type: types.VoteTypePrecommit,
- BlockID: types.BlockID{[]byte("fakehash"), types.PartSetHeader{}},
- }
- chainID := config.ChainID
- err := privVal.SignVote(chainID, vote)
- if err != nil {
- panic(cmn.Fmt("Error signing vote: %v", err))
- return nil
- }
- return vote
- }
|