Skip to content

Commit c90fb00

Browse files
authored
Merge pull request #132 from lerna-stack/test-state-after-receiving-election-timeout
Test state after receiving election timeout
2 parents aaa411b + 0715ee3 commit c90fb00

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

src/test/scala/lerna/akka/entityreplication/raft/RaftActorCandidateSpec.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ class RaftActorCandidateSpec extends TestKit(ActorSystem()) with RaftActorSpecBa
4747
lastLogTerm = Term(0),
4848
)
4949
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
50+
awaitAssert {
51+
assert(getState(candidate).stateName == Candidate)
52+
val stateData = getState(candidate).stateData
53+
assert(stateData.currentTerm == Term(3))
54+
assert(stateData.votedFor.isEmpty)
55+
assert(stateData.acceptedMembers.isEmpty)
56+
}
5057
}
5158

5259
"send RequestVote(lastLogIndex=entries.last.index, lastLogTerm=entries.last.term) on ElectionTimeout if it has RaftMemberData(ancestorLastTerm=0, ancestorLastIndex=0, entries.size>0, ...)" in {
@@ -85,6 +92,13 @@ class RaftActorCandidateSpec extends TestKit(ActorSystem()) with RaftActorSpecBa
8592
lastLogTerm = Term(2),
8693
)
8794
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
95+
awaitAssert {
96+
assert(getState(candidate).stateName == Candidate)
97+
val stateData = getState(candidate).stateData
98+
assert(stateData.currentTerm == Term(3))
99+
assert(stateData.votedFor.isEmpty)
100+
assert(stateData.acceptedMembers.isEmpty)
101+
}
88102
}
89103

90104
"send RequestVote(lastLogIndex=ancestorLastIndex, lastLogTerm=ancestorLastTerm) on ElectionTimeout if it has RaftMemberData(ancestorLastTerm>0, ancestorLastIndex>0, entries.size=0, ...)" in {
@@ -120,6 +134,13 @@ class RaftActorCandidateSpec extends TestKit(ActorSystem()) with RaftActorSpecBa
120134
lastLogTerm = ancestorLastTerm,
121135
)
122136
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
137+
awaitAssert {
138+
assert(getState(candidate).stateName == Candidate)
139+
val stateData = getState(candidate).stateData
140+
assert(stateData.currentTerm == Term(3))
141+
assert(stateData.votedFor.isEmpty)
142+
assert(stateData.acceptedMembers.isEmpty)
143+
}
123144
}
124145

125146
"send RequestVote(lastLogIndex=entries.last.index, lastLogTerm=entries.last.term) on ElectionTimeout if it has RaftMemberData(ancestorLastTerm>0, ancestorLastIndex>0, entries.size>0, ...)" in {
@@ -162,6 +183,13 @@ class RaftActorCandidateSpec extends TestKit(ActorSystem()) with RaftActorSpecBa
162183
lastLogTerm = Term(2),
163184
)
164185
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
186+
awaitAssert {
187+
assert(getState(candidate).stateName == Candidate)
188+
val stateData = getState(candidate).stateData
189+
assert(stateData.currentTerm == Term(3))
190+
assert(stateData.votedFor.isEmpty)
191+
assert(stateData.acceptedMembers.isEmpty)
192+
}
165193
}
166194

167195
"メンバーの過半数に Accept されると Leader になる" in {

src/test/scala/lerna/akka/entityreplication/raft/RaftActorFollowerSpec.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ class RaftActorFollowerSpec extends TestKit(ActorSystem()) with RaftActorSpecBas
4545
lastLogTerm = Term(0),
4646
)
4747
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
48+
awaitAssert {
49+
assert(getState(follower).stateName == Candidate)
50+
val stateData = getState(follower).stateData
51+
assert(stateData.currentTerm == Term(3))
52+
assert(stateData.votedFor.isEmpty)
53+
assert(stateData.acceptedMembers.isEmpty)
54+
}
4855
}
4956

5057
"send RequestVote(lastLogIndex=entries.last.index, lastLogTerm=entries.last.term) on ElectionTimeout if it has RaftMemberData(ancestorLastTerm=0, ancestorLastIndex=0, entries.size>0, ...)" in {
@@ -83,6 +90,13 @@ class RaftActorFollowerSpec extends TestKit(ActorSystem()) with RaftActorSpecBas
8390
lastLogTerm = Term(2),
8491
)
8592
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
93+
awaitAssert {
94+
assert(getState(follower).stateName == Candidate)
95+
val stateData = getState(follower).stateData
96+
assert(stateData.currentTerm == Term(3))
97+
assert(stateData.votedFor.isEmpty)
98+
assert(stateData.acceptedMembers.isEmpty)
99+
}
86100
}
87101

88102
"send RequestVote(lastLogIndex=ancestorLastIndex, lastLogTerm=ancestorLastTerm) on ElectionTimeout if it has RaftMemberData(ancestorLastTerm>0, ancestorLastIndex>0, entries.size=0, ...)" in {
@@ -118,6 +132,13 @@ class RaftActorFollowerSpec extends TestKit(ActorSystem()) with RaftActorSpecBas
118132
lastLogTerm = ancestorLastTerm,
119133
)
120134
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
135+
awaitAssert {
136+
assert(getState(follower).stateName == Candidate)
137+
val stateData = getState(follower).stateData
138+
assert(stateData.currentTerm == Term(3))
139+
assert(stateData.votedFor.isEmpty)
140+
assert(stateData.acceptedMembers.isEmpty)
141+
}
121142
}
122143

123144
"send RequestVote(lastLogIndex=entries.last.index, lastLogTerm=entries.last.term) on ElectionTimeout if it has RaftMemberData(ancestorLastTerm>0, ancestorLastIndex>0, entries.size>0, ...)" in {
@@ -160,6 +181,13 @@ class RaftActorFollowerSpec extends TestKit(ActorSystem()) with RaftActorSpecBas
160181
lastLogTerm = Term(2),
161182
)
162183
regionProbe.expectMsg(ReplicationRegion.Broadcast(expectedRequestVote))
184+
awaitAssert {
185+
assert(getState(follower).stateName == Candidate)
186+
val stateData = getState(follower).stateData
187+
assert(stateData.currentTerm == Term(3))
188+
assert(stateData.votedFor.isEmpty)
189+
assert(stateData.acceptedMembers.isEmpty)
190+
}
163191
}
164192

165193
"自分が持っている Term と同じ場合は AppendEntries を成功させる" in {

0 commit comments

Comments
 (0)