Ejemplo n.º 1
0
        public async Task ReadCorrelationIdFromIncomingMessageHeader()
        {
            var message = IncomingMessageBuilder
                          .New()
                          .WithHeader(SharedConstants.CorrelationIdHeaderName, "expected id")
                          .Build();

            await behaviour.Process(message, new Context(null), NextAction).ConfigureAwait(false);

            Assert.AreEqual(1, capturedHeaders.Length);
            Assert.AreEqual(SharedConstants.CorrelationIdHeaderName, capturedHeaders.First().HeaderName);
            Assert.AreEqual("expected id", capturedHeaders.First().Value);
        }
        public async Task DeadLetterMessageIfHandlerThrowsExceptionMoreThanConfiguredDeferredRetriesCount()
        {
            var message = IncomingMessageBuilder.New()
                          .WithBody("throw this")
                          .WithDequeuedCount(retryOptions.MaximumImmediateAttempts + retryOptions.MaximumDeferredAttempts)
                          .Build();

            await Process(message).ConfigureAwait(false);

            mockMessageSource.VerifyDeadLetterCalledOnce(message, "Exception handling message");
            mockMessageSource.VerifyAbandonCalledNever(message);
            mockMessageSource.VerifyDeferCalledNever(message);
        }
        public async Task ThrowExceptionIfMessageExceedsLockTimeDuringWaitPeriod()
        {
            var allowedTasks = StartLongRunning(MaximumConcurrency);
            var blockedTask  = behaviour.Process(
                IncomingMessageBuilder
                .New()
                .WithLockExpiry(DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromSeconds(0.25))
                .Build(),
                new Context(null),
                LongRunningNextAction);

            await Task.WhenAll(allowedTasks).ConfigureAwait(false);

            var exception = await Assert
                            .ThrowsExceptionAsync <MessageConcurrencyException>(() => blockedTask)
                            .ConfigureAwait(false);

            Assert.AreEqual($"The concurrent-processing limit of {MaximumConcurrency} messages was reached and a slot did not become available before the remaining lock time for this message was exceeded.", exception.Message);
        }