Move 225 JetStream-related test files from NATS.Server.Tests into a dedicated NATS.Server.JetStream.Tests project. This includes root-level JetStream*.cs files, storage test files (FileStore, MemStore, StreamStoreContract), and the full JetStream/ subfolder tree (Api, Cluster, Consumers, MirrorSource, Snapshots, Storage, Streams). Updated all namespaces, added InternalsVisibleTo, registered in the solution file, and added the JETSTREAM_INTEGRATION_MATRIX define.
32 lines
1.2 KiB
C#
32 lines
1.2 KiB
C#
using NATS.Server.JetStream;
|
|
using NATS.Server.JetStream.Models;
|
|
using NATS.Server.JetStream.Publish;
|
|
|
|
namespace NATS.Server.JetStream.Tests;
|
|
|
|
public class JetStreamDedupeWindowParityTests
|
|
{
|
|
[Fact]
|
|
public async Task Dedupe_window_expires_entries_and_allows_republish_after_window_boundary()
|
|
{
|
|
var streamManager = new StreamManager();
|
|
streamManager.CreateOrUpdate(new StreamConfig
|
|
{
|
|
Name = "D",
|
|
Subjects = ["d.*"],
|
|
DuplicateWindowMs = 25,
|
|
}).Error.ShouldBeNull();
|
|
|
|
var publisher = new JetStreamPublisher(streamManager);
|
|
publisher.TryCaptureWithOptions("d.1", "one"u8.ToArray(), new PublishOptions { MsgId = "m-1" }, out var first).ShouldBeTrue();
|
|
publisher.TryCaptureWithOptions("d.1", "dup"u8.ToArray(), new PublishOptions { MsgId = "m-1" }, out var second).ShouldBeTrue();
|
|
second.Seq.ShouldBe(first.Seq);
|
|
|
|
await Task.Delay(40);
|
|
|
|
publisher.TryCaptureWithOptions("d.1", "after-window"u8.ToArray(), new PublishOptions { MsgId = "m-1" }, out var third).ShouldBeTrue();
|
|
third.ErrorCode.ShouldBeNull();
|
|
third.Seq.ShouldBeGreaterThan(first.Seq);
|
|
}
|
|
}
|