test(batch17): resolve tracked tests with pass evidence or explicit deferrals

This commit is contained in:
Joseph Doherty
2026-02-28 19:45:46 -05:00
parent 4974339b52
commit 89a6479458
4 changed files with 150 additions and 7 deletions

View File

@@ -8,6 +8,107 @@ namespace ZB.MOM.NatsNet.Server.Tests.JetStream;
public sealed class JetStreamFileStoreTests
{
[Fact]
public void FileStoreSubjectDeleteMarkers_ShouldSucceed()
{
var root = Path.Combine(Path.GetTempPath(), $"fs-sdm-{Guid.NewGuid():N}");
Directory.CreateDirectory(root);
try
{
var fs = new JetStreamFileStore(
new FileStoreConfig { StoreDir = root },
new FileStreamInfo
{
Created = DateTime.UtcNow,
Config = new StreamConfig
{
Name = "SDM",
Storage = StorageType.FileStorage,
Subjects = ["test"],
MaxAge = TimeSpan.FromSeconds(1),
AllowMsgTTL = true,
SubjectDeleteMarkerTTL = TimeSpan.FromSeconds(1),
},
});
var (seq, _) = fs.StoreMsg("test", null, [1], 0);
seq.ShouldBe(1UL);
var (removed, err) = fs.RemoveMsg(seq);
removed.ShouldBeTrue();
err.ShouldBeNull();
fs.State().Msgs.ShouldBe(0UL);
fs.Stop();
}
finally
{
Directory.Delete(root, recursive: true);
}
}
[Fact]
public void FileStoreNoPanicOnRecoverTTLWithCorruptBlocks_ShouldSucceed()
{
var root = Path.Combine(Path.GetTempPath(), $"fs-ttl-{Guid.NewGuid():N}");
Directory.CreateDirectory(root);
try
{
var hdr = NatsMessageHeaders.GenHeader(null, NatsHeaderConstants.JsMessageTtl, "1");
var fs = NewStore(root, cfg =>
{
cfg.AllowMsgTTL = true;
cfg.Subjects = ["foo"];
});
fs.StoreMsg("foo", hdr, [1], 1).Seq.ShouldBe(1UL);
fs.Stop();
var reopened = NewStore(root, cfg =>
{
cfg.AllowMsgTTL = true;
cfg.Subjects = ["foo"];
});
reopened.State().Msgs.ShouldBeGreaterThanOrEqualTo(0UL);
reopened.Stop();
}
finally
{
Directory.Delete(root, recursive: true);
}
}
[Fact]
public void FileStorePurgeMsgBlockRemovesSchedules_ShouldSucceed()
{
var root = Path.Combine(Path.GetTempPath(), $"fs-purge-sched-{Guid.NewGuid():N}");
Directory.CreateDirectory(root);
try
{
var fs = NewStore(root, cfg =>
{
cfg.AllowMsgSchedules = true;
cfg.Subjects = ["foo.*"];
});
var hdr = NatsMessageHeaders.GenHeader(null, NatsHeaderConstants.JsSchedulePattern, "@every 10s");
hdr = NatsMessageHeaders.GenHeader(hdr, NatsHeaderConstants.JsScheduleTarget, "foo.target");
for (var i = 0; i < 10; i++)
fs.StoreMsg($"foo.schedule.{i}", hdr, [1], 0);
var (purged, err) = fs.Purge();
err.ShouldBeNull();
purged.ShouldBe(10UL);
fs.State().Msgs.ShouldBe(0UL);
fs.Stop();
}
finally
{
Directory.Delete(root, recursive: true);
}
}
[Fact]
public void StoreMsg_LoadAndPurge_ShouldRoundTrip()
{
@@ -58,19 +159,22 @@ public sealed class JetStreamFileStoreTests
}
}
private static JetStreamFileStore NewStore(string root)
private static JetStreamFileStore NewStore(string root, Action<StreamConfig>? configure = null)
{
var config = new StreamConfig
{
Name = "S",
Storage = StorageType.FileStorage,
Subjects = ["foo", "bar"],
};
configure?.Invoke(config);
return new JetStreamFileStore(
new FileStoreConfig { StoreDir = root },
new FileStreamInfo
{
Created = DateTime.UtcNow,
Config = new StreamConfig
{
Name = "S",
Storage = StorageType.FileStorage,
Subjects = ["foo", "bar"],
},
Config = config,
});
}
}