aboutsummaryrefslogtreecommitdiffstats
path: root/core/utils_test.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-01-18 11:39:14 +0800
committerGitHub <noreply@github.com>2019-01-18 11:39:14 +0800
commit9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb (patch)
tree26fa5ba54878b52dc6c8bb610428cdb8b84baba7 /core/utils_test.go
parentc5b303f4d143631fb565d4ec8ff3bcc609a4ffd3 (diff)
downloadtangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.tar
tangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.tar.gz
tangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.tar.bz2
tangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.tar.lz
tangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.tar.xz
tangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.tar.zst
tangerine-consensus-9ff8f0cdc45a7b294ae71a28e7e205bb67e559cb.zip
core: Fix stuffs (#422)
* core: reduce syncing ba msg * core: fix checking period of agreement result
Diffstat (limited to 'core/utils_test.go')
-rw-r--r--core/utils_test.go81
1 files changed, 81 insertions, 0 deletions
diff --git a/core/utils_test.go b/core/utils_test.go
index dd15607..5d61a48 100644
--- a/core/utils_test.go
+++ b/core/utils_test.go
@@ -19,8 +19,14 @@ package core
import (
"testing"
+ "time"
"github.com/stretchr/testify/suite"
+
+ "github.com/dexon-foundation/dexon-consensus/common"
+ "github.com/dexon-foundation/dexon-consensus/core/test"
+ "github.com/dexon-foundation/dexon-consensus/core/types"
+ "github.com/dexon-foundation/dexon-consensus/core/utils"
)
type UtilsTestSuite struct {
@@ -39,6 +45,81 @@ func (s *UtilsTestSuite) TestRemoveFromSortedUint32Slice() {
s.Equal([]uint32{}, removeFromSortedUint32Slice([]uint32{}, 1))
}
+func (s *UtilsTestSuite) TestVerifyAgreementResult() {
+ prvKeys, pubKeys, err := test.NewKeys(4)
+ s.Require().NoError(err)
+ gov, err := test.NewGovernance(test.NewState(
+ pubKeys, time.Second, &common.NullLogger{}, true), ConfigRoundShift)
+ s.Require().NoError(err)
+ cache := utils.NewNodeSetCache(gov)
+ hash := common.NewRandomHash()
+ signers := make([]*utils.Signer, 0, len(prvKeys))
+ for _, prvKey := range prvKeys {
+ signers = append(signers, utils.NewSigner(prvKey))
+ }
+ pos := types.Position{
+ Round: 0,
+ ChainID: 0,
+ Height: 20,
+ }
+ baResult := &types.AgreementResult{
+ BlockHash: hash,
+ Position: pos,
+ }
+ for _, signer := range signers {
+ vote := types.NewVote(types.VoteCom, hash, 0)
+ vote.Position = pos
+ s.Require().NoError(signer.SignVote(vote))
+ baResult.Votes = append(baResult.Votes, *vote)
+ }
+ s.Require().NoError(VerifyAgreementResult(baResult, cache))
+
+ // Test negative case.
+ // All period should be the same.
+ baResult.Votes[1].Period++
+ s.Equal(ErrIncorrectVotePeriod, VerifyAgreementResult(baResult, cache))
+ baResult.Votes[1].Period--
+
+ // Blockhash should match the one in votes.
+ baResult.BlockHash = common.NewRandomHash()
+ s.Equal(ErrIncorrectVoteBlockHash, VerifyAgreementResult(baResult, cache))
+ baResult.BlockHash = hash
+
+ // Position should match.
+ baResult.Position.Height++
+ s.Equal(ErrIncorrectVotePosition, VerifyAgreementResult(baResult, cache))
+ baResult.Position = pos
+
+ // types.VotePreCom is not accepted in agreement result.
+ baResult.Votes[0].Type = types.VotePreCom
+ s.Equal(ErrIncorrectVoteType, VerifyAgreementResult(baResult, cache))
+ baResult.Votes[0].Type = types.VoteCom
+
+ // Vote type should be the same.
+ baResult.Votes[1].Type = types.VoteFast
+ s.Equal(ErrIncorrectVoteType, VerifyAgreementResult(baResult, cache))
+ baResult.Votes[1].Type = types.VoteCom
+
+ // Only vote proposed by notarySet is valid.
+ baResult.Votes[0].ProposerID = types.NodeID{Hash: common.NewRandomHash()}
+ s.Equal(ErrIncorrectVoteProposer, VerifyAgreementResult(baResult, cache))
+ baResult.Votes[0].ProposerID = types.NewNodeID(pubKeys[0])
+
+ // Vote shuold have valid signature.
+ baResult.Votes[0].Signature, err = prvKeys[0].Sign(common.NewRandomHash())
+ s.Require().NoError(err)
+ s.Equal(ErrIncorrectVoteSignature, VerifyAgreementResult(baResult, cache))
+ s.Require().NoError(signers[0].SignVote(&baResult.Votes[0]))
+
+ // Unique votes shuold be more than threshold.
+ baResult.Votes = baResult.Votes[:1]
+ s.Equal(ErrNotEnoughVotes, VerifyAgreementResult(baResult, cache))
+ for range signers {
+ baResult.Votes = append(baResult.Votes, baResult.Votes[0])
+ }
+ s.Equal(ErrNotEnoughVotes, VerifyAgreementResult(baResult, cache))
+}
+
func TestUtils(t *testing.T) {
suite.Run(t, new(UtilsTestSuite))
}