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
e62f254f
Commit
e62f254f
authored
Dec 23, 2013
by
willem
Browse files
Added scenario tests
parent
b98eedcb
Changes
5
Hide whitespace changes
Inline
Side-by-side
CuTest.c
View file @
e62f254f
...
@@ -121,7 +121,7 @@ CuTest* CuTestNew(const char* name, TestFunction function)
...
@@ -121,7 +121,7 @@ CuTest* CuTestNew(const char* name, TestFunction function)
void
CuTestRun
(
CuTest
*
tc
)
void
CuTestRun
(
CuTest
*
tc
)
{
{
#if
1
/* debugging */
#if
0
/* debugging */
printf(" running %s\n", tc->name);
printf(" running %s\n", tc->name);
#endif
#endif
jmp_buf
buf
;
jmp_buf
buf
;
...
...
raft.h
View file @
e62f254f
...
@@ -195,6 +195,8 @@ int raft_send_requestvote(raft_server_t* me, int node);
...
@@ -195,6 +195,8 @@ int raft_send_requestvote(raft_server_t* me, int node);
void
raft_send_appendentries
(
raft_server_t
*
me
,
int
node
);
void
raft_send_appendentries
(
raft_server_t
*
me
,
int
node
);
void
raft_send_appendentries_all
(
raft_server_t
*
me_
);
int
raft_append_entry
(
raft_server_t
*
me_
,
raft_entry_t
*
c
);
int
raft_append_entry
(
raft_server_t
*
me_
,
raft_entry_t
*
c
);
int
raft_get_timeout_elapsed
(
raft_server_t
*
me
);
int
raft_get_timeout_elapsed
(
raft_server_t
*
me
);
...
@@ -229,3 +231,4 @@ raft_entry_t* raft_get_entry_from_idx(raft_server_t* me_, int idx);
...
@@ -229,3 +231,4 @@ raft_entry_t* raft_get_entry_from_idx(raft_server_t* me_, int idx);
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
int
nodeid
);
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
int
nodeid
);
int
raft_get_nodeid
(
raft_server_t
*
me_
);
int
raft_get_nodeid
(
raft_server_t
*
me_
);
raft_server.c
View file @
e62f254f
...
@@ -108,7 +108,7 @@ static void __log(raft_server_t *me_, void *src, const char *fmt, ...)
...
@@ -108,7 +108,7 @@ static void __log(raft_server_t *me_, void *src, const char *fmt, ...)
va_start
(
args
,
fmt
);
va_start
(
args
,
fmt
);
vsprintf
(
buf
,
fmt
,
args
);
vsprintf
(
buf
,
fmt
,
args
);
printf
(
"%d: %s
\n
"
,
me
->
nodeid
,
buf
);
//
printf("%d: %s\n", me->nodeid, buf);
//__FUNC_log(bto,src,buf);
//__FUNC_log(bto,src,buf);
}
}
...
@@ -125,8 +125,8 @@ raft_server_t* raft_new()
...
@@ -125,8 +125,8 @@ raft_server_t* raft_new()
me
->
timeout_elapsed
=
0
;
me
->
timeout_elapsed
=
0
;
me
->
log
=
log_new
();
me
->
log
=
log_new
();
raft_set_state
((
void
*
)
me
,
RAFT_STATE_FOLLOWER
);
raft_set_state
((
void
*
)
me
,
RAFT_STATE_FOLLOWER
);
raft_set_
request_timeout
((
void
*
)
me
,
5
00
)
;
me
->
request_timeout
=
2
00
;
raft_set_
election_timeout
((
void
*
)
me
,
1000
)
;
me
->
election_timeout
=
1000
;
return
(
void
*
)
me
;
return
(
void
*
)
me
;
}
}
...
@@ -355,6 +355,8 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
...
@@ -355,6 +355,8 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
{
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
void
*
)
me_
;
__log
(
me_
,
NULL
,
"periodic elapsed time: %d"
,
me
->
timeout_elapsed
);
switch
(
me
->
state
)
switch
(
me
->
state
)
{
{
case
RAFT_STATE_FOLLOWER
:
case
RAFT_STATE_FOLLOWER
:
...
@@ -366,9 +368,18 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
...
@@ -366,9 +368,18 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
break
;
break
;
}
}
if
(
me
->
state
!=
RAFT_STATE_LEADER
)
me
->
timeout_elapsed
+=
msec_since_last_period
;
if
(
me
->
state
==
RAFT_STATE_LEADER
)
{
if
(
me
->
request_timeout
<=
me
->
timeout_elapsed
)
{
raft_send_appendentries_all
(
me_
);
me
->
timeout_elapsed
=
0
;
}
}
else
{
{
me
->
timeout_elapsed
+=
msec_since_last_period
;
if
(
me
->
election_timeout
<=
me
->
timeout_elapsed
)
if
(
me
->
election_timeout
<=
me
->
timeout_elapsed
)
{
{
raft_election_start
(
me_
);
raft_election_start
(
me_
);
...
@@ -755,6 +766,18 @@ void raft_send_appendentries(raft_server_t* me_, int node)
...
@@ -755,6 +766,18 @@ void raft_send_appendentries(raft_server_t* me_, int node)
(
void
*
)
&
ae
,
sizeof
(
msg_appendentries_t
));
(
void
*
)
&
ae
,
sizeof
(
msg_appendentries_t
));
}
}
void
raft_send_appendentries_all
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
int
i
;
for
(
i
=
0
;
i
<
me
->
nnodes
;
i
++
)
{
if
(
me
->
nodeid
==
i
)
continue
;
raft_send_appendentries
(
me_
,
i
);
}
}
/**
/**
* Set configuration
* Set configuration
* @param nodes Array of nodes, end of array is marked by NULL entry
* @param nodes Array of nodes, end of array is marked by NULL entry
...
...
test_scenario.c
0 → 100644
View file @
e62f254f
#include <stdbool.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include "CuTest.h"
#include "raft.h"
#include "mock_send_functions.h"
void
TestRaft_scenario_leader_appears
(
CuTest
*
tc
)
{
int
i
,
j
;
raft_server_t
*
r
[
3
];
void
*
sender
[
3
];
raft_node_configuration_t
cfg
[]
=
{
{(
-
1
),(
void
*
)
1
},
{(
-
1
),(
void
*
)
2
},
{(
-
1
),(
void
*
)
3
},
{(
-
1
),
NULL
}};
senders_new
();
for
(
j
=
0
;
j
<
3
;
j
++
)
{
r
[
j
]
=
raft_new
();
sender
[
j
]
=
sender_new
(
cfg
[
j
].
udata_address
);
sender_set_raft
(
sender
[
j
],
r
[
j
]);
raft_set_election_timeout
(
r
[
j
],
500
);
raft_set_configuration
(
r
[
j
],
cfg
,
j
);
raft_set_callbacks
(
r
[
j
],
&
((
raft_cbs_t
)
{
.
send
=
sender_send
,
.
log
=
NULL
}),
sender
[
j
]);
}
for
(
i
=
0
;
i
<
20
;
i
++
)
{
one_more_time:
for
(
j
=
0
;
j
<
3
;
j
++
)
sender_poll_msgs
(
sender
[
j
]);
for
(
j
=
0
;
j
<
3
;
j
++
)
if
(
sender_msgs_available
(
sender
[
j
]))
goto
one_more_time
;
for
(
j
=
0
;
j
<
3
;
j
++
)
raft_periodic
(
r
[
j
],
100
);
}
int
leaders
=
0
;
for
(
j
=
0
;
j
<
3
;
j
++
)
{
if
(
raft_is_leader
(
r
[
j
]))
leaders
+=
1
;
}
CuAssertTrue
(
tc
,
0
!=
leaders
);
CuAssertTrue
(
tc
,
1
==
leaders
);
}
test_server.c
View file @
e62f254f
...
@@ -123,12 +123,12 @@ void TestRaft_server_starts_with_election_timeout_of_1000ms(CuTest * tc)
...
@@ -123,12 +123,12 @@ void TestRaft_server_starts_with_election_timeout_of_1000ms(CuTest * tc)
CuAssertTrue
(
tc
,
1000
==
raft_get_election_timeout
(
r
));
CuAssertTrue
(
tc
,
1000
==
raft_get_election_timeout
(
r
));
}
}
void
TestRaft_server_starts_with_request_timeout_of_
5
00ms
(
CuTest
*
tc
)
void
TestRaft_server_starts_with_request_timeout_of_
2
00ms
(
CuTest
*
tc
)
{
{
void
*
r
;
void
*
r
;
r
=
raft_new
();
r
=
raft_new
();
CuAssertTrue
(
tc
,
5
00
==
raft_get_request_timeout
(
r
));
CuAssertTrue
(
tc
,
2
00
==
raft_get_request_timeout
(
r
));
}
}
void
TestRaft_server_entry_append_cant_append_if_id_is_zero
(
CuTest
*
tc
)
void
TestRaft_server_entry_append_cant_append_if_id_is_zero
(
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