From 28115ae79c686d6a6d70dc03990a30fef37a1d73 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sat, 28 Feb 2026 22:37:09 -0500 Subject: [PATCH] test(batch28): port jetstream api object-shape and delayed-response tests --- .../ImplBacklog/JetStreamEngineTests.cs | 65 ++++++++++++++++++ porting.db | Bin 6766592 -> 6766592 bytes 2 files changed, 65 insertions(+) diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamEngineTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamEngineTests.cs index b804991..26f073f 100644 --- a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamEngineTests.cs +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamEngineTests.cs @@ -6,6 +6,71 @@ namespace ZB.MOM.NatsNet.Server.Tests.ImplBacklog; public sealed class JetStreamEngineTests { + [Fact] // T:1716 + public void IsJSONObjectOrArray_ShouldSucceed() + { + var tests = new (string Name, byte[] Data, bool Valid)[] + { + ("empty", [], false), + ("empty_object", "{}"u8.ToArray(), true), + ("empty object, not trimmed", "\t\n\r{ }"u8.ToArray(), true), + ("empty_array", "[]"u8.ToArray(), true), + ("empty array, not trimmed", "\t\n\r[ ]"u8.ToArray(), true), + ("empty_string", "\"\""u8.ToArray(), false), + ("whitespace_only", " "u8.ToArray(), false), + ("object_with_whitespace", "{ }"u8.ToArray(), true), + ("array_with_whitespace", "[ ]"u8.ToArray(), true), + ("string_with_whitespace", " \"text\""u8.ToArray(), false), + ("number", "123"u8.ToArray(), false), + ("boolean_true", "true"u8.ToArray(), false), + ("boolean_false", "false"u8.ToArray(), false), + ("null_value", "null"u8.ToArray(), false), + ("invalid_json", "invalid"u8.ToArray(), false), + }; + + foreach (var test in tests) + { + JetStreamApi.IsJSONObjectOrArray(test.Data).ShouldBe(test.Valid, test.Name); + } + } + + [Fact] // T:1719 + public void JetStreamDelayedAPIResponses_ShouldSucceed() + { + var account = new Account { Name = "ACC" }; + DelayedApiResponse? head = null; + DelayedApiResponse? tail = null; + var now = DateTime.UtcNow; + + var responses = new[] + { + NewDelayed(account, "request2", "response2", now.AddMilliseconds(500)), + NewDelayed(account, "request1", "response1", now.AddMilliseconds(200)), + NewDelayed(account, "request4", "response4", now.AddMilliseconds(800)), + NewDelayed(account, "request3", "response3", now.AddMilliseconds(650)), + }; + + foreach (var response in responses) + JetStreamApi.AddDelayedResponse(ref head, ref tail, response); + + var orderedRequests = new List(); + for (var current = head; current is not null; current = current.Next) + orderedRequests.Add(current.Request); + + orderedRequests.ShouldBe(["request1", "request2", "request3", "request4"]); + } + + private static DelayedApiResponse NewDelayed(Account account, string request, string response, DateTime deadlineUtc) => + new() + { + Account = account, + Subject = "SUB", + Reply = string.Empty, + Request = request, + Response = response, + DeadlineUtc = deadlineUtc, + }; + [Fact] // T:1477 public void JetStreamMaxConsumers_ShouldSucceed() { diff --git a/porting.db b/porting.db index 1e4d39e7f6dc105f83d42d656a4b78d38179a9a8..7ec2d0e42a7b390d099f5b2561ca5a7992d108ed 100644 GIT binary patch delta 1267 zcmciBNlX(_7zgmqbYpF&6bb^xX|3Qw?M`7-zy$>aWplv|hR#q&=zyJ;lZiB%kPvU0 zyu{cj96T5fB|*m%QO}rol^}_U;owbA9z6JO0VO8hjE7$)dEdPGmU(Y_I<1|C%u^5b z;_jShX3j$a4O-BF9t>cFJjjOvD1;&?29rAHF+bNAL?&XB<6=TIERoK3I;`Fgnf-cG zvDQxiil{RyoLODrn8qaafao*Kf_C2Yki5z;k4Wnxqf`49nYv|=B$6YBCH32P#$2v5ENOnIddAX5>9lKx_axIp+sLrR^7v(m zWsSpH0g;FR38E7ymU6}LwRpXeGr%7L>%SG6GC06nzwlh4l5p%*GaKT=v zg*w;=`{4i_gnDqpA@G0~eBg%w1R(?s5Qau*0uBzt5jYCX&;qS+435JII0d4bRqd(B))PU+>DHm0hYDtF*H4fUI%D1Pg0!dj)3?)P*p%_&1sZOXTOlq*K zJECxb@b-C2@XA<-6{jRYlp`X?Dv}%>7v0%iY?Q}?o#Yio6j-0f$BKO92FuF=8yUx9 zE>7Nj6s?W`zKFk>YEB0?^Be!jPkO%!?p*pVq;LAC*`3?jJJNxz?#oi)zjS{m*M0VS zY<4cm?#cK>G%hL%$L6}0vR5=F$_YLpO~?w%3j*5Db{$X3GRDKk#al@!j>XMe6Un`} zIW51}-{AHJ++H8+MOh&(7)rIL{aZspSw%bR`aP9wSxx`7s!-ZjsIlXySnVk)Ko%OJ L`RZ&iI#u`+^poQB delta 669 zcmX}hO-Pe*0D$qmAKPr3@7{OX>`QaY(pEWVo3pnMS83V$*1pU>%=T_r?6T5RhehBZ zI#z#(q~jwj0--~PP7wq>5p?)no~K-%(aNa3jw^GIs_{xSu0Vwb z9d3BwMIF|`2R{O+has!+;2XCu=j5GI$;l~SM0QY3%O|N|x7+Y{x{UuPR9Uiva>+J( zCzWTyT{GW$YsRec)R-3YHS>iWnlsz$wPlwf9xR$kG2NoZ0gySH*v=vQ~^@8``iPJJ5~}>_iN^up4{Oi8#8DKsWXxi4=N}Mlbfk#(o^Y zK^#IKGB}JQIEsD@;24f$5GRnuNu0uIoWWU~!+8v07#DC6mv9+ZFoLTX#Wh^V4cx>S rZebj^k%J@GiuvXbnyHtBx2q75kya(E>km^i2~q7SG|I=x!j%6HoR%AN