def test_two_candidates_one_wins(self): followers = [] for i in range(6): board = MemoryBoard() state = Follower() followers.append(Server(i, state, [], board, [])) board = MemoryBoard() state = Candidate() c0 = Server(7, state, [], board, followers[0:2]) board = MemoryBoard() state = Candidate() c1 = Server(8, state, [], board, followers[2:]) for i in range(2): followers[i]._neighbors.append(c0) followers[i].on_message(followers[i]._messageBoard.get_message()) for i in range(2, 6): followers[i]._neighbors.append(c1) followers[i].on_message(followers[i]._messageBoard.get_message()) c0._total_nodes = 7 c1._total_nodes = 7 for i in range(2): c0.on_message(c0._messageBoard.get_message()) for i in range(4): c1.on_message(c1._messageBoard.get_message()) self.assertEquals(type(c0._state), Candidate) self.assertEquals(type(c1._state), Leader)
def test_candidate_server_wins_election(self): board = MemoryBoard() state = Follower() server0 = Server(0, state, [], board, []) board = MemoryBoard() state = Follower() oserver = Server(1, state, [], board, []) board = MemoryBoard() state = Candidate() server = Server(2, state, [], board, [oserver, server0]) server0._neighbors.append(server) oserver._neighbors.append(server) oserver.on_message(oserver._messageBoard.get_message()) server0.on_message(server0._messageBoard.get_message()) server._total_nodes = 3 server.on_message(server._messageBoard.get_message()) server.on_message(server._messageBoard.get_message()) self.assertEquals(type(server._state), Leader)
print "1. Start a new server" print "2. Kill a server: name" print "3. Resume a server: name" print "4. Client command: name, message_string" print "5. Initiate first election" thread = Thread(target=checkMesages, args=()) thread.start() while (True): command = raw_input() args = command.split() if args[0] == "1": state = Follower() server = Server(available_id, state, [], []) server._total_nodes = available_id + 1 isLeader = 0 for i in range(available_id): server._neighbors.append(config[i]["object"]) if type(config[i]["object"]._state) == Leader: isLeader = 1 config[i]["object"]._total_nodes = available_id + 1 config[i]["object"]._neighbors.append(server) if isLeader: server._state.on_resume() thread = Thread(target=serverFunction, args=(available_id, )) config[available_id] = {"object": server} available_id += 1 thread.start() elif args[0] == "2":