def test_respond_requestVote_oldLog(self): store = MockStoreDontUse(entries={ 2: Entry(term=2, payload=1), 3: Entry(term=3, payload=2) }) store.setCurrentTerm(3) rpc = MockRPC() clock = Clock() node = RaftNode(1, store, rpc, clock=clock) resp = node.respond_requestVote( RequestVotesCommand(term=4, candidateId='id', lastLogIndex=2, lastLogTerm=2)) term, result = self.successResultOf(resp) self.assertFalse(result) resp = node.respond_requestVote( RequestVotesCommand(term=4, candidateId='id', lastLogIndex=4, lastLogTerm=2)) term, result = self.successResultOf(resp) self.assertFalse(result) resp = node.respond_requestVote( RequestVotesCommand(term=4, candidateId='id', lastLogIndex=2, lastLogTerm=3)) term, result = self.successResultOf(resp) self.assertFalse(result)
def test_respond_requestVote_alreadyVoted(self): store = MockStoreDontUse() store.setVotedFor(3) rpc = MockRPC() clock = Clock() node = RaftNode(1, store, rpc, clock=clock) resp = node.respond_requestVote( RequestVotesCommand(term=4, candidateId=2, lastLogIndex=4, lastLogTerm=4)) term, result = self.successResultOf(resp) self.assertFalse(result) resp = node.respond_requestVote( RequestVotesCommand(term=4, candidateId=3, lastLogIndex=4, lastLogTerm=4)) term, result = self.successResultOf(resp) self.assertTrue(result)
def test_respond_requestVote_lowerTerm(self): store = MockStoreDontUse() store.setCurrentTerm(3) rpc = MockRPC() clock = Clock() node = RaftNode(1, store, rpc, clock=clock) resp = node.respond_requestVote( RequestVotesCommand(term=2, candidateId='id', lastLogIndex=4, lastLogTerm=4)) term, result = self.successResultOf(resp) self.assertFalse(result)
def test_respond_requestVote(self): store = MockStoreDontUse() rpc = MockRPC() clock = Clock() node = RaftNode(1, store, rpc, clock=clock) resp = node.respond_requestVote( RequestVotesCommand(term=4, candidateId=2, lastLogIndex=4, lastLogTerm=4)) term, result = self.successResultOf(resp) self.assertTrue(result) votedFor = self.successResultOf(store.getVotedFor()) self.assertEqual(votedFor, 2)