batch37 task5 implement group D consumer registry and interest state
This commit is contained in:
@@ -58,13 +58,84 @@ public sealed class NatsStreamConsumersTests
|
||||
Should.NotThrow(stream.ResetAndWaitOnConsumers);
|
||||
}
|
||||
|
||||
private static NatsStream CreateStream()
|
||||
[Fact]
|
||||
public void SetConsumer_LookupAndCounts_ReturnExpectedValues()
|
||||
{
|
||||
var stream = CreateStream();
|
||||
var standard = new NatsConsumer("S", new ConsumerConfig { Name = "c1", Direct = false }, DateTime.UtcNow);
|
||||
var direct = new NatsConsumer("S", new ConsumerConfig { Name = "c2", Direct = true }, DateTime.UtcNow);
|
||||
|
||||
stream.SetConsumer(standard);
|
||||
stream.SetConsumer(direct);
|
||||
|
||||
stream.NumConsumers().ShouldBe(2);
|
||||
stream.NumPublicConsumers().ShouldBe(1);
|
||||
stream.NumDirectConsumers().ShouldBe(1);
|
||||
stream.LookupConsumer("c2").ShouldBe(direct);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMsg_WhenStored_ReturnsStoredMessage()
|
||||
{
|
||||
var stream = CreateStream();
|
||||
stream.SetupStore(null).ShouldBeNull();
|
||||
stream.Store!.StoreMsg("events", null, [1, 2], ttl: 0);
|
||||
|
||||
var message = stream.GetMsg(1);
|
||||
|
||||
message.ShouldNotBeNull();
|
||||
message!.Subject.ShouldBe("events");
|
||||
message.Sequence.ShouldBe(1UL);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PartitionUnique_WithCollidingFilters_ReturnsFalse()
|
||||
{
|
||||
var stream = CreateStream();
|
||||
var existing = new NatsConsumer("S", new ConsumerConfig { Name = "existing", FilterSubject = "orders.*" }, DateTime.UtcNow);
|
||||
stream.SetConsumer(existing);
|
||||
|
||||
var unique = stream.PartitionUnique("new", ["orders.created"]);
|
||||
|
||||
unique.ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PotentialFilteredConsumers_WithWildcardSubjectAndConsumer_ReturnsTrue()
|
||||
{
|
||||
var stream = CreateStream(["orders.>"]);
|
||||
stream.SetConsumer(new NatsConsumer("S", new ConsumerConfig { Name = "c1" }, DateTime.UtcNow));
|
||||
|
||||
stream.PotentialFilteredConsumers().ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NoInterest_WithOnlyObservingConsumer_ReturnsTrue()
|
||||
{
|
||||
var stream = CreateStream();
|
||||
var observer = new NatsConsumer("S", new ConsumerConfig { Name = "observer" }, DateTime.UtcNow);
|
||||
stream.SetConsumer(observer);
|
||||
|
||||
stream.NoInterest(1, observer).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsInterestRetention_WhenPolicyIsInterest_ReturnsTrue()
|
||||
{
|
||||
var stream = CreateStream(retention: RetentionPolicy.InterestPolicy);
|
||||
|
||||
stream.IsInterestRetention().ShouldBeTrue();
|
||||
}
|
||||
|
||||
private static NatsStream CreateStream(string[]? subjects = null, RetentionPolicy retention = RetentionPolicy.LimitsPolicy)
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var config = new StreamConfig
|
||||
{
|
||||
Name = "S",
|
||||
Storage = StorageType.MemoryStorage,
|
||||
Subjects = subjects ?? ["events.>"],
|
||||
Retention = retention,
|
||||
};
|
||||
return new NatsStream(account, config, DateTime.UtcNow);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user