From cbc6ff714479d0cb06b081a6806f8f0421494b85 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sat, 28 Feb 2026 23:05:22 -0500 Subject: [PATCH] batch33 task6 port wave T2 raft tests --- .../ImplBacklog/RaftNodeTests.Impltests.cs | 78 ++++++++++++++++++ porting.db | Bin 6762496 -> 6762496 bytes 2 files changed, 78 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 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 ea7382706cddc6e2ebb2de50d570756e40f4d962..fc0fd0537a5c942ff8340a367b34520c403374ba 100644 GIT binary patch delta 2011 zcmb8vTTC2P7zgl~*@Ybjc6Xq#To;Bi+;0mD6p`Xm7N|(e7AaJ1Wx4EP18G_=wzRgP zby}!an^g2m6cw}&?SslgbrRE9e5)p6V@j~W0Bx{ssEOKGZ_(8MZs{syBjMqfd}sDM z|8vfq$qvkqXa-<>G?#t%#j)JMv0N57(0~>KAP{uGLl6iM3?ZNggF2RLY`da;O*6@m zW0Z?!b3QH-Gg-Bc6{kY9#!^R zq!Oh>D=|u}5~rAzcqQS2bnz;kNeDKRZQ7)x`KwYBIWo0@!38Cjf)Z=dQP=P$y53|8 zr=PZ)czS(Gic}9xNqUa<&6#9RzepFSr2_9H-O?oW?`bK8rPjE_B-*>*BvRuw$-2Db zjcZZ`Itr4K$Z^mVMur)we0j&t8R;vI>d&wDW`xqNSt)B-2bEb&Zw=V!X+U;p;{v9bjq4be>(^WL$1;ZP59@x8jiBch zIg#9oJo4ad(&cTTBr0+Qy`#ucbhaxd)w_P=(kb~#=Fc!>H6g3XGk^TJyqhM@CntCg z9ZFkH$add`^GotJs9&Fu@3VWZBC4Tg=RV5+Z1JNZ#*TS)`$paxzU0$%AzFQ~S~t;90G2H=dhS zCtjA*IXz?aBsF6%%^XXk$K`(N{wR6ro%@dP@N+m8I9yA2UXc$E_MMg?8B!n>(jXl& zAQQ468*(5QERYBJV1)uGgd*4g#qbD}z@tzK8=(vy0~?gXCa3^AR6-S0!)ACKYTyZ| zg)OiZ>c9cppdOxt2G|ab&;&c+DR>&5ft|1mo`q($@3ixjLn}C#TNE(w?2!3h-MH>O z-mM$vcW_mF4Obj=jxXhNg5Km8gdr}2ixUp2N9LVXEWLWeX;A}jIMV{@%T6(!wNZSR z7)#Y%qJb@@&-REhG;-UynO?ZrqNgu9MT2_(wzGj{GpJ$FnL=4p&Ja$hp$|LJczL14 zNapWb41<>zozMcU&<5?`QZFsKD+@JdW`T54N4glG)edO>(j4G^;r6mWu+NcXNjMvQ zlzBTLh)LwkbrEgWzCF8pn|tx`^;+{)ScTzgU!tNG#ujKtL-;!UHZLwxs z@+AB-SUevzQsVuk(C5FoGiYKT$FCvD>^G_W=hpmxLyA`0PMp6G`-(%YniA_TrDClq zG5%6)YfXvvmr}MOWz}nn@|QwmY+DWu#I$JF@P;G(B^9sOkNJP^NgYb=I3WB31l*z6 delta 1232 zcmY+@TTB#J7zgk(XJ*+8?AdW$c7d`ulmQmCB3*3NVnvV@dy$nQ+KY5R7Ak2POD|Yk z8%!rGf<Yn6M{qTh=K9kVR- z*4ytixdxDOlIbjxFPY9b<#e7%&P&!Of2wtIn)0n@fw>Y}N`rOluFCCc4ui3KTef57 zD${GOHhpHg={EyrhM8$*nU9#+X3)$r*PPeJC+K2jW*!~s@UNof32oQ8kSyd_e+A9& z_xoshpWi{BPHF+`{YlNuX>?o!seIaRr@0ADrSWO4G|^!FJFVqQ#0TujNh;M})xyaF zUDYZiYWhdyQS_MKOJYXbL7i^D$7-0-e&XbPE#={X2WPeQi9XuC(LWe3xvoJjJZhC( z&$}|5ZW~~!JcBDOa=mljahYe>f3*!;{!Trr(C4N;M75*d`$rI_9-tXh&!8_}&nk7K ze8wDJCNaA6vHl*tIj@E3c$Z#zURsUHX3# zechwS>Ed6x_osLF==pT2S1(MScDY+`A%0fNqs}3`Wba9RYjUvr5BB$JJhTG?JGd0A zEIg6Q!eIwp>(v*m?|Stj&Lub9?bDCnJNej2e1@-1>(z;NnK3DTyHAIFD1br;K@qHl zb+8^DgAGs&8=(XqhcJ}FCU^p#gw3!8w!%|T2HW6i*be2e11g{rc0v_IU>8)wZg>Ws zh3DXT*aI~Xg}qPEx2jE3`30{U*;2<=>tJdv4!@XB=Y+$own=@Ly_A&dY zy`M+;X6KjALB5t}TW98sh(sUUFe