Beispiel #1
0
 public void SetUp()
 {
     breaker    = new FakeBreaker();
     dispatcher = new RecordingFakeDispatcher();
     timeouts   = new InMemoryTimeoutPersister(() => currentTime);
     poller     = new ExpiredTimeoutsPoller(timeouts, dispatcher, "test", breaker, () => currentTime);
 }
 public void SetUp()
 {
     breaker = new FakeBreaker();
     dispatcher = new RecordingFakeDispatcher();
     timeouts = new InMemoryTimeoutPersister(() => currentTime);
     poller = new ExpiredTimeoutsPoller(timeouts, dispatcher, "test", breaker, () => currentTime);
 }
Beispiel #3
0
        public void TestNextQueryTimeIsResetWhenNewTimeoutIsInserted()
        {
            // Arrange
            var expiredTimeoutsPoller = new ExpiredTimeoutsPoller(_mockBus.Object);// todo: pass time provider to make testing easier
            var nextTimeoutQueryTime  = DateTime.UtcNow.AddSeconds(-10);

            // Act
            _mockProcessManagerFinder.Raise(e => e.TimeoutInserted += null, nextTimeoutQueryTime);

            // Assert
            Assert.Equal(expiredTimeoutsPoller.NextQueryUtc, nextTimeoutQueryTime);
        }
Beispiel #4
0
        public void TestDispatchedTimeoutMessageIsRemoved()
        {
            // Arrange
            SetupProcessManagerFinderMock(DateTime.UtcNow.AddSeconds(30));
            var expiredTimeoutsPoller = new ExpiredTimeoutsPoller(_mockBus.Object);

            // Act
            expiredTimeoutsPoller.InnerPoll(new CancellationToken(false));

            // Assert
            _mockProcessManagerFinder.Verify(i => i.RemoveDispatchedTimeout(_tdId), Times.Once);
        }
Beispiel #5
0
        public void TestTimeoutMessageIsDispatched()
        {
            // Arrange
            SetupProcessManagerFinderMock(DateTime.UtcNow.AddSeconds(30));
            var expiredTimeoutsPoller = new ExpiredTimeoutsPoller(_mockBus.Object);

            // Act
            expiredTimeoutsPoller.InnerPoll(new CancellationToken(false));

            // Assert
            _mockBus.Verify(i => i.Send("TestDest", It.Is <TimeoutMessage>(p => p.CorrelationId == _pmId), null), Times.Once);
        }
Beispiel #6
0
        public void TestNextQueryTimeIsResetToMaxAlowedValue()
        {
            // Arrange
            var nextTimeoutQueryTime = DateTime.UtcNow.AddDays(1);

            SetupProcessManagerFinderMock(nextTimeoutQueryTime);
            var expiredTimeoutsPoller = new ExpiredTimeoutsPoller(_mockBus.Object);

            // Act
            expiredTimeoutsPoller.InnerPoll(new CancellationToken(false));

            // Assert
            Assert.True(expiredTimeoutsPoller.NextQueryUtc < nextTimeoutQueryTime);
        }
Beispiel #7
0
        public void TestNextQueryTimeIsResetToNextTimeoutDue()
        {
            // Arrange
            var nextTimeoutQueryTime = DateTime.UtcNow.AddSeconds(30);

            SetupProcessManagerFinderMock(nextTimeoutQueryTime);
            var expiredTimeoutsPoller = new ExpiredTimeoutsPoller(_mockBus.Object);

            // Act
            expiredTimeoutsPoller.InnerPoll(new CancellationToken(false));

            // Assert
            Assert.Equal(nextTimeoutQueryTime, expiredTimeoutsPoller.NextQueryUtc);
        }
Beispiel #8
0
        public Bus(IConfiguration configuration)
        {
            _busState = new BusState();

            Configuration = configuration;

            _logger    = configuration.GetLogger();
            _container = configuration.GetContainer();
            _producer  = configuration.GetProducer();
            _processMessagePipeline = configuration.GetProcessMessagePipeline(_busState);
            _sendMessagePipeline    = configuration.GetSendMessagePipeline();

            _container.Initialize();

            if (configuration.AddBusToContainer)
            {
                _container.AddBus(this);
            }

            if (configuration.ScanForMesssageHandlers)
            {
                _container.ScanForHandlers();
            }

            if (configuration.TransportSettings.AuditingEnabled)
            {
                StartHeartbeatTimer();
            }

            if (configuration.AutoStartConsuming)
            {
                StartConsuming();
            }

            if (configuration.EnableProcessManagerTimeouts)
            {
                _expiredTimeoutsPoller = new ExpiredTimeoutsPoller(this);
                _expiredTimeoutsPoller.Start();
            }
        }
Beispiel #9
0
        public async Task Poll_with_same_start_slice_from_last_failed_dispatch()
        {
            var failingDispatcher = new FailableDispatcher();

            poller = new ExpiredTimeoutsPoller(timeouts, failingDispatcher, "test", breaker, () => currentTime);

            RegisterNewTimeout(currentTime.Subtract(TimeSpan.FromMinutes(5)));

            var dispatchCalls = 0;
            var unicastTransportOperations = new List <UnicastTransportOperation>();

            failingDispatcher.DispatcherAction = m =>
            {
                if (++dispatchCalls == 1)
                {
                    // fail first dispatch
                    throw new Exception("transport error");
                }

                // succeed second dispatch
                unicastTransportOperations = m.UnicastTransportOperations;
                return(Task.CompletedTask);
            };

            try
            {
                await poller.SpinOnce(CancellationToken.None);
            }
            catch (Exception)
            {
                // ignore. An exception will cause another polling attempt.
            }

            await poller.SpinOnce(CancellationToken.None);

            Assert.AreEqual(1, unicastTransportOperations.Count);
        }
Beispiel #10
0
 public TimeoutPollerRunner(ExpiredTimeoutsPoller poller)
 {
     this.poller = poller;
 }
 public TimeoutPollerRunner(ExpiredTimeoutsPoller poller)
 {
     this.poller = poller;
 }