Example #1
0
        public void AppendEntriesReturnsFalseIfPrevEntryTermDoesNotMatch()
        {
            // Arrange
            var message = new AppendEntriesRequest
            {
                PreviousLogIndex = 0,
                PreviousLogTerm  = 1
            };

            var raftNode = Substitute.For <INode>();

            raftNode.CurrentState.Returns(NodeState.Follower);

            var timer = Substitute.For <INodeTimer>();
            var appendEntriesPublisher = Substitute.For <IPublishToBuffer <AppendEntriesRequested> >();
            var nodePublisher          = Substitute.For <IPublishToBuffer <NodeCommandScheduled, NodeCommandResult> >();

            var service = new RaftService(appendEntriesPublisher, nodePublisher, timer, raftNode);

            var raftLog = new NodeLog();

            raftLog.SetLogEntry(1, 2L);

            raftNode.Data.Returns(new NodeData {
                Log = raftLog
            });

            // Act
            var response = service.AppendEntries(message);

            // Assert
            response.Success.Should().BeFalse(
                "because node cannot apply log if the term " +
                "for the leaders previous log index does not match.");
        }
Example #2
0
        public void ThrowsErrorIfCommitIndexIsLessThanOne()
        {
            // Arrange
            var raftLog = new NodeLog();

            // Act, Assert
            Assert.Throws <IndexOutOfRangeException>(() => raftLog.SetLogEntry(0, 10));
        }
Example #3
0
        public void CanTruncateLogFromGivenIndex()
        {
            // Arrange
            const int initialCount      = 10;
            const int truncateFromIndex = 5;

            var nodeLog = new NodeLog();

            for (var i = 0; i < initialCount; i++)
            {
                nodeLog.SetLogEntry(i + 1, 1);
            }

            // Act
            nodeLog.TruncateLog(truncateFromIndex);

            // Assert
            nodeLog[truncateFromIndex].Should().Be(1);
            for (var i = truncateFromIndex; i < initialCount; i++)
            {
                nodeLog[i + 1].Should().NotHaveValue();
            }
        }