51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
using Shouldly;
|
|
using ZB.MOM.NatsNet.Server;
|
|
|
|
namespace ZB.MOM.NatsNet.Server.Tests.ImplBacklog;
|
|
|
|
public sealed partial class ConcurrencyTests1
|
|
{
|
|
[Fact]
|
|
public void NoRaceJetStreamDeleteStreamManyConsumers_ShouldSucceed()
|
|
{
|
|
var cluster = new JetStreamCluster();
|
|
var account = "A";
|
|
var stream = "S";
|
|
|
|
for (var i = 0; i < 250; i++)
|
|
{
|
|
var assignment = new ConsumerAssignment { Name = $"C{i}", Stream = stream };
|
|
cluster.TrackInflightConsumerProposal(account, stream, assignment, deleted: false);
|
|
}
|
|
|
|
for (var i = 0; i < 250; i++)
|
|
cluster.RemoveInflightConsumerProposal(account, stream, $"C{i}");
|
|
|
|
cluster.InflightConsumers.ContainsKey(account).ShouldBeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void NoRaceJetStreamAPIConsumerListPaging_ShouldSucceed()
|
|
{
|
|
var cluster = new JetStreamCluster();
|
|
var account = "A";
|
|
var stream = "S";
|
|
|
|
for (var i = 0; i < 120; i++)
|
|
{
|
|
cluster.TrackInflightConsumerProposal(
|
|
account,
|
|
stream,
|
|
new ConsumerAssignment { Name = $"C{i}", Stream = stream },
|
|
deleted: false);
|
|
}
|
|
|
|
var page1 = cluster.InflightConsumers[account][stream].Keys.OrderBy(static k => k).Take(50).ToArray();
|
|
var page2 = cluster.InflightConsumers[account][stream].Keys.OrderBy(static k => k).Skip(50).Take(50).ToArray();
|
|
|
|
page1.Length.ShouldBe(50);
|
|
page2.Length.ShouldBe(50);
|
|
page1.Intersect(page2).ShouldBeEmpty();
|
|
}
|
|
}
|