Commit e62f254f authored by willem's avatar willem
Browse files

Added scenario tests

parent b98eedcb
......@@ -121,7 +121,7 @@ CuTest* CuTestNew(const char* name, TestFunction function)
void CuTestRun(CuTest* tc)
{
#if 1 /* debugging */
#if 0 /* debugging */
printf(" running %s\n", tc->name);
#endif
jmp_buf buf;
......
......@@ -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_all(raft_server_t* me_);
int raft_append_entry(raft_server_t* me_, raft_entry_t* c);
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);
raft_node_t* raft_get_node(raft_server_t *me_, int nodeid);
int raft_get_nodeid(raft_server_t* me_);
......@@ -108,7 +108,7 @@ static void __log(raft_server_t *me_, void *src, const char *fmt, ...)
va_start(args, fmt);
vsprintf(buf, fmt, args);
printf("%d: %s\n", me->nodeid, buf);
//printf("%d: %s\n", me->nodeid, buf);
//__FUNC_log(bto,src,buf);
}
......@@ -125,8 +125,8 @@ raft_server_t* raft_new()
me->timeout_elapsed = 0;
me->log = log_new();
raft_set_state((void*)me,RAFT_STATE_FOLLOWER);
raft_set_request_timeout((void*)me, 500);
raft_set_election_timeout((void*)me, 1000);
me->request_timeout = 200;
me->election_timeout = 1000;
return (void*)me;
}
......@@ -355,6 +355,8 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
{
raft_server_private_t* me = (void*)me_;
__log(me_, NULL, "periodic elapsed time: %d", me->timeout_elapsed);
switch (me->state)
{
case RAFT_STATE_FOLLOWER:
......@@ -366,9 +368,18 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
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)
{
raft_election_start(me_);
......@@ -755,6 +766,18 @@ void raft_send_appendentries(raft_server_t* me_, int node)
(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
* @param nodes Array of nodes, end of array is marked by NULL entry
......
#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);
}
......@@ -123,12 +123,12 @@ void TestRaft_server_starts_with_election_timeout_of_1000ms(CuTest * tc)
CuAssertTrue(tc, 1000 == raft_get_election_timeout(r));
}
void TestRaft_server_starts_with_request_timeout_of_500ms(CuTest * tc)
void TestRaft_server_starts_with_request_timeout_of_200ms(CuTest * tc)
{
void *r;
r = raft_new();
CuAssertTrue(tc, 500 == raft_get_request_timeout(r));
CuAssertTrue(tc, 200 == raft_get_request_timeout(r));
}
void TestRaft_server_entry_append_cant_append_if_id_is_zero(CuTest* tc)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment