feat(batch28): merge jetstream-api

This commit is contained in:
Joseph Doherty
2026-02-28 22:41:44 -05:00
8 changed files with 1974 additions and 6 deletions

View File

@@ -15,6 +15,72 @@ public sealed class JetStreamEngineTests
err!.Message.ShouldContain("unavailable");
}
[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()
{