Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Willemt Raft
Commits
2a10b1d5
Commit
2a10b1d5
authored
Sep 20, 2016
by
Willem Thiart
Browse files
Fixes #29
parent
f2ee69fa
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/test_server.c
View file @
2a10b1d5
...
...
@@ -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
)
...
...
@@ -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
;
...
...
@@ -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
;
...
...
@@ -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
;
...
...
@@ -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 */
...
...
@@ -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
(
...
...
@@ -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
;
...
...
@@ -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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment