test(batch28): port jetstream api object-shape and delayed-response tests

This commit is contained in:
Joseph Doherty
2026-02-28 22:37:09 -05:00
parent d6754eae25
commit 28115ae79c
2 changed files with 65 additions and 0 deletions

View File

@@ -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<string>();
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()
{

Binary file not shown.