From e88f780033c8ecf1061abd29a828bef15c5813a9 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sun, 1 Mar 2026 01:55:05 -0500 Subject: [PATCH] test(batch29): add mapped raft node tests for batching behavior --- .../JetStream/RaftNodeTests.cs | 62 ++++++++++++++++++ porting.db | Bin 6791168 -> 6791168 bytes 2 files changed, 62 insertions(+) create mode 100644 dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/RaftNodeTests.cs diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/RaftNodeTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/RaftNodeTests.cs new file mode 100644 index 0000000..d1e7798 --- /dev/null +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/RaftNodeTests.cs @@ -0,0 +1,62 @@ +using Shouldly; + +namespace ZB.MOM.NatsNet.Server.Tests.JetStream; + +public sealed class RaftNodeTests +{ + [Fact] + public void NRGMultipleStopsDontPanic_ShouldSucceed() + { + var raft = InitSingleMemRaftNode(); + + Should.NotThrow(() => + { + for (var i = 0; i < 10; i++) + raft.Stop(); + }); + + raft.State().ShouldBe(RaftState.Closed); + } + + [Fact] + public void NRGKeepRunningOnServerShutdown_ShouldSucceed() + { + var raft = InitSingleMemRaftNode(); + + raft.Run(); + raft.State().ShouldBe(RaftState.Follower); + + raft.Stop(); + raft.WaitForStop(); + + raft.State().ShouldBe(RaftState.Closed); + } + + [Fact] + public void NRGInitSingleMemRaftNodeDefaults_ShouldSucceed() + { + var raft = InitSingleMemRaftNode(); + + raft.ID().ShouldBe("esFhDys3"); + raft.Peers().Count.ShouldBe(1); + raft.Peers()[0].Id.ShouldBe("esFhDys3"); + raft.ClusterSize().ShouldBe(1); + raft.Quorum().ShouldBeTrue(); + } + + private static Raft InitSingleMemRaftNode() + { + return new Raft + { + Id = "esFhDys3", + GroupName = "RG", + Csz = 1, + Qn = 1, + Peers_ = new Dictionary + { + ["esFhDys3"] = new() { Kp = true, Ts = DateTime.UtcNow }, + }, + Quit = System.Threading.Channels.Channel.CreateUnbounded(), + }; + } +} diff --git a/porting.db b/porting.db index fb85e7d5a6b1a629ee46561638d799cbeac748cd..f22041b01431f4feefffd222dbe02496d6ef6f05 100644 GIT binary patch delta 1265 zcmb8uT}%{L6bJB`J2N{w1M?xW0|j=w>sP_9t}86kwIEviX$y)Ul@{08WoI{#3ftWU z(~2zw5>g-3n80lsc7d0MCMMO`X8O=3);{=PqG;?#(!@Yw;H4U3VqzbR{kv^aOn7J? ze#yzb=bU?Pa_`{fJU0jzrULAf;pxEWbbti{9Pl8314M9w1TqvsF(~$QK>chlul}U{ zZu@4BOc&X+*YvxDUOKI=)>MUalYT4RmFTkK(sldi)2hU3+Va(+7W>{A_1p}RBXp=i zs~~ck<{Graa%bc_vmrB6E989KFHE2pO<-NQ?BjB1~k^mf8lQAe@WsgkyhyZ+g~(P!*hzVGQbc5I+m4Bkzfe>FrpHEFD(=O&&>8l9go zpbX04IjDe2r~)^5;Cb+Z57xk1SO@E21H1s$Py-v`MexHW*bD*K0zudcwNM8ksE2LP z053rpw!_QN2u-j9nqepGf>&TSyb7+lA=32(t3cpKh<7HEaNun*c`KOBIAa0uRo z!_W@z!TZnwM<4=6?fD7QSId3RJhp{d^ARhK@csO6d_VP;5W}vxWp)s%TY3$hylr~v zuwP$Kq-*xVZL_jSbksACiONuQ&U{cJc4!ZzloXQ=Xm_<=9H!Vp)p>IZakSY@^X4O- zXBei6h8N6rM9x!l!Msnsy?P}Z8SP#)Aqp|*gg97s_hRCU8LpIcQ}JxlT`b%bn)$D} z`<$P2+tHX7CS^lSxld)rN8BgeLp8O1Jzd$OSu2yJAC3?=9UMq_h0aX4HbgIvCoK=2 zRuBcBtWc1_*YSN9_tU8n!qcVA3HfQ^*5IL)HzvY7(zg||-GyV6 z+<^3Su2$E{f5*z;-WPxD4AZ&cq|hb`f1AVIL64l+c^Pk^~K+o<$d3{NUkzd3bN$uE|kj7d#HS zn6;~8uE3a!0TztFfeCmJzziZpfCa1|(J_~Ny^>Qt$uDW*bVaH_v!*L-0tw|YrQ}JU z9IYsl(aCoB+gh4h{60%Leb*<8j3WO(6<^b@{qo>AD@>4Xk78#nBDw8RY9oC9CVyL- z-^c!-zdefSmEC8mF-TveS!qgoD&3QAN4KCar42b$8*5d`0Mi^hRHmxT_)xui z`PoPHmYE5WV4h+lJ)#=Vh40b_qFTo?GU2W28dEYXsp-b>I73ojEXL0o?q9sr?q!zD zqA`XIM~i5lHAIAyFcA<|REUHqh=z4kScysVk*IULlN5f?1TxvKDa2c+<&$p>u`+#F zr!B>i?taZp-n47Qq_sCwp$Q#YehNvNGX3iW?`V-^a0KgcCon&vK`hu{J=h@*9N>g_ z*Z>KT2uZLJl3^31Kq{m`I&6k5kO7&n6c7b_e1D!zozA?A?2EGx@mtLPQ0mCwq1UMJQ$J&P91>8sq|=OMWZdNOhNRhgV$ y(C0~4hMFGeT-4zVc;PJgz)w3Dn|jBMGVdkAK(mwFedKGTS!#C3M7_h!qv9VMoqG%b