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>());
            });
        }
Esempio n. 2
0
        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));
        }
Esempio n. 4
0
        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();
        }
Esempio n. 8
0
        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();
        }