using NSubstitute; using Shouldly; using ZB.MOM.NatsNet.Server; namespace ZB.MOM.NatsNet.Server.Tests.ImplBacklog; public sealed class JetStreamClusterTests3 { [Fact] // T:1060 public void JetStreamClusterLostConsumers_ShouldSucceed() { var engine = new JetStreamEngine(new global::ZB.MOM.NatsNet.Server.JetStream { Cluster = new JetStreamCluster(), }); engine.IsConsumerHealthy(null, "C1", new ConsumerAssignment()).ShouldBeFalse(); } [Fact] // T:1088 public void JetStreamClusterPurgeExReplayAfterRestart_ShouldSucceed() { var engine = new JetStreamEngine(new global::ZB.MOM.NatsNet.Server.JetStream { Cluster = new JetStreamCluster() }); engine.SubjectsOverlap("A", ["foo.*"], null).ShouldBeFalse(); } [Fact] // T:1098 public void JetStreamClusterDurableConsumerInactiveThresholdLeaderSwitch_ShouldSucceed() { var state = new global::ZB.MOM.NatsNet.Server.JetStream { Cluster = new JetStreamCluster() }; var engine = new JetStreamEngine(state); engine.SetMetaRecovering(); engine.IsMetaRecovering().ShouldBeTrue(); engine.ClearMetaRecovering(); engine.IsMetaRecovering().ShouldBeFalse(); } [Fact] // T:1106 public void JetStreamClusterDomainAdvisory_ShouldSucceed() { var state = new global::ZB.MOM.NatsNet.Server.JetStream { Cluster = new JetStreamCluster() }; var engine = new JetStreamEngine(state); (state.Cluster as JetStreamCluster)!.Qch = System.Threading.Channels.Channel.CreateUnbounded(); (state.Cluster as JetStreamCluster)!.Stopped = System.Threading.Channels.Channel.CreateUnbounded(); engine.ClusterQuitC().ShouldNotBeNull(); engine.ClusterStoppedC().ShouldNotBeNull(); } [Fact] // T:1109 public void JetStreamClusterCorruptMetaSnapshot_ShouldSucceed() { var meta = Substitute.For(); meta.Leaderless().Returns(true); var engine = new JetStreamEngine(new global::ZB.MOM.NatsNet.Server.JetStream { Cluster = new JetStreamCluster { Meta = meta }, }); engine.IsLeaderless().ShouldBeTrue(); } [Fact] // T:1122 public void JetStreamClusterConcurrentStreamUpdate_ShouldSucceed() { var cluster = new JetStreamCluster { Streams = new Dictionary> { ["A"] = new Dictionary { ["S1"] = new() { Config = new StreamConfig { Name = "S1", Subjects = ["orders.*"] }, }, }, }, }; var state = new global::ZB.MOM.NatsNet.Server.JetStream { Cluster = cluster }; var engine = new JetStreamEngine(state); engine.SubjectsOverlap("A", ["orders.created"]).ShouldBeTrue(); } }