batch33 task2 implement group A cluster stream features
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
using System.Reflection;
|
||||
using Shouldly;
|
||||
using ZB.MOM.NatsNet.Server;
|
||||
|
||||
namespace ZB.MOM.NatsNet.Server.Tests.ImplBacklog;
|
||||
|
||||
public sealed class JetStreamClusterStreamsGroupATests
|
||||
{
|
||||
[Fact] // T:1578
|
||||
public void MonitorCluster_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("MonitorCluster", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1579
|
||||
public void CheckClusterSize_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("CheckClusterSize", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1580
|
||||
public void ClusterStreamConfig_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("ClusterStreamConfig", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1581
|
||||
public void MetaSnapshot_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("MetaSnapshot", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1582
|
||||
public void ApplyMetaSnapshot_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("ApplyMetaSnapshot", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1583
|
||||
public void DecodeMetaSnapshot_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("DecodeMetaSnapshot", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1584
|
||||
public void EncodeMetaSnapshot_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("EncodeMetaSnapshot", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1585
|
||||
public void CollectStreamAndConsumerChanges_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("CollectStreamAndConsumerChanges", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1586
|
||||
public void SetStreamAssignmentRecovering_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("SetStreamAssignmentRecovering", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1587
|
||||
public void SetConsumerAssignmentRecovering_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("SetConsumerAssignmentRecovering", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1588
|
||||
public void CopyGroup_StreamAssignment_ShouldCloneGroupPeers()
|
||||
{
|
||||
var sa = new StreamAssignment
|
||||
{
|
||||
Group = new RaftGroup { Name = "RG", Peers = ["A", "B"] },
|
||||
Config = new StreamConfig { Name = "S", Replicas = 3 },
|
||||
};
|
||||
|
||||
var method = typeof(StreamAssignment).GetMethod("CopyGroup", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
method.ShouldNotBeNull();
|
||||
var copy = method!.Invoke(sa, []) as StreamAssignment;
|
||||
copy.ShouldNotBeNull();
|
||||
copy!.Group.ShouldNotBeNull();
|
||||
ReferenceEquals(copy.Group, sa.Group).ShouldBeFalse();
|
||||
copy.Group.Peers.SequenceEqual(sa.Group!.Peers).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact] // T:1589
|
||||
public void CopyGroup_ConsumerAssignment_ShouldCloneGroupPeers()
|
||||
{
|
||||
var ca = new ConsumerAssignment
|
||||
{
|
||||
Name = "C",
|
||||
Stream = "S",
|
||||
Group = new RaftGroup { Name = "RG", Peers = ["A", "B"] },
|
||||
};
|
||||
|
||||
var method = typeof(ConsumerAssignment).GetMethod("CopyGroup", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
method.ShouldNotBeNull();
|
||||
var copy = method!.Invoke(ca, []) as ConsumerAssignment;
|
||||
copy.ShouldNotBeNull();
|
||||
copy!.Group.ShouldNotBeNull();
|
||||
ReferenceEquals(copy.Group, ca.Group).ShouldBeFalse();
|
||||
copy.Group.Peers.SequenceEqual(ca.Group!.Peers).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact] // T:1590
|
||||
public void MissingPeers_StreamAssignment_ShouldReflectReplicaGap()
|
||||
{
|
||||
var sa = new StreamAssignment
|
||||
{
|
||||
Config = new StreamConfig { Name = "S", Replicas = 3 },
|
||||
Group = new RaftGroup { Peers = ["A", "B"] },
|
||||
};
|
||||
var method = typeof(StreamAssignment).GetMethod("MissingPeers", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
method.ShouldNotBeNull();
|
||||
((bool)method!.Invoke(sa, [])!).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact] // T:1591
|
||||
public void ProcessAddPeer_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("ProcessAddPeer", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1592
|
||||
public void ProcessRemovePeer_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("ProcessRemovePeer", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1593
|
||||
public void RemovePeerFromStream_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("RemovePeerFromStream", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1594
|
||||
public void RemovePeerFromStreamLocked_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("RemovePeerFromStreamLocked", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1595
|
||||
public void HasPeerEntries_Method_ShouldExist()
|
||||
{
|
||||
typeof(JetStreamEngine).GetMethod("HasPeerEntries", BindingFlags.Instance | BindingFlags.NonPublic).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
[Fact] // T:1596
|
||||
public void RecoveryKey_StreamAssignment_ShouldUseAccountAndName()
|
||||
{
|
||||
var sa = new StreamAssignment
|
||||
{
|
||||
Client = new ClientInfo { Account = "A", ServiceName = "SA" },
|
||||
Config = new StreamConfig { Name = "ORDERS" },
|
||||
};
|
||||
var method = typeof(StreamAssignment).GetMethod("RecoveryKey", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
method.ShouldNotBeNull();
|
||||
method!.Invoke(sa, [])!.ToString().ShouldBe("SA:ORDERS");
|
||||
}
|
||||
|
||||
[Fact] // T:1597
|
||||
public void StreamRecoveryKey_ConsumerAssignment_ShouldUseAccountAndStream()
|
||||
{
|
||||
var ca = new ConsumerAssignment
|
||||
{
|
||||
Client = new ClientInfo { Account = "A", ServiceName = "SA" },
|
||||
Stream = "ORDERS",
|
||||
Name = "C1",
|
||||
};
|
||||
var method = typeof(ConsumerAssignment).GetMethod("StreamRecoveryKey", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
method.ShouldNotBeNull();
|
||||
method!.Invoke(ca, [])!.ToString().ShouldBe("SA:ORDERS");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user