示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)