batch35: add and verify raft test waves T2-T4
This commit is contained in:
@@ -528,4 +528,382 @@ public sealed class RaftNodeTests
|
|||||||
raft.Stop();
|
raft.Stop();
|
||||||
raft.State().ShouldBe(RaftState.Closed);
|
raft.State().ShouldBe(RaftState.Closed);
|
||||||
}
|
}
|
||||||
|
[Fact] // T:2640
|
||||||
|
public void NRGWALEntryWithoutQuorumMustTruncate_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2641
|
||||||
|
public void NRGTermNoDecreaseAfterWALReset_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2643
|
||||||
|
public void NRGCatchupDoesNotTruncateUncommittedEntriesWithQuorum_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2644
|
||||||
|
public void NRGCatchupCanTruncateMultipleEntriesWithoutQuorum_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2645
|
||||||
|
public void NRGCatchupDoesNotTruncateCommittedEntriesDuringRedelivery_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2646
|
||||||
|
public void NRGCatchupFromNewLeaderWithIncorrectPterm_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2647
|
||||||
|
public void NRGDontRemoveSnapshotIfTruncateToApplied_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2648
|
||||||
|
public void NRGSnapshotAndTruncateToApplied_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2649
|
||||||
|
public void NRGIgnoreDoubleSnapshot_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2653
|
||||||
|
public void NRGCancelCatchupWhenDetectingHigherTermDuringVoteRequest_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2655
|
||||||
|
public void NRGTruncateDownToCommitted_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2656
|
||||||
|
public void NRGTruncateDownToCommittedWhenTruncateFails_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2658
|
||||||
|
public void NRGMemoryWALEmptiesSnapshotsDir_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2659
|
||||||
|
public void NRGHealthCheckWaitForCatchup_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2660
|
||||||
|
public void NRGHealthCheckWaitForDoubleCatchup_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2661
|
||||||
|
public void NRGHealthCheckWaitForPendingCommitsWhenPaused_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2662
|
||||||
|
public void NRGAppendEntryCanEstablishQuorumAfterLeaderChange_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2665
|
||||||
|
public void NRGSignalLeadChangeFalseIfCampaignImmediately_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2666
|
||||||
|
public void NRGCatchupDontCountTowardQuorum_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2668
|
||||||
|
public void NRGRejectNewAppendEntryFromPreviousLeader_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2669
|
||||||
|
public void NRGRejectAppendEntryDuringCatchupFromPreviousLeader_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2673
|
||||||
|
public void NRGSnapshotRecovery_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2676
|
||||||
|
public void NRGInitializeAndScaleUp_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2677
|
||||||
|
public void NRGReplayOnSnapshotSameTerm_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2678
|
||||||
|
public void NRGReplayOnSnapshotDifferentTerm_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2679
|
||||||
|
public void NRGSizeAndApplied_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2680
|
||||||
|
public void NRGIgnoreEntryAfterCanceledCatchup_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2681
|
||||||
|
public void NRGDelayedMessagesAfterCatchupDontCountTowardQuorum_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2682
|
||||||
|
public void NRGStepdownWithHighestTermDuringCatchup_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2683
|
||||||
|
public void NRGTruncateOnStartup_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2684
|
||||||
|
public void NRGLeaderCatchupHandling_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2685
|
||||||
|
public void NRGNewEntriesFromOldLeaderResetsWALDuringCatchup_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2686
|
||||||
|
public void NRGProcessed_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2688
|
||||||
|
public void NRGDrainAndReplaySnapshot_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2691
|
||||||
|
public void NRGParallelCatchupRollback_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2696
|
||||||
|
public void NRGTruncateLogWithMisalignedSnapshotGap_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2697
|
||||||
|
public void NRGTruncateLogWithMissingSnapshot_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2703
|
||||||
|
public void NRGUncommittedMembershipChangeGetsTruncated_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2715
|
||||||
|
public void NRGInstallSnapshotFromCheckpoint_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2716
|
||||||
|
public void NRGInstallSnapshotForce_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2717
|
||||||
|
public void NRGInstallSnapshotFromCheckpointAfterTruncateToSnapshot_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact] // T:2719
|
||||||
|
public void NRGReplayAddPeerKeepsClusterSize_ShouldSucceed()
|
||||||
|
{
|
||||||
|
var raft = new Raft { Id = "N1", GroupName = "RG", StateValue = (int)RaftState.Follower, Term_ = 3, PIndex = 10, Commit = 5, Applied_ = 5 };
|
||||||
|
raft.ProposeAddPeer("N2");
|
||||||
|
raft.Peers_.ContainsKey("N2").ShouldBeTrue();
|
||||||
|
raft.QuorumNeeded().ShouldBeGreaterThan(0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
porting.db
BIN
porting.db
Binary file not shown.
Reference in New Issue
Block a user