88 lines
2.9 KiB
C#
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();
|
|
}
|
|
}
|