public async Task Then_The_Message_Is_Handled() { // Arrange var handler = new ThrowingHandler(); var monitoring = Substitute.For <IMessageMonitor>(); var services = GivenJustSaying() .ConfigureJustSaying((builder) => builder.WithLoopbackQueue <SimpleMessage>(UniqueName)) .ConfigureJustSaying((builder) => builder.Services((options) => options.WithMessageMonitoring(() => monitoring))) .AddSingleton <IHandlerAsync <SimpleMessage> >(handler); var message = new SimpleMessage(); await WhenAsync( services, async (publisher, listener, cancellationToken) => { await listener.StartAsync(cancellationToken); await publisher.StartAsync(cancellationToken); // Act await publisher.PublishAsync(message, cancellationToken); await handler.DoneSignal.Task; // Assert handler.MessageReceived.ShouldNotBeNull(); monitoring.Received().HandleException(Arg.Any <Type>()); }); }
public async Task Then_The_Message_Is_Handled() { // Arrange var monitor = new TrackingMonitor(); var handler = new ThrowingHandler(); var services = GivenJustSaying() .ConfigureJustSaying((builder) => builder.Publications((options) => options.WithQueue <SimpleMessage>(UniqueName))) .ConfigureJustSaying( (builder) => builder.Subscriptions( (options) => options.ForQueue <SimpleMessage>( (queue) => queue.WithName(UniqueName))) .Services(c => c.WithMessageMonitoring(() => monitor))) .AddSingleton <IHandlerAsync <SimpleMessage> >(handler); var message = new SimpleMessage(); await WhenAsync( services, async (publisher, listener, cancellationToken) => { await listener.StartAsync(cancellationToken); await publisher.StartAsync(cancellationToken); // Act await publisher.PublishAsync(message, cancellationToken); await handler.DoneSignal.Task; // Assert handler.MessageReceived.ShouldNotBeNull(); monitor.ErrorCount.ShouldBe(1); }); }
public void HandlerThrowsExceptionPublishSubscribeWithoutScheduler() { var provider = services.BuildServiceProvider(); var channel = new PublishSubscribeChannel(provider.GetService <IApplicationContext>()); var handler = new ThrowingHandler(); channel.Subscribe(handler); var message = IntegrationMessageBuilder.WithPayload("test").Build(); Assert.Throws <MessageDeliveryException>(() => channel.Send(message)); }
public void Handlers_survive_exceptions() { var handler = new ThrowingHandler(); var hub = new Hub(); hub.Subscribe(handler); hub.Publish(new InheritedEvent()); Assert.Equal(1, handler.Handled); hub.Publish(new InheritedEvent()); Assert.Equal(2, handler.Handled); }
public void HandlerThrowsExceptionPublishSubscribeWithoutScheduler() { var services = new ServiceCollection(); services.AddSingleton <IIntegrationServices, IntegrationServices>(); var provider = services.BuildServiceProvider(); var channel = new PublishSubscribeChannel(provider); var handler = new ThrowingHandler(); channel.Subscribe(handler); var message = MessageBuilder.WithPayload("test").Build(); Assert.Throws <MessageDeliveryException>(() => channel.Send(message)); }
private async Task Setup() { // Setup _globalErrorHandler = (ex, m) => { _handledException = true; }; _monitoring = Substitute.For <IMessageMonitor>(); // Given _handler = new ThrowingHandler(); var fixture = new JustSayingFixture(OutputHelper); var bus = fixture.Builder() .WithMonitoring(_monitoring) .ConfigurePublisherWith(c => { c.PublishFailureBackoff = TimeSpan.FromMilliseconds(1); c.PublishFailureReAttempts = 3; }) .WithSnsMessagePublisher <SimpleMessage>() .WithSqsTopicSubscriber() .IntoQueue(fixture.UniqueName) .ConfigureSubscriptionWith(cfg => { cfg.MessageRetention = TimeSpan.FromSeconds(60); cfg.InstancePosition = 1; cfg.OnError = _globalErrorHandler; }) .WithMessageHandler(_handler); // When bus.StartListening(); await bus.PublishAsync(new SimpleMessage()); // Teardown await _handler.DoneSignal.Task; bus.StopListening(); }
public async Task Setup() { // Setup _globalErrorHandler = (ex, m) => { _handledException = true; }; _monitoring = Substitute.For <IMessageMonitor>(); // Given _handler = new ThrowingHandler(); var bus = CreateMeABus.WithLogging(new LoggerFactory()) .InRegion(RegionEndpoint.EUWest1.SystemName) .WithMonitoring(_monitoring) .ConfigurePublisherWith(c => { c.PublishFailureBackoffMilliseconds = 1; c.PublishFailureReAttempts = 3; }) .WithSnsMessagePublisher <GenericMessage>() .WithSqsTopicSubscriber() .IntoQueue("queuename") .ConfigureSubscriptionWith(cfg => { cfg.MessageRetentionSeconds = 60; cfg.InstancePosition = 1; cfg.OnError = _globalErrorHandler; }) .WithMessageHandler(_handler); // When bus.StartListening(); bus.Publish(new GenericMessage()); // Teardown await _handler.DoneSignal.Task; bus.StopListening(); }
public async Task Then_The_Message_Is_Handled() { // Arrange bool handledException = false; void ErrorHandler(Exception exception) { handledException = true; } var handler = new ThrowingHandler(); var services = GivenJustSaying() .ConfigureJustSaying((builder) => builder.Publications((options) => options.WithQueue <SimpleMessage>(UniqueName))) .ConfigureJustSaying( (builder) => builder.Subscriptions( (options) => options.ForQueue <SimpleMessage>( (queue) => queue.WithName(UniqueName).WithReadConfiguration( (config) => config.WithErrorHandler(ErrorHandler))))) .AddSingleton <IHandlerAsync <SimpleMessage> >(handler); var message = new SimpleMessage(); await WhenAsync( services, async (publisher, listener, cancellationToken) => { listener.Start(cancellationToken); // Act await publisher.PublishAsync(message, cancellationToken); await handler.DoneSignal.Task; // Assert handler.MessageReceived.ShouldNotBeNull(); handledException.ShouldBeTrue(); }); }
public async Task Setup() { // Setup _globalErrorHandler = (ex, m) => { _handledException = true; }; _monitoring = Substitute.For<IMessageMonitor>(); // Given _handler = new ThrowingHandler(); var bus = CreateMeABus.InRegion(RegionEndpoint.EUWest1.SystemName) .WithMonitoring(_monitoring) .ConfigurePublisherWith(c => { c.PublishFailureBackoffMilliseconds = 1; c.PublishFailureReAttempts = 3; }) .WithSnsMessagePublisher<GenericMessage>() .WithSqsTopicSubscriber() .IntoQueue("queuename") .ConfigureSubscriptionWith(cfg => { cfg.MessageRetentionSeconds = 60; cfg.InstancePosition = 1; cfg.OnError = _globalErrorHandler; }) .WithMessageHandler(_handler); // When bus.StartListening(); bus.Publish(new GenericMessage()); // Teardown await _handler.DoneSignal.Task; bus.StopListening(); }