batch36 task2 implement group-a lifecycle primitives
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
// Licensed under the Apache License, Version 2.0
|
||||
|
||||
using Shouldly;
|
||||
using NSubstitute;
|
||||
using ZB.MOM.NatsNet.Server;
|
||||
|
||||
namespace ZB.MOM.NatsNet.Server.Tests.JetStream;
|
||||
@@ -40,4 +41,58 @@ public sealed class NatsStreamTests
|
||||
stream.Delete();
|
||||
stream.IsLeader().ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LifecyclePrimitives_AssignmentAndChannels_ShouldBehave()
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var stream = NatsStream.Create(
|
||||
account,
|
||||
new StreamConfig { Name = "ORDERS", Subjects = ["orders.*"], Storage = StorageType.MemoryStorage },
|
||||
null,
|
||||
new JetStreamMemStore(new StreamConfig { Name = "ORDERS", Subjects = ["orders.*"], Storage = StorageType.MemoryStorage }),
|
||||
null,
|
||||
null)!;
|
||||
|
||||
stream.AccountLocked(true).ShouldBe(account);
|
||||
stream.StreamAssignment().ShouldBeNull();
|
||||
|
||||
var assignment = new StreamAssignment { Sync = "sync.inbox" };
|
||||
stream.SetStreamAssignment(assignment);
|
||||
stream.StreamAssignment().ShouldBe(assignment);
|
||||
|
||||
stream.UpdateC().TryRead(out var updateSignal).ShouldBeTrue();
|
||||
updateSignal.ShouldBeTrue();
|
||||
|
||||
stream.StartClusterSubs();
|
||||
stream.ClusterSubsActive().ShouldBeTrue();
|
||||
stream.StopClusterSubs();
|
||||
stream.ClusterSubsActive().ShouldBeFalse();
|
||||
|
||||
var monitor = stream.MonitorQuitC();
|
||||
monitor.ShouldNotBeNull();
|
||||
stream.SignalMonitorQuit();
|
||||
stream.MonitorQuitC().ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsLeaderInternal_WhenAssignedToRaftNode_UsesNodeLeaderState()
|
||||
{
|
||||
var account = new Account { Name = "A" };
|
||||
var stream = NatsStream.Create(
|
||||
account,
|
||||
new StreamConfig { Name = "ORDERS", Subjects = ["orders.*"], Storage = StorageType.MemoryStorage },
|
||||
null,
|
||||
new JetStreamMemStore(new StreamConfig { Name = "ORDERS", Subjects = ["orders.*"], Storage = StorageType.MemoryStorage }),
|
||||
null,
|
||||
null)!;
|
||||
|
||||
var raftNode = Substitute.For<IRaftNode>();
|
||||
raftNode.Leader().Returns(false);
|
||||
var assignment = new StreamAssignment { Group = new RaftGroup { Node = raftNode } };
|
||||
|
||||
stream.SetStreamAssignment(assignment);
|
||||
|
||||
stream.IsLeaderInternal().ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user