Beispiel #1
0
        public void LogEncoderDoesAddLogEntryToLogRegisterWithIndexTermAndCommandTypeSet()
        {
            // Arrange
            var @event           = TestEventFactory.GetCommandEvent();
            var expectedLogEntry = new LogEntry
            {
                Term        = 3L,
                Index       = 7L,
                CommandType = @event.Command.GetType().AssemblyQualifiedName,
                Command     = @event.Command
            };

            var nodeData = new NodeData
            {
                CurrentTerm = expectedLogEntry.Term,
                CommitIndex = expectedLogEntry.Index - 1
            };
            var raftNode = Substitute.For <INode>();

            raftNode.Data.Returns(nodeData);

            var handler = new LogEncoder(raftNode);

            // Act
            handler.OnNext(@event, 1, false);

            // Assert
            @event.LogEntry.Should().NotBeNull();
            @event.LogEntry.Term.Should().Be(expectedLogEntry.Term);
            @event.LogEntry.Index.Should().Be(expectedLogEntry.Index);
            @event.LogEntry.CommandType.Should().Be(expectedLogEntry.CommandType);
            @event.LogEntry.Command.Should().Be(expectedLogEntry.Command);
        }
Beispiel #2
0
        private PutLog ConvertThreadLocalLogsToPutLogs()
        {
            if (_threadLocalLogs.Value.Count <= 0)
            {
                return(null);
            }

            Int32 count               = _threadLocalLogs.Value.Count;
            var   rawLogs             = new List <ILog>(count);
            var   encodedLogs         = new List <Byte[]>(count);
            Int32 totalEncodedLogByte = 0;

            for (Int32 i = 0; i < count; ++i)
            {
                Log    log        = _threadLocalLogs.Value[i];
                Byte[] encodedLog = LogEncoder.Encode(log);

                CompletePutNoticeResultType completePutNoticeResultType = ValidateEncodedLog(encodedLog);
                if (completePutNoticeResultType != CompletePutNoticeResultType.Success)
                {
                    DropLog(log, completePutNoticeResultType);
                    continue;
                }

                rawLogs.Add(log);
                encodedLogs.Add(encodedLog);
                totalEncodedLogByte += encodedLog.Length;

                UpdateThreadLocalWatcherCounter(log.LogType, encodedLog.Length);
            }

            return(new PutLog(rawLogs.ToArray(), encodedLogs.ToArray(), totalEncodedLogByte));
        }
Beispiel #3
0
        public void LogEncoderDoesAddEncodedLogToLogEvent()
        {
            // Arrange
            var @event = TestEventFactory.GetCommandEvent();

            var nodeData = new NodeData
            {
                CurrentTerm = 1
            };
            var raftNode = Substitute.For <INode>();

            raftNode.Data.Returns(nodeData);

            var handler = new LogEncoder(raftNode);

            // Act
            handler.OnNext(@event, 1, false);

            // Assert
            @event.EncodedEntry.Should().NotBeNull();
        }
Beispiel #4
0
        public void TheEncodedLogDoesMatchTheEncodedLogInTestData()
        {
            // Arrange
            var @event = TestEventFactory.GetCommandEvent();

            var nodeData = new NodeData
            {
                CurrentTerm = 1
            };
            var raftNode = Substitute.For <INode>();

            raftNode.Data.Returns(nodeData);

            var handler = new LogEncoder(raftNode);

            // Act
            handler.OnNext(@event, 1, false);

            // Assert
            @event.EncodedEntry
            .SequenceEqual(_testCommandLogEntryEncoded)
            .Should().BeTrue();
        }
 private void InitializeLogEncoder()
 {
     LogEncoder.Initialize(this);
 }
 private void CreateLogEncoder()
 {
     LogEncoder = new LogEncoder();
 }