def test_change_ownership(clusters): time.sleep(3) leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] spawn_client_thread("test6") spawn_client_thread("test7") spawn_client_thread("test8") spawn_client_thread("test9") time.sleep(1) append_log(leader, new_config()) time.sleep(10) leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] append_log(leader, "test") time.sleep(3) d_logs = request_all_logs(raft.default_clusters) e_logs = request_all_logs(raft.extra_clusters) for k in raft.default_clusters: assert d_logs[k].logs[1] == "test" if k != leader: assert d_logs[k].role == "follower" for k in raft.extra_clusters: assert e_logs[k].logs[1] == "test" if k != leader: assert e_logs[k].role == "follower"
def test_sync_log(clusters): leaders = find_leaders(clusters) assert leaders != [] leader = leaders[0] append_logs(leader, ["test1", "test2", "test3"]) time.sleep(3) logs = request_all_logs(clusters) for k in clusters: assert logs[k].logs == ["test1", "test2", "test3"]
def test_1k_logs_sync(clusters): rand_logs = generate_random_logs(1000) leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] append_logs(leader, rand_logs) time.sleep(10) logs = request_all_logs(clusters) for k in clusters: assert logs[k].logs == rand_logs
def test_sync_log_after_leader_kickoff(clusters): leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] append_logs(leader, ["test1", "test2", "test3"]) time.sleep(3) logs = request_all_logs(clusters) for k in clusters: assert logs[k].logs == ["test1", "test2", "test3"] kick_off(leader) spawn_client_thread(leader) time.sleep(3) leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] logs = request_all_logs(clusters) assert logs[leader].logs == ["test1", "test2", "test3"] for k in clusters: assert logs[k].logs == ["test1", "test2", "test3"]
def test_purge_log_after_leader_offline(clusters): leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] append_logs(leader, ["test1", "test2", "test3"]) time.sleep(1) offline(leader) time.sleep(3) append_logs(leader, ["test4", "test5", "test6"]) time.sleep(1) leaders = find_leaders(clusters) assert len(leaders) == 2 new_leader = leaders[0] if leaders[0] != leader else leaders[1] append_logs(new_leader, ["test7", "test8", "test9"]) time.sleep(3) online(leader) time.sleep(3) logs = request_all_logs(clusters) assert logs[leader].logs == ["test1", "test2", "test3", "test7", "test8", "test9"] for k in clusters: assert logs[k].logs == ["test1", "test2", "test3", "test7", "test8", "test9"]
def test_10k_logs_sync(clusters): rand_logs = generate_random_logs(10000) leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] for i in range(10): append_logs(leader, rand_logs[i*1000:i*1000+1000]) time.sleep(1) time.sleep(30) logs = request_all_logs(clusters) for k in clusters: assert logs[k].logs == rand_logs
def test_no_leader_after_kick_off(clusters): leaders = find_leaders(clusters) followers = find_followers(clusters) kick_off(leaders[0]) kick_off(followers[0]) kick_off(followers[1]) time.sleep(3) logs = request_all_logs(clusters) leader_cnt = count_role(logs, "leader") assert leader_cnt == 0
def test_sync_log_after_follower_kickoff(clusters): leaders = find_leaders(clusters) assert leaders != [] leader = leaders[0] append_logs(leader, ["test1", "test2", "test3"]) time.sleep(3) followers = find_followers(clusters) kicked_off_follower = followers[0] kick_off(kicked_off_follower) spawn_client_thread(kicked_off_follower) time.sleep(3) logs = request_all_logs(clusters) assert logs[leader].logs == ["test1", "test2", "test3"] for k in clusters: assert logs[k].logs == ["test1", "test2", "test3"]
def test_new_leader_after_kick_off(clusters): leaders = find_leaders(clusters) assert len(leaders) == 1 leader = leaders[0] kick_off(leader) time.sleep(3) logs = request_all_logs(clusters) leader_cnt = count_role(logs, "leader") candidate_cnt = count_role(logs, "candidate") follower_cnt = count_role(logs, "follower") assert candidate_cnt == 0 assert follower_cnt == 3 assert leader_cnt == 1
def test_select_leader(clusters): assert find_leaders(clusters) != []