task3: implement batch38 group B lifecycle and advisories
This commit is contained in:
@@ -212,4 +212,88 @@ public sealed class NatsConsumerTests
|
||||
consumer!.SetConsumerAssignment(assignment);
|
||||
consumer.ConsumerAssignment().ShouldBeSameAs(assignment);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task MonitorQuitC_AndSignalMonitorQuit_ShouldPublishQuitSignal()
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var streamCfg = new StreamConfig { Name = "S", Subjects = ["foo"] };
|
||||
var stream = NatsStream.Create(account, streamCfg, null, null, null, null);
|
||||
stream.ShouldNotBeNull();
|
||||
|
||||
var consumer = NatsConsumer.Create(stream!, new ConsumerConfig { Durable = "D" }, ConsumerAction.Create, null);
|
||||
consumer.ShouldNotBeNull();
|
||||
|
||||
var monitor = consumer!.MonitorQuitC();
|
||||
monitor.ShouldNotBeNull();
|
||||
monitor!.TryRead(out _).ShouldBeFalse();
|
||||
|
||||
consumer.SignalMonitorQuit();
|
||||
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
|
||||
var signal = await monitor.ReadAsync(cts.Token);
|
||||
signal.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SubscribeInternal_Unsubscribe_AndHasDeliveryInterest_ShouldTrackState()
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var streamCfg = new StreamConfig { Name = "S", Subjects = ["foo"] };
|
||||
var stream = NatsStream.Create(account, streamCfg, null, null, null, null);
|
||||
stream.ShouldNotBeNull();
|
||||
|
||||
var consumer = NatsConsumer.Create(
|
||||
stream!,
|
||||
new ConsumerConfig { Durable = "D", DeliverSubject = "deliver.foo" },
|
||||
ConsumerAction.Create,
|
||||
null);
|
||||
consumer.ShouldNotBeNull();
|
||||
|
||||
consumer!.HasDeliveryInterest().ShouldBeFalse();
|
||||
consumer.SubscribeInternal("deliver.foo").ShouldBeTrue();
|
||||
consumer.CheckQueueInterest("deliver.foo").ShouldBeTrue();
|
||||
consumer.HasDeliveryInterest().ShouldBeTrue();
|
||||
consumer.Unsubscribe("deliver.foo").ShouldBeTrue();
|
||||
consumer.HasDeliveryInterest().ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvisoryHelpers_AndCreatedTime_ShouldBehave()
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var streamCfg = new StreamConfig { Name = "S", Subjects = ["foo"] };
|
||||
var stream = NatsStream.Create(account, streamCfg, null, null, null, null);
|
||||
stream.ShouldNotBeNull();
|
||||
|
||||
var consumer = NatsConsumer.Create(stream!, new ConsumerConfig { Durable = "D" }, ConsumerAction.Create, null);
|
||||
consumer.ShouldNotBeNull();
|
||||
|
||||
consumer!.SendCreateAdvisory().ShouldBeTrue();
|
||||
consumer.SendDeleteAdvisoryLocked().ShouldBeTrue();
|
||||
consumer.SendPinnedAdvisoryLocked("pin-1").ShouldBeTrue();
|
||||
consumer.SendUnpinnedAdvisoryLocked("pin-1").ShouldBeTrue();
|
||||
consumer.SendPauseAdvisoryLocked(DateTime.UtcNow.AddMinutes(1)).ShouldBeTrue();
|
||||
|
||||
var created = DateTime.UtcNow.AddHours(-1);
|
||||
consumer.SetCreatedTime(created);
|
||||
consumer.CreatedTime().ShouldBe(created);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HandleClusterConsumerInfoRequest_WhenLeader_ReturnsInfo()
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var streamCfg = new StreamConfig { Name = "S", Subjects = ["foo"] };
|
||||
var stream = NatsStream.Create(account, streamCfg, null, null, null, null);
|
||||
stream.ShouldNotBeNull();
|
||||
|
||||
var consumer = NatsConsumer.Create(stream!, new ConsumerConfig { Durable = "D" }, ConsumerAction.Create, null);
|
||||
consumer.ShouldNotBeNull();
|
||||
|
||||
consumer!.HandleClusterConsumerInfoRequest().ShouldBeNull();
|
||||
consumer.SetLeader(true, 1);
|
||||
consumer.IsLeaderInternal().ShouldBeTrue();
|
||||
consumer.HandleClusterConsumerInfoRequest().ShouldNotBeNull();
|
||||
consumer.ClearNode();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user