Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
resetius committed Nov 23, 2023
1 parent 960abd0 commit aed0404
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 7 deletions.
8 changes: 3 additions & 5 deletions src/raft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ TRaft::TRaft(int node, const TNodeDict& nodes, const std::shared_ptr<ITimeSource
, MinVotes((nodes.size()+1/2))
, Npeers(nodes.size())
, Nservers(nodes.size()+1)
, StateFunc([&](uint64_t now, const TMessageHolder<TMessage> &message) {
return Follower(now, message);
})
, StateName(EState::FOLLOWER)
, LastTime(TimeSource->now())
{ }

Expand Down Expand Up @@ -52,7 +50,7 @@ void TRaft::ApplyResult(uint64_t now, std::unique_ptr<TResult> result, INode* re
Nodes[m->Dst]->Send(m);
}
}
if (result->NextStateFunc) {
StateFunc = result->NextStateFunc;
if (result->NextStateName) {
StateName = static_cast<EState>(result->NextStateName);
}
}
14 changes: 12 additions & 2 deletions src/raft.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,18 @@ struct TVolatileState {

struct TResult;

enum class EState: int {
CANDIDATE = 1,
FOLLOWER = 2,
LEADER = 3,
};

using TStateFunc = std::function<std::unique_ptr<TResult>(uint64_t now, const TMessageHolder<TMessage>& message)>;

struct TResult {
std::unique_ptr<TState> NextState;
std::unique_ptr<TVolatileState> NextVolatileState;
TStateFunc NextStateFunc;
int NextStateName;
bool UpdateLastTime;
TMessageHolder<TMessage> Message;
std::vector<TMessageHolder<TAppendEntriesRequest>> Messages;
Expand All @@ -84,6 +90,10 @@ class TRaft {
void Process(const TMessageHolder<TMessage>& message, INode* replyTo = nullptr);
void ApplyResult(uint64_t now, std::unique_ptr<TResult> result, INode* replyTo = nullptr);

EState CurrentStateName() const {
return StateName;
}

private:
std::unique_ptr<TResult> Follower(uint64_t now, const TMessageHolder<TMessage>& message);

Expand All @@ -96,6 +106,6 @@ class TRaft {
std::unique_ptr<TState> State;
std::unique_ptr<TVolatileState> VolatileState;

TStateFunc StateFunc;
EState StateName;
uint64_t LastTime;
};
1 change: 1 addition & 0 deletions test/test_raft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ void test_message_send_recv(void** state) {

void test_initial(void**) {
auto raft = MakeRaft();
assert_true(raft->CurrentStateName() == EState::FOLLOWER);
}

int main() {
Expand Down

0 comments on commit aed0404

Please sign in to comment.