public async Task DeadLettersMessageWithReasonAsync() { const string deadLetterReason = "Json Serliazation issue"; var subscription = nameof(DeadLettersMessageWithReasonAsync); var aircraftlandedEvent = await CreateSubscriptionAndSendAircraftLandedEventAsync(subscription); var aircraftLandedHandler = new AircraftLandedHandler(deadLetterReason); var mockMessageHandlerResolver = new Mock <IMessageHandlerResolver>(); mockMessageHandlerResolver.Setup(m => m.Resolve(nameof(AircraftLanded))).Returns(aircraftLandedHandler); var mockMessageProcessorResolver = new Mock <IMessageProcessorResolver>(); _azureServiceBusClient = new AzureServiceBusClient(_hostname, _topic, nameof(DeadLettersMessageWithReasonAsync), _tenantId); var messageBus = new Abstractions.MessageBus(mockMessageHandlerResolver.Object, new Mock <IMessageBusAdminClient>().Object, _azureServiceBusClient, mockMessageProcessorResolver.Object); await messageBus.StartAsync(); await Task.Delay(TimeSpan.FromSeconds(2)); var messages = await ReceiveMessagesForSubscriptionAsync(subscription, true); Assert.Equal(1, aircraftLandedHandler.MessageCount); Assert.Equal(nameof(AircraftLanded), messages.First().Subject); Assert.Single(messages.Where(m => IsMatchingAircraftId <AircraftLanded>(m, aircraftlandedEvent.AircraftId))); }
public async Task MessageContextPropertiesAvailableToMessageHandler() { var mockAircraftTakenOffHandler = new AircraftLandedHandler(); _mockMessageHandlerResolver.Setup(m => m.Resolve(nameof(AircraftLanded))) .Returns(mockAircraftTakenOffHandler); var aircraftId = Guid.NewGuid().ToString(); var messageId = Guid.NewGuid().ToString(); var correlationId = Guid.NewGuid().ToString(); var messageProperties = new Dictionary <string, string> { { "MessageType", nameof(AircraftLanded) }, { "MessageVersion", "1" } }; var args = new MessageReceivedEventArgs(BuildAircraftLandedMessage(aircraftId), new object(), messageProperties) { MessageId = messageId, CorrelationId = correlationId, DeliveryCount = 2 }; await _sut.OnMessageReceived(args); _mockMessageHandlerResolver.Verify(m => m.Resolve(nameof(AircraftLanded)), Times.Once); Assert.Equal(aircraftId, mockAircraftTakenOffHandler.MessageContext.Message.AircraftId); Assert.Equal(1, mockAircraftTakenOffHandler.MessageCount); Assert.Equal(messageId, mockAircraftTakenOffHandler.MessageContext.MessageId); Assert.Equal(correlationId, mockAircraftTakenOffHandler.MessageContext.CorrelationId); Assert.Equal(nameof(AircraftLanded), mockAircraftTakenOffHandler.MessageContext.Properties["MessageType"]); Assert.Equal(2, mockAircraftTakenOffHandler.MessageContext.DeliveryCount); }
public async Task CallsCorrectMessageHandlerWithCustomMessageTypePropertyName() { var mockAircraftTakenOffHandler = new AircraftLandedHandler(); _mockMessageHandlerResolver.Setup(m => m.Resolve(nameof(AircraftLanded))) .Returns(mockAircraftTakenOffHandler); var sut = new MessageBus(_mockMessageHandlerResolver.Object, _mockMessageBusAdminClient.Object, _mockMessageBusClient.Object, _mockMessageProcessorResolver.Object, new MessageBusOptions { MessageTypePropertyName = "MessageTypeIdentifier" }); var aircraftId = Guid.NewGuid().ToString(); var args = new MessageReceivedEventArgs(BuildAircraftLandedMessage(aircraftId), new object(), new Dictionary <string, string> { { "MessageTypeIdentifier", nameof(AircraftLanded) } }); await sut.OnMessageReceived(args); _mockMessageHandlerResolver.Verify(m => m.Resolve(nameof(AircraftLanded)), Times.Once); Assert.Equal(aircraftId, mockAircraftTakenOffHandler.AircraftId); Assert.Equal(1, mockAircraftTakenOffHandler.MessageCount); }