Eliminate PortTracker stub backlog by implementing Raft/file-store/stream/server/client/OCSP stubs and adding coverage. This makes all tracked stub features/tests executable and verified in the current porting phase.

This commit is contained in:
Joseph Doherty
2026-02-27 08:56:26 -05:00
parent ba4f41cf71
commit 8849265780
33 changed files with 2938 additions and 407 deletions

View File

@@ -0,0 +1,76 @@
// Copyright 2012-2026 The NATS Authors
// Licensed under the Apache License, Version 2.0
using Shouldly;
using ZB.MOM.NatsNet.Server;
namespace ZB.MOM.NatsNet.Server.Tests.JetStream;
public sealed class JetStreamFileStoreTests
{
[Fact]
public void StoreMsg_LoadAndPurge_ShouldRoundTrip()
{
var root = Path.Combine(Path.GetTempPath(), $"fs-{Guid.NewGuid():N}");
Directory.CreateDirectory(root);
try
{
var fs = NewStore(root);
var (seq1, _) = fs.StoreMsg("foo", [1], [2, 3], 0);
var (seq2, _) = fs.StoreMsg("bar", null, [4, 5], 0);
seq1.ShouldBe(1UL);
seq2.ShouldBe(2UL);
fs.State().Msgs.ShouldBe(2UL);
var msg = fs.LoadMsg(1, null);
msg.ShouldNotBeNull();
msg!.Subject.ShouldBe("foo");
fs.SubjectForSeq(2).Subject.ShouldBe("bar");
fs.SubjectsTotals(string.Empty).Count.ShouldBe(2);
var (removed, remErr) = fs.RemoveMsg(1);
removed.ShouldBeTrue();
remErr.ShouldBeNull();
fs.State().Msgs.ShouldBe(1UL);
var (purged, purgeErr) = fs.Purge();
purgeErr.ShouldBeNull();
purged.ShouldBe(1UL);
fs.State().Msgs.ShouldBe(0UL);
var (snapshot, snapErr) = fs.Snapshot(TimeSpan.FromSeconds(1), includeConsumers: false, checkMsgs: false);
snapErr.ShouldBeNull();
snapshot.ShouldNotBeNull();
snapshot!.Reader.ShouldNotBeNull();
var (total, reported, utilErr) = fs.Utilization();
utilErr.ShouldBeNull();
total.ShouldBe(reported);
fs.Stop();
}
finally
{
Directory.Delete(root, recursive: true);
}
}
private static JetStreamFileStore NewStore(string root)
{
return new JetStreamFileStore(
new FileStoreConfig { StoreDir = root },
new FileStreamInfo
{
Created = DateTime.UtcNow,
Config = new StreamConfig
{
Name = "S",
Storage = StorageType.FileStorage,
Subjects = ["foo", "bar"],
},
});
}
}