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); }