예제 #1
0
    def test_remove_incorrect(self):
        clock = Clock()

        leader_store = MockStoreDontUse(
            entries={
                1: Entry(term=1, payload=1),
                2: Entry(term=2, payload=2),
                3: Entry(term=2, payload=3),
            })
        leader_store.setCurrentTerm(2)
        leader_rpc = MockRPC()
        leader = RaftNode(1, leader_store, leader_rpc, clock=clock)

        follower_store = MockStoreDontUse({
            1: Entry(term=1, payload=1),
            2: Entry(term=5, payload=1)
        })
        follower_rpc = MockRPC()
        follower = RaftNode(2, follower_store, follower_rpc, clock=clock)

        leader_rpc.simpleAddNode(follower)
        follower_rpc.simpleAddNode(leader)

        d = leader._callAppendEntries(follower.id, {})
        res = self.successResultOf(d)

        self.assertEqual(leader_store.log, follower_store.log)
예제 #2
0
    def test_cluster(self):
        nodes = []
        for num in range(5):
            clock = Clock()
            rpc = MockRPC()
            store = MockStoreDontUse()
            node = RaftNode(num, store, rpc, clock=clock, electionTimeout=1)
            nodes.append((node, rpc, store, clock))

        for node1, rpc, _, _ in nodes:
            for node2, _, _, _ in nodes:
                if node1 is node2:
                    continue
                rpc.simpleAddNode(node2)

        for node, rpc, store, clock in nodes:
            clock.advance(1.0)