Skip to content

Commit

Permalink
Fixes #29
Browse files Browse the repository at this point in the history
  • Loading branch information
willemt committed Sep 20, 2016
1 parent f2ee69f commit 2a10b1d
Showing 1 changed file with 55 additions and 6 deletions.
61 changes: 55 additions & 6 deletions tests/test_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,7 @@ void TestRaft_follower_recv_appendentries_reply_false_if_doesnt_have_log_at_prev
CuAssertTrue(tc, 0 == aer.success);
}

static raft_entry_t* __entries_for_conflict_tests(
static raft_entry_t* __create_mock_entries_for_conflict_tests(
CuTest * tc,
raft_server_t* r,
char** strs)
Expand All @@ -999,7 +999,7 @@ static raft_entry_t* __entries_for_conflict_tests(
raft_append_entry(r, &ety);
CuAssertTrue(tc, 1 == raft_get_log_count(r));

/* this log will be overwritten by the appendentries below */
/* this log will be overwritten by a later appendentries */
char *str2 = strs[1];
ety.data.buf = str2;
ety.data.len = 3;
Expand All @@ -1010,7 +1010,7 @@ static raft_entry_t* __entries_for_conflict_tests(
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 2)));
CuAssertTrue(tc, !strncmp(ety_appended->data.buf, str2, 3));

/* this log will be overwritten by the appendentries below */
/* this log will be overwritten by a later appendentries */
char *str3 = strs[2];
ety.data.buf = str3;
ety.data.len = 3;
Expand All @@ -1025,7 +1025,7 @@ static raft_entry_t* __entries_for_conflict_tests(
}

/* 5.3 */
void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries(
void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries_via_prev_log_idx(
CuTest * tc)
{
msg_appendentries_t ae;
Expand All @@ -1038,13 +1038,14 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
raft_set_current_term(r, 1);

char* strs[] = {"111", "222", "333"};
raft_entry_t *ety_appended = __entries_for_conflict_tests(tc, r, strs);
raft_entry_t *ety_appended = __create_mock_entries_for_conflict_tests(tc, r, strs);

/* pass a appendentry that is newer */
msg_entry_t mety = {};

memset(&ae, 0, sizeof(msg_appendentries_t));
ae.term = 2;
/* entries from 2 onwards will be overwritten by this appendentries message */
ae.prev_log_idx = 1;
ae.prev_log_term = 1;
/* include one entry */
Expand All @@ -1059,8 +1060,52 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
raft_recv_appendentries(r, raft_get_node(r, 2), &ae, &aer);
CuAssertTrue(tc, 1 == aer.success);
CuAssertTrue(tc, 2 == raft_get_log_count(r));
/* str1 is still there */
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 1)));
CuAssertTrue(tc, !strncmp(ety_appended->data.buf, strs[0], 3));
/* str4 has overwritten the last 2 entries */
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 2)));
CuAssertTrue(tc, !strncmp(ety_appended->data.buf, str4, 3));
}

void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries_via_prev_log_idx_at_idx_0(
CuTest * tc)
{
msg_appendentries_t ae;
msg_appendentries_response_t aer;

void *r = raft_new();
raft_add_node(r, NULL, 1, 1);
raft_add_node(r, NULL, 2, 0);

raft_set_current_term(r, 1);

char* strs[] = {"111", "222", "333"};
raft_entry_t *ety_appended = __create_mock_entries_for_conflict_tests(tc, r, strs);

/* pass a appendentry that is newer */
msg_entry_t mety = {};

memset(&ae, 0, sizeof(msg_appendentries_t));
ae.term = 2;
/* ALL append entries will be overwritten by this appendentries message */
ae.prev_log_idx = 0;
ae.prev_log_term = 0;
/* include one entry */
memset(&mety, 0, sizeof(msg_entry_t));
char *str4 = "444";
mety.data.buf = str4;
mety.data.len = 3;
mety.id = 4;
ae.entries = &mety;
ae.n_entries = 1;

raft_recv_appendentries(r, raft_get_node(r, 2), &ae, &aer);
CuAssertTrue(tc, 1 == aer.success);
CuAssertTrue(tc, 1 == raft_get_log_count(r));
/* str1 is gone */
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 1)));
CuAssertTrue(tc, !strncmp(ety_appended->data.buf, str4, 3));
}

void TestRaft_follower_recv_appendentries_delete_entries_if_current_idx_greater_than_prev_log_idx(
Expand All @@ -1076,7 +1121,9 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_current_idx_greater_
raft_set_current_term(r, 1);

char* strs[] = {"111", "222", "333"};
raft_entry_t *ety_appended = __entries_for_conflict_tests(tc, r, strs);
raft_entry_t *ety_appended;

__create_mock_entries_for_conflict_tests(tc, r, strs);

memset(&ae, 0, sizeof(msg_appendentries_t));
ae.term = 2;
Expand All @@ -1092,6 +1139,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_current_idx_greater_
CuAssertTrue(tc, !strncmp(ety_appended->data.buf, strs[0], 3));
}

// TODO: add TestRaft_follower_recv_appendentries_delete_entries_if_term_is_different

void TestRaft_follower_recv_appendentries_add_new_entries_not_already_in_log(
CuTest * tc)
{
Expand Down

0 comments on commit 2a10b1d

Please sign in to comment.