Files
natsnet/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamClusterTests3.Impltests.cs
2026-02-28 22:30:41 -05:00

88 lines
2.9 KiB
C#

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<bool>();
(state.Cluster as JetStreamCluster)!.Stopped = System.Threading.Channels.Channel.CreateUnbounded<bool>();
engine.ClusterQuitC().ShouldNotBeNull();
engine.ClusterStoppedC().ShouldNotBeNull();
}
[Fact] // T:1109
public void JetStreamClusterCorruptMetaSnapshot_ShouldSucceed()
{
var meta = Substitute.For<IRaftNode>();
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<string, Dictionary<string, StreamAssignment>>
{
["A"] = new Dictionary<string, StreamAssignment>
{
["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();
}
}