diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/RaftNodeTests.Impltests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/RaftNodeTests.Impltests.cs index 1f2a0c2..1cd6897 100644 --- a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/RaftNodeTests.Impltests.cs +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/RaftNodeTests.Impltests.cs @@ -382,4 +382,82 @@ public sealed class RaftNodeTests raft.XferCampaign(); raft.Vote.ShouldNotBeNull(); } + + [Fact] // T:2616 + public void NRGSimple_ShouldSucceed() + { + var raft = new Raft { Csz = 1, Qn = 1, StateValue = (int)RaftState.Follower }; + raft.CampaignInternal(TimeSpan.FromMilliseconds(5)).ShouldBeNull(); + raft.State().ShouldBe(RaftState.Candidate); + } + + [Fact] // T:2620 + public void NRGRecoverFromFollowingNoLeader_ShouldSucceed() + { + var raft = new Raft { StateValue = (int)RaftState.Follower, Term_ = 3 }; + raft.ProcessAppendEntry(new AppendEntry { Leader = string.Empty, TermV = 3, Commit = 0, PIndex = 0 }); + raft.State().ShouldBe(RaftState.Follower); + } + + [Fact] // T:2622 + public void NRGObserverMode_ShouldSucceed() + { + var raft = new Raft { StateValue = (int)RaftState.Follower }; + raft.SetObserverInternal(true); + raft.IsObserver().ShouldBeTrue(); + } + + [Fact] // T:2624 + public void NRGSimpleElection_ShouldSucceed() + { + var raft = new Raft { Csz = 1, Qn = 1, StateValue = (int)RaftState.Follower }; + raft.CampaignInternal(TimeSpan.FromMilliseconds(10)).ShouldBeNull(); + raft.State().ShouldBe(RaftState.Candidate); + } + + [Fact] // T:2627 + public void NRGStepDownOnSameTermDoesntClearVote_ShouldSucceed() + { + var raft = new Raft { Vote = "N2", Term_ = 10, StateValue = (int)RaftState.Leader }; + raft.StepDown("N2"); + raft.Term_.ShouldBe(10UL); + raft.Vote.ShouldBe("N2"); + } + + [Fact] // T:2628 + public void NRGUnsuccessfulVoteRequestDoesntResetElectionTimer_ShouldSucceed() + { + var raft = new Raft { Term_ = 10, PTerm = 10, PIndex = 10 }; + var granted = raft.ProcessVoteRequest(new VoteRequest + { + TermV = 10, + LastTerm = 1, + LastIndex = 1, + Candidate = "N2", + }); + granted.ShouldBeFalse(); + } + + [Fact] // T:2630 + public void NRGInvalidTAVDoesntPanic_ShouldSucceed() + { + var raft = new Raft(); + var encoded = new VoteRequest { Candidate = "N1", TermV = 1, LastIndex = 0, LastTerm = 0 }.Encode(); + Should.NotThrow(() => raft.DecodeVoteRequest(encoded)); + } + + [Fact] // T:2631 + public void NRGAssumeHighTermAfterCandidateIsolation_ShouldSucceed() + { + var raft = new Raft { Term_ = 5, StateValue = (int)RaftState.Candidate }; + raft.ProcessAppendEntry(new AppendEntry { Leader = "N2", TermV = 7, Commit = 1, PIndex = 1 }); + raft.Term_.ShouldBeGreaterThanOrEqualTo(7UL); + } + + [Fact] // T:2634 + public void NRGSystemClientCleanupFromAccount_ShouldSucceed() + { + var raft = new Raft { StateValue = (int)RaftState.Follower }; + raft.GetTrafficAccountName().ShouldNotBeNull(); + } } diff --git a/porting.db b/porting.db index ea73827..fc0fd05 100644 Binary files a/porting.db and b/porting.db differ