Ejemplo n.º 1
0
        public void DoesCompleteTaskInTaskCompletionSource()
        {
            // Arrange
            var @event = TestEventFactory.GetCommandEvent(1L, new byte[8]);

            var nodePublisher  = Substitute.For <IPublishToBuffer <NodeCommandScheduled, NodeCommandResult> >();
            var serviceLocator = Substitute.For <IServiceLocator>();

            var handler = new CommandFinalizer(serviceLocator, nodePublisher);

            // Act
            handler.Handle(@event);

            // Assert
            @event.CompletionSource.Task.IsCompleted
            .Should().BeTrue();
        }
Ejemplo n.º 2
0
        public void DoesSetTaskResultWithSuccessfulLogResult()
        {
            // Arrange
            var @event         = TestEventFactory.GetCommandEvent(1L, new byte[8]);
            var nodePublisher  = Substitute.For <IPublishToBuffer <NodeCommandScheduled, NodeCommandResult> >();
            var serviceLocator = Substitute.For <IServiceLocator>();

            var handler = new CommandFinalizer(serviceLocator, nodePublisher);

            // Act
            handler.Handle(@event);

            // Assert
            @event.CompletionSource.Task.Result
            .Should().NotBeNull();

            @event.CompletionSource.Task.Result.Successful
            .Should().BeTrue();
        }
Ejemplo n.º 3
0
        public void DoesCallApplyCommandOnRaftNodeWithCorrectLogIdx()
        {
            // Arrange
            const long logIdx = 3L;
            var        @event = TestEventFactory.GetCommandEvent(logIdx, new byte[8]);

            var nodePublisher  = new TestBufferPublisher <NodeCommandScheduled, NodeCommandResult>();
            var serviceLocator = Substitute.For <IServiceLocator>();

            var handler = new CommandFinalizer(serviceLocator, nodePublisher);

            // Act
            handler.Handle(@event);

            // Assert
            nodePublisher.Events.Count.Should().BeGreaterThan(1);
            nodePublisher.Events[1].Command.Should().BeOfType <ApplyEntry>();
            ((ApplyEntry)nodePublisher.Events[1].Command).EntryIdx.Should().Be(logIdx);
        }
Ejemplo n.º 4
0
        public void DoesExecuteCommand()
        {
            // Arrange
            var shouldEqualTrueWhenCommandExecutes = false;

            var @event = TestEventFactory.GetCommandEvent(
                1L, new byte[4],
                () => shouldEqualTrueWhenCommandExecutes = true);

            var nodePublisher  = Substitute.For <IPublishToBuffer <NodeCommandScheduled, NodeCommandResult> >();
            var serviceLocator = Substitute.For <IServiceLocator>();

            var handler = new CommandFinalizer(serviceLocator, nodePublisher);

            // Act
            handler.Handle(@event);

            // Assert
            shouldEqualTrueWhenCommandExecutes
            .Should().BeTrue();
        }
Ejemplo n.º 5
0
        public void DoesCommitLogEntryOnRaftNode()
        {
            // Arrange
            const long commitIdx = 3L;
            const long term      = 5L;

            var @event = TestEventFactory.GetCommandEvent(commitIdx, new byte[8]);

            @event.LogEntry.Term = term;

            var serviceLocator = Substitute.For <IServiceLocator>();
            var nodePublisher  = new TestBufferPublisher <NodeCommandScheduled, NodeCommandResult>();

            var handler = new CommandFinalizer(serviceLocator, nodePublisher);

            // Act
            handler.Handle(@event);

            // Assert
            nodePublisher.Events.Count.Should().BeGreaterThan(0);
            nodePublisher.Events[0].Command.Should().BeOfType <CommitEntry>();
            ((CommitEntry)nodePublisher.Events[0].Command).EntryIdx.Should().Be(commitIdx);
            ((CommitEntry)nodePublisher.Events[0].Command).EntryTerm.Should().Be(term);
        }