Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
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
Show 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
;
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
{
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