/* Candidate 5.2 */ void TestRaft_follower_becoming_candidate_increments_current_term(CuTest * tc) { void *r = raft_new(); CuAssertTrue(tc, 0 == raft_get_current_term(r)); raft_become_candidate(r); CuAssertTrue(tc, 1 == raft_get_current_term(r)); }
/* Candidate 5.2 */ void TestRaft_follower_becoming_candidate_votes_for_self(CuTest * tc) { void *r = raft_new(); CuAssertTrue(tc, -1 == raft_get_voted_for(r)); raft_become_candidate(r); CuAssertTrue(tc, raft_get_nodeid(r) == raft_get_voted_for(r)); CuAssertTrue(tc, 1 == raft_get_nvotes_for_me(r)); }
void raft_election_start(raft_server_t* me_) { raft_server_private_t* me = (void*)me_; __log(me_, NULL, "election starting: %d %d, term: %d", me->election_timeout, me->timeout_elapsed, me->current_term); raft_become_candidate(me_); }
/* Candidate 5.2 */ void TestRaft_follower_becoming_candidate_resets_election_timeout(CuTest * tc) { void *r = raft_new(); raft_set_election_timeout(r, 1000); CuAssertTrue(tc, 0 == raft_get_timeout_elapsed(r)); raft_periodic(r, 900); CuAssertTrue(tc, 900 == raft_get_timeout_elapsed(r)); raft_become_candidate(r); /* time is selected randomly */ CuAssertTrue(tc, raft_get_timeout_elapsed(r) < 900); }
void TestRaft_server_recv_requestvote_candidate_step_down_if_term_is_higher_than_current_term( CuTest * tc ) { void *r = raft_new(); raft_add_node(r, (void*)1, 1); raft_add_node(r, (void*)2, 0); raft_become_candidate(r); raft_set_current_term(r, 1); /* current term is less than term */ msg_requestvote_t rv; memset(&rv, 0, sizeof(msg_requestvote_t)); rv.term = 2; rv.last_log_idx = 1; msg_requestvote_response_t rvr; raft_recv_requestvote(r, 1, &rv, &rvr); CuAssertTrue(tc, 1 == raft_is_follower(r)); }
void TestRaft_candidate_becomes_candidate_is_candidate(CuTest * tc) { void *r = raft_new(); raft_become_candidate(r); CuAssertTrue(tc, raft_is_candidate(r)); }