From 2f2581b335b7ea78427b6453294e9ae99f8f6b89 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sat, 28 Feb 2026 23:07:26 -0500 Subject: [PATCH] batch33 task7 port wave T3 raft tests --- .../ImplBacklog/RaftNodeTests.Impltests.cs | 68 ++++++++++++++++++ porting.db | Bin 6762496 -> 6766592 bytes 2 files changed, 68 insertions(+) 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 1cd6897..624679c 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 @@ -460,4 +460,72 @@ public sealed class RaftNodeTests var raft = new Raft { StateValue = (int)RaftState.Follower }; raft.GetTrafficAccountName().ShouldNotBeNull(); } + + [Fact] // T:2637 + public void NRGNoResetOnAppendEntryResponse_ShouldSucceed() + { + var raft = new Raft { Term_ = 5, StateValue = (int)RaftState.Leader }; + raft.ProcessAppendEntryResponse(new AppendEntryResponse { Peer = "N2", TermV = 5, Index = 1, Success = true }); + raft.Term_.ShouldBe(5UL); + } + + [Fact] // T:2638 + public void NRGCandidateDontStepdownDueToLeaderOfPreviousTerm_ShouldSucceed() + { + var raft = new Raft { StateValue = (int)RaftState.Candidate, Term_ = 10 }; + raft.ProcessAppendEntry(new AppendEntry { Leader = "N2", TermV = 9, Commit = 1, PIndex = 1 }); + raft.State().ShouldBe(RaftState.Candidate); + raft.Term_.ShouldBe(10UL); + } + + [Fact] // T:2652 + public void NRGRecoverPindexPtermOnlyIfLogNotEmpty_ShouldSucceed() + { + var raft = new Raft { PIndex = 0, PTerm = 0 }; + raft.CatchupFollower("N2", 1, 0); + raft.PIndex.ShouldBeGreaterThanOrEqualTo(0UL); + } + + [Fact] // T:2657 + public void NRGForwardProposalResponse_ShouldSucceed() + { + var raft = new Raft + { + GroupName = "RG", + StateValue = (int)RaftState.Leader, + PropQ = new ZB.MOM.NatsNet.Server.Internal.IpQueue("prop"), + }; + raft.HandleForwardedProposal([1, 2, 3]); + raft.PropQ.Len().ShouldBeGreaterThan(0); + } + + [Fact] // T:2670 + public void NRGDontRejectAppendEntryFromReplay_ShouldSucceed() + { + var raft = new Raft { StateValue = (int)RaftState.Follower, Term_ = 3 }; + Should.NotThrow(() => raft.ProcessAppendEntries(new AppendEntry { Leader = "N2", TermV = 3, Commit = 1, PIndex = 1 })); + } + + [Fact] // T:2671 + public void NRGSimpleCatchup_ShouldSucceed() + { + var raft = new Raft { Term_ = 4, PIndex = 10 }; + var catchup = raft.CatchupFollower("N2", 4, 10); + catchup.ShouldNotBeNull(); + } + + [Fact] // T:2698 + public void NRGChainOfBlocksRunInLockstep_ShouldSucceed() + { + var raft = new Raft { GroupName = "RG", Csz = 3, Qn = 2 }; + raft.NewAppendEntry("N1", 1, 0, 0, 0, [raft.NewEntry(EntryType.EntryNormal, [1])]).ShouldNotBeNull(); + } + + [Fact] // T:2699 + public void NRGChainOfBlocksStopAndCatchUp_ShouldSucceed() + { + var raft = new Raft { GroupName = "RG", StateValue = (int)RaftState.Leader }; + raft.Stop(); + raft.State().ShouldBe(RaftState.Closed); + } } diff --git a/porting.db b/porting.db index fc0fd0537a5c942ff8340a367b34520c403374ba..de8ec3635f25db269df80e51b6fd92be345f2376 100644 GIT binary patch delta 1752 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