aboutsummaryrefslogtreecommitdiffstats
path: root/core/agreement-state_test.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-01-07 17:21:08 +0800
committerGitHub <noreply@github.com>2019-01-07 17:21:08 +0800
commit21c420db895b1aa48709982cd145a119c74de6fa (patch)
treea8cd9a9bc5e8c22a21812f0e00939f3fbd92db89 /core/agreement-state_test.go
parent8d1069b61d847662d37f504937a346c56d6cb0eb (diff)
downloaddexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar
dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.gz
dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.bz2
dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.lz
dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.xz
dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.tar.zst
dexon-consensus-21c420db895b1aa48709982cd145a119c74de6fa.zip
core: BA 3.0 (#408)
* Add v3 enum * Add BA leader calculation * Fast BA * Add unittest for Fast BA * Add comment * Select leader in notarySet
Diffstat (limited to 'core/agreement-state_test.go')
-rw-r--r--core/agreement-state_test.go65
1 files changed, 64 insertions, 1 deletions
diff --git a/core/agreement-state_test.go b/core/agreement-state_test.go
index bb624ea..43557f1 100644
--- a/core/agreement-state_test.go
+++ b/core/agreement-state_test.go
@@ -115,10 +115,73 @@ func (s *AgreementStateTestSuite) newAgreement(numNode int) *agreement {
leader,
s.signers[s.ID],
)
- agreement.restart(notarySet, types.Position{}, common.NewRandomHash())
+ agreement.restart(notarySet, types.Position{}, types.NodeID{}, common.NewRandomHash())
return agreement
}
+func (s *AgreementStateTestSuite) TestFastStateLeader() {
+ a := s.newAgreement(4)
+ state := newFastState(a.data)
+ s.Equal(stateFast, state.state())
+ s.Equal(0, state.clocks())
+
+ // Proposing a new block if it's leader.
+ a.data.period = 1
+ a.data.isLeader = true
+ newState, err := state.nextState()
+ s.Require().NoError(err)
+ s.Require().Len(s.blockChan, 1)
+ proposedBlock := <-s.blockChan
+ s.NotEqual(common.Hash{}, proposedBlock)
+ s.Require().NoError(a.processBlock(s.block[proposedBlock]))
+ s.Require().Len(s.voteChan, 1)
+ proposedVote := <-s.voteChan
+ s.Equal(proposedBlock, proposedVote.BlockHash)
+ s.Equal(types.VoteFast, proposedVote.Type)
+ s.Equal(stateFastVote, newState.state())
+}
+
+func (s *AgreementStateTestSuite) TestFastStateNotLeader() {
+ a := s.newAgreement(4)
+ state := newFastState(a.data)
+ s.Equal(stateFast, state.state())
+ s.Equal(0, state.clocks())
+
+ // Not proposing any block if it's not leader.
+ a.data.period = 1
+ a.data.isLeader = false
+ newState, err := state.nextState()
+ s.Require().NoError(err)
+ s.Require().Len(s.blockChan, 0)
+ s.Equal(stateFastVote, newState.state())
+}
+
+func (s *AgreementStateTestSuite) TestFastVoteState() {
+ a := s.newAgreement(4)
+ state := newFastVoteState(a.data)
+ s.Equal(stateFastVote, state.state())
+ s.Equal(2, state.clocks())
+
+ // The vote proposed is not implemented inside state.
+ a.data.period = 1
+ newState, err := state.nextState()
+ s.Require().NoError(err)
+ s.Require().Len(s.voteChan, 0)
+ s.Equal(stateFastRollback, newState.state())
+}
+
+func (s *AgreementStateTestSuite) TestFastRollbackState() {
+ a := s.newAgreement(4)
+ state := newFastRollbackState(a.data)
+ s.Equal(stateFastRollback, state.state())
+ s.Equal(1, state.clocks())
+
+ a.data.period = 1
+ newState, err := state.nextState()
+ s.Require().NoError(err)
+ s.Equal(stateInitial, newState.state())
+}
+
func (s *AgreementStateTestSuite) TestInitialState() {
a := s.newAgreement(4)
state := newInitialState(a.data)