public void WithMessageHandlerDefaultContext_WithMessageBodyFilterWithImplementationFactory_UsesFilter(bool matches) { // Arrange var services = new MessageHandlerCollection(new ServiceCollection()); var expectedHandler = new DefaultTestMessageHandler(); var message = new TestMessage(); // Act services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(messageBodyFilter: body => { Assert.Same(message, body); return(matches); }, implementationFactory: serviceProvider => expectedHandler); // Assert IServiceProvider provider = services.Services.BuildServiceProvider(); IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance); MessageHandler handler = Assert.Single(handlers); Assert.NotNull(handler); Assert.NotSame(expectedHandler, handler); bool actual = handler.CanProcessMessageBasedOnMessage(message); Assert.Equal(matches, actual); }
public void WithMessageHandlerWithCustomContext_WithMessageContextFilterWithMessageBodyFilter_UsesSerializer(bool matchesContext, bool matchesBody) { // Arrange var services = new MessageHandlerCollection(new ServiceCollection()); var expectedMessage = new TestMessage(); var expectedContext = TestMessageContext.Generate(); var expectedHandler = new DefaultTestMessageHandler(); // Act services.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>( messageContextFilter: context => { Assert.Same(expectedContext, context); return(matchesContext); }, messageBodyFilter: body => { Assert.Same(expectedMessage, body); return(matchesBody); }); // Assert IServiceProvider provider = services.Services.BuildServiceProvider(); IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance); Assert.NotNull(handlers); MessageHandler handler = Assert.Single(handlers); Assert.NotNull(handler); Assert.NotSame(expectedHandler, handler); Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext)); Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage)); }
public void WithMessageHandlerWithDefaultContext_WithMessageContextFilterWithMessageBodyFilterWithImplementationFactory_UsesSerializer(bool matchesContext, bool matchesBody) { // Arrange var services = new MessageHandlerCollection(new ServiceCollection()); var expectedMessage = new TestMessage(); var expectedContext = new MessageContext($"message-id-{Guid.NewGuid()}", new Dictionary <string, object>()); var expectedHandler = new DefaultTestMessageHandler(); // Act services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>( messageContextFilter: context => { Assert.Same(expectedContext, context); return(matchesContext); }, messageBodyFilter: body => { Assert.Same(expectedMessage, body); return(matchesBody); }, implementationFactory: serviceProvider => expectedHandler); // Assert IServiceProvider provider = services.Services.BuildServiceProvider(); IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance); Assert.NotNull(handlers); MessageHandler handler = Assert.Single(handlers); Assert.NotNull(handler); Assert.NotSame(expectedHandler, handler); Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext)); Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage)); }
public async Task WithMessageHandlerWithDefaultContext_WithMessageBodySerializerWithImplementationFactory_UsesSerializer() { // Arrange var services = new MessageHandlerCollection(new ServiceCollection()); var expectedBody = $"test-message-body-{Guid.NewGuid()}"; var expectedMessage = new TestMessage(); var serializer = new TestMessageBodySerializer(expectedBody, expectedMessage); var expectedHandler = new DefaultTestMessageHandler(); // Act services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>( messageBodySerializer: serializer, implementationFactory: serviceProvider => expectedHandler); // Assert IServiceProvider provider = services.Services.BuildServiceProvider(); IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance); Assert.NotNull(handlers); MessageHandler handler = Assert.Single(handlers); Assert.NotNull(handler); Assert.NotSame(expectedHandler, handler); MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody); Assert.NotNull(result); Assert.Same(expectedMessage, result.DeserializedMessage); }
public async Task WithMessageRouting_WithMessageHandlerContextFilter_GoesThroughRegisteredMessageHandlers() { // Arrange var services = new ServiceCollection(); var collection = new MessageHandlerCollection(services); var spyHandler = new StubTestMessageHandler <TestMessage, TestMessageContext>(); var ignoredSameTypeHandler = new StubTestMessageHandler <TestMessage, TestMessageContext>(); var ignoredDefaultHandler = new DefaultTestMessageHandler(); var ignoredHandler = new TestMessageHandler(); collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(serviceProvider => ignoredDefaultHandler) .WithMessageHandler <StubTestMessageHandler <TestMessage, TestMessageContext>, TestMessage, TestMessageContext>( messageContextFilter: ctx => false, implementationFactory: serviceProvider => ignoredSameTypeHandler) .WithMessageHandler <StubTestMessageHandler <TestMessage, TestMessageContext>, TestMessage, TestMessageContext>(serviceProvider => spyHandler) .WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(serviceProvider => ignoredHandler); // Act services.AddMessageRouting(); // Assert IServiceProvider provider = services.BuildServiceProvider(); var router = provider.GetRequiredService <IMessageRouter>(); var correlationInfo = new MessageCorrelationInfo("operation-id", "transaction-id"); var context = TestMessageContext.Generate(); string json = JsonConvert.SerializeObject(new TestMessage()); await router.RouteMessageAsync(json, context, correlationInfo, CancellationToken.None); Assert.True(spyHandler.IsProcessed); Assert.False(ignoredSameTypeHandler.IsProcessed); Assert.False(ignoredDefaultHandler.IsProcessed); Assert.False(ignoredHandler.IsProcessed); }
public async Task WithMessageHandlerDefaultContext_WithContextFilterWithMessageBodySerializerImplementationFactoryWithMessageBodyFilterWithMessageHandlerImplementationFactory_UsesFilter(bool matchesContext, bool matchesBody) { // Arrange var services = new MessageHandlerCollection(new ServiceCollection()); var expectedBody = $"test-message-body-{Guid.NewGuid()}"; var expectedMessage = new TestMessage(); var expectedContext = new MessageContext("message-id", new Dictionary <string, object>()); var serializer = new TestMessageBodySerializer(expectedBody, expectedMessage); var expectedHandler = new DefaultTestMessageHandler(); // Act services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>( messageContextFilter: context => { Assert.Same(expectedContext, context); return(matchesContext); }, messageBodySerializerImplementationFactory: serviceProvider => serializer, messageBodyFilter: body => { Assert.Same(expectedMessage, body); return(matchesBody); }, messageHandlerImplementationFactory: serviceProvider => expectedHandler); // Assert IServiceProvider provider = services.Services.BuildServiceProvider(); IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance); MessageHandler handler = Assert.Single(handlers); Assert.NotNull(handler); Assert.Same(expectedHandler, handler.GetMessageHandlerInstance()); Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage)); Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext)); MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody); Assert.NotNull(result); Assert.Same(expectedMessage, result.DeserializedMessage); }
public void CustomMessageHandlerFactory_WithDefaultContextFilterObsolete_SubtractsRegistration(bool matchesContext) { // Arrange var collection = new MessageHandlerCollection(new ServiceCollection()); var spyHandler = new DefaultTestMessageHandler(); collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>( (MessageContext messageContext) => matchesContext, provider => spyHandler); ServiceProvider serviceProvider = collection.Services.BuildServiceProvider(); // Act IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger); // Assert MessageHandler messageHandler = Assert.Single(messageHandlers); Assert.NotNull(messageHandler); var context = new MessageContext("message-id", new Dictionary <string, object>()); Assert.Equal(matchesContext, messageHandler.CanProcessMessage(messageContext: context)); }
public async Task CustomMessageHandlerFactory_WithDefaultContext_SubtractsRegistration() { // Arrange var collection = new MessageHandlerCollection(new ServiceCollection()); var spyHandler = new DefaultTestMessageHandler(); collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(provider => spyHandler); IServiceProvider serviceProvider = collection.Services.BuildServiceProvider(); // Act IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger); // Assert MessageHandler messageHandler = Assert.Single(messageHandlers); Assert.NotNull(messageHandler); var message = new TestMessage(); var context = TestMessageContext.Generate(); var correlationInfo = new MessageCorrelationInfo("operation-id", "transaction-id"); await messageHandler.ProcessMessageAsync(message, context, correlationInfo, CancellationToken.None); Assert.True(spyHandler.IsProcessed); }