feat: implement jetstream governance runtime parity semantics
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
using NATS.Server.JetStream.Cluster;
|
||||
|
||||
namespace NATS.Server.Tests.JetStream;
|
||||
|
||||
public class JetStreamMetaGovernanceStrictParityTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task Meta_and_replica_governance_actions_reflect_committed_state_transitions()
|
||||
{
|
||||
var meta = new JetStreamMetaGroup(3);
|
||||
var before = meta.GetState();
|
||||
|
||||
await meta.ProposeCreateStreamAsync(new NATS.Server.JetStream.Models.StreamConfig
|
||||
{
|
||||
Name = "ORDERS_GOV",
|
||||
Subjects = ["orders.gov"],
|
||||
}, default);
|
||||
meta.StepDown();
|
||||
var after = meta.GetState();
|
||||
|
||||
after.Streams.ShouldContain("ORDERS_GOV");
|
||||
after.LeaderId.ShouldNotBe(before.LeaderId);
|
||||
after.LeadershipVersion.ShouldBe(before.LeadershipVersion + 1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using NATS.Server.JetStream.Cluster;
|
||||
|
||||
namespace NATS.Server.Tests.JetStream;
|
||||
|
||||
public class JetStreamReplicaGovernanceStrictParityTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task Meta_and_replica_governance_actions_reflect_committed_state_transitions()
|
||||
{
|
||||
var group = new StreamReplicaGroup("ORDERS_GOV", replicas: 3);
|
||||
var beforeLeader = group.Leader.Id;
|
||||
|
||||
await group.StepDownAsync(default);
|
||||
group.Leader.Id.ShouldNotBe(beforeLeader);
|
||||
|
||||
var index = await group.ProposeAsync("set placement", default);
|
||||
index.ShouldBeGreaterThan(0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user