Esempio n. 1
0
        public void Should_not_reconnect_if_has_been_disposed()
        {
            const string originalMessage     = "{ Text:\"Hello World\"}";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var exception = new Exception("I just threw!");

            var context = new ConsumerExecutionContext(
                (bytes, properties, arg3) => null,
                new MessageReceivedInfo("consumertag", 0, false, "orginalExchange", "originalRoutingKey", "queue"),
                new MessageProperties
            {
                CorrelationId = "123",
                AppId         = "456"
            },
                originalMessageBody
                );

            connectionFactory = Substitute.For <IConnectionFactory>();

            consumerErrorStrategy = new DefaultConsumerErrorStrategy(
                connectionFactory,
                Substitute.For <ISerializer>(),
                Substitute.For <IConventions>(),
                Substitute.For <ITypeNameSerializer>(),
                Substitute.For <IErrorMessageSerializer>());

            consumerErrorStrategy.Dispose();

            var ackStrategy = consumerErrorStrategy.HandleConsumerError(context, exception);

            connectionFactory.DidNotReceive().CreateConnection();

            Assert.Equal(AckStrategies.NackWithRequeue, ackStrategy);
        }
Esempio n. 2
0
        public void Should_handle_an_exception_by_writing_to_the_error_queue()
        {
            const string originalMessage     = "{ Text:\"Hello World\"}";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var exception = new Exception("I just threw!");

            var context = new ConsumerExecutionContext(
                (bytes, properties, arg3) => null,
                new MessageReceivedInfo("consumertag", 0, false, "orginalExchange", "originalRoutingKey", "queue"),
                new MessageProperties
            {
                CorrelationId = "123",
                AppId         = "456"
            },
                originalMessageBody,
                MockRepository.GenerateStub <IBasicConsumer>()
                );

            consumerErrorStrategy.HandleConsumerError(context, exception);

            Thread.Sleep(100);

            // Now get the error message off the error queue and assert its properties
            using (var connection = connectionFactory.CreateConnection())
                using (var model = connection.CreateModel())
                {
                    var getArgs = model.BasicGet(conventions.ErrorQueueNamingConvention(), true);
                    if (getArgs == null)
                    {
                        Assert.Fail("Nothing on the error queue");
                    }
                    else
                    {
                        var message = serializer.BytesToMessage <Error>(getArgs.Body);

                        message.RoutingKey.ShouldEqual(context.Info.RoutingKey);
                        message.Exchange.ShouldEqual(context.Info.Exchange);
                        message.Message.ShouldEqual(originalMessage);
                        message.Exception.ShouldEqual("System.Exception: I just threw!");
                        message.DateTime.Date.ShouldEqual(DateTime.Now.Date);
                        message.BasicProperties.CorrelationId.ShouldEqual(context.Properties.CorrelationId);
                        message.BasicProperties.AppId.ShouldEqual(context.Properties.AppId);
                    }
                }
        }
Esempio n. 3
0
        public When_using_default_consumer_error_strategy()
        {
            var customConventions = new Conventions(new DefaultTypeNameSerializer())
            {
                ErrorQueueNamingConvention    = info => "CustomEasyNetQErrorQueueName",
                ErrorExchangeNamingConvention = info => "CustomErrorExchangePrefixName." + info.RoutingKey
            };

            mockBuilder = new MockBuilder();

            var connectionConfiguration = new ConnectionConfiguration();
            var connection = new PersistentConnection(connectionConfiguration, mockBuilder.ConnectionFactory, new EventBus());

            errorStrategy = new DefaultConsumerErrorStrategy(
                connection,
                new JsonSerializer(),
                customConventions,
                new DefaultTypeNameSerializer(),
                new DefaultErrorMessageSerializer(),
                connectionConfiguration
                );

            const string originalMessage     = "";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var context = new ConsumerExecutionContext(
                (bytes, properties, info, cancellation) => Task.FromResult(AckStrategies.Ack),
                new MessageReceivedInfo("consumerTag", 0, false, "orginalExchange", "originalRoutingKey", "queue"),
                new MessageProperties
            {
                CorrelationId = string.Empty,
                AppId         = string.Empty
            },
                originalMessageBody
                );

            try
            {
                errorAckStrategy  = errorStrategy.HandleConsumerError(context, new Exception());
                cancelAckStrategy = errorStrategy.HandleConsumerCancelled(context);
            }
            catch (Exception)
            {
                // swallow
            }
        }
        public void Should_handle_an_exception_by_writing_to_the_error_queue()
        {
            const string originalMessage     = "{ Text:\"Hello World\"}";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var deliverArgs = new BasicDeliverEventArgs
            {
                RoutingKey      = "originalRoutingKey",
                Exchange        = "orginalExchange",
                Body            = originalMessageBody,
                BasicProperties = new BasicProperties
                {
                    CorrelationId = "123",
                    AppId         = "456"
                }
            };
            var exception = new Exception("I just threw!");

            consumerErrorStrategy.HandleConsumerError(deliverArgs, exception);

            Thread.Sleep(100);

            // Now get the error message off the error queue and assert its properties
            using (var connection = connectionFactory.CreateConnection())
                using (var model = connection.CreateModel())
                {
                    var getArgs = model.BasicGet(DefaultConsumerErrorStrategy.EasyNetQErrorQueue, true);
                    if (getArgs == null)
                    {
                        Assert.Fail("Nothing on the error queue");
                    }
                    else
                    {
                        var message = serializer.BytesToMessage <Error>(getArgs.Body);

                        message.RoutingKey.ShouldEqual(deliverArgs.RoutingKey);
                        message.Exchange.ShouldEqual(deliverArgs.Exchange);
                        message.Message.ShouldEqual(originalMessage);
                        message.Exception.ShouldEqual("System.Exception: I just threw!");
                        message.DateTime.Date.ShouldEqual(DateTime.Now.Date);
                        message.BasicProperties.CorrelationId.ShouldEqual(deliverArgs.BasicProperties.CorrelationId);
                        message.BasicProperties.AppId.ShouldEqual(deliverArgs.BasicProperties.AppId);
                    }
                }
        }
Esempio n. 5
0
        public void SetUp()
        {
            var mockModel = new MockModel
            {
                ExchangeDeclareAction = (exchangeName, type, durable, autoDelete, arguments) => createdExchangeName = exchangeName,
                QueueDeclareAction    = (queue, durable, exclusive, autoDelete, arguments) =>
                {
                    createdQueueName = queue;
                    return(new QueueDeclareOk(queue, 0, 0));
                }
            };

            var customConventions = new Conventions
            {
                ErrorQueueNamingConvention    = () => "CustomEasyNetQErrorQueueName",
                ErrorExchangeNamingConvention = (originalRoutingKey) => "CustomErrorExchangePrefixName." + originalRoutingKey
            };

            errorStrategy = new DefaultConsumerErrorStrategy(new MockConnectionFactory(new MockConnection(mockModel)), new JsonSerializer(), new MockLogger(), customConventions);

            const string originalMessage     = "";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var deliverArgs = new BasicDeliverEventArgs
            {
                RoutingKey      = "originalRoutingKey",
                Exchange        = "orginalExchange",
                Body            = originalMessageBody,
                BasicProperties = new BasicProperties
                {
                    CorrelationId = string.Empty,
                    AppId         = string.Empty
                }
            };

            try
            {
                errorStrategy.HandleConsumerError(deliverArgs, new Exception());
            }
            catch (Exception exc)
            {
                // swallow
            }
        }
Esempio n. 6
0
        public void SetUp()
        {
            var customConventions = new Conventions(new TypeNameSerializer())
            {
                ErrorQueueNamingConvention    = () => "CustomEasyNetQErrorQueueName",
                ErrorExchangeNamingConvention = info => "CustomErrorExchangePrefixName." + info.RoutingKey
            };

            mockBuilder = new MockBuilder();

            errorStrategy = new DefaultConsumerErrorStrategy(
                mockBuilder.ConnectionFactory,
                new JsonSerializer(new TypeNameSerializer()),
                MockRepository.GenerateStub <IEasyNetQLogger>(),
                customConventions,
                new TypeNameSerializer(),
                new DefaultErrorMessageSerializer());

            const string originalMessage     = "";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var context = new ConsumerExecutionContext(
                (bytes, properties, arg3) => null,
                new MessageReceivedInfo("consumerTag", 0, false, "orginalExchange", "originalRoutingKey", "queue"),
                new MessageProperties
            {
                CorrelationId = string.Empty,
                AppId         = string.Empty
            },
                originalMessageBody,
                MockRepository.GenerateStub <IBasicConsumer>()
                );

            try
            {
                errorAckStrategy  = errorStrategy.HandleConsumerError(context, new Exception());
                cancelAckStrategy = errorStrategy.HandleConsumerCancelled(context);
            }
            catch (Exception)
            {
                // swallow
            }
        }
Esempio n. 7
0
        public void SetUp()
        {
            var customConventions = new Conventions
            {
                ErrorQueueNamingConvention    = () => "CustomEasyNetQErrorQueueName",
                ErrorExchangeNamingConvention = originalRoutingKey => "CustomErrorExchangePrefixName." + originalRoutingKey
            };

            mockBuilder = new MockBuilder();

            errorStrategy = new DefaultConsumerErrorStrategy(
                mockBuilder.ConnectionFactory,
                new JsonSerializer(),
                MockRepository.GenerateStub <IEasyNetQLogger>(),
                customConventions);

            const string originalMessage     = "";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var deliverArgs = new BasicDeliverEventArgs
            {
                RoutingKey      = "originalRoutingKey",
                Exchange        = "orginalExchange",
                Body            = originalMessageBody,
                BasicProperties = new BasicProperties
                {
                    CorrelationId = string.Empty,
                    AppId         = string.Empty
                }
            };

            try
            {
                errorStrategy.HandleConsumerError(deliverArgs, new Exception());
            }
            catch (Exception)
            {
                // swallow
            }
        }
        public void Should_not_reconnect_if_has_been_disposed()
        {
            const string originalMessage     = "{ Text:\"Hello World\"}";
            var          originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var exception = new Exception("I just threw!");

            var context = new ConsumerExecutionContext(
                (bytes, properties, arg3) => null,
                new MessageReceivedInfo("consumertag", 0, false, "orginalExchange", "originalRoutingKey", "queue"),
                new MessageProperties
            {
                CorrelationId = "123",
                AppId         = "456"
            },
                originalMessageBody,
                MockRepository.GenerateStub <IBasicConsumer>()
                );

            var logger = MockRepository.GenerateMock <IEasyNetQLogger>();

            connectionFactory = MockRepository.GenerateMock <IConnectionFactory>();

            consumerErrorStrategy = new DefaultConsumerErrorStrategy(
                connectionFactory,
                MockRepository.GenerateStub <ISerializer>(),
                logger,
                MockRepository.GenerateStub <IConventions>(),
                MockRepository.GenerateStub <ITypeNameSerializer>(),
                MockRepository.GenerateStub <IErrorMessageSerializer>());

            consumerErrorStrategy.Dispose();

            var ackStrategy = consumerErrorStrategy.HandleConsumerError(context, exception);

            connectionFactory.AssertWasNotCalled(f => f.CreateConnection());
            logger.AssertWasCalled(l => l.ErrorWrite(Arg.Text.Contains("DefaultConsumerErrorStrategy was already disposed"), Arg <Object> .Is.Anything));

            Assert.AreEqual(AckStrategies.NackWithRequeue, ackStrategy);
        }
Esempio n. 9
0
        public void SetUp()
        {
            var mockModel = new MockModel
                                {
                                    ExchangeDeclareAction = (exchangeName, type, durable, autoDelete, arguments) => createdExchangeName = exchangeName,
                                    QueueDeclareAction = (queue, durable, exclusive, autoDelete, arguments) =>
                                                             {
                                                                 createdQueueName = queue;
                                                                 return new QueueDeclareOk(queue, 0, 0);
                                                             }
                                };

            var customConventions = new Conventions
                                        {
                                            ErrorQueueNamingConvention = () => "CustomEasyNetQErrorQueueName",
                                            ErrorExchangeNamingConvention = (originalRoutingKey) => "CustomErrorExchangePrefixName." + originalRoutingKey
                                        };

            errorStrategy = new DefaultConsumerErrorStrategy(new MockConnectionFactory(new MockConnection(mockModel)), new JsonSerializer(), new MockLogger(), customConventions);

            const string originalMessage = "";
            var originalMessageBody = Encoding.UTF8.GetBytes(originalMessage);

            var deliverArgs = new BasicDeliverEventArgs
            {
                RoutingKey = "originalRoutingKey",
                Exchange = "orginalExchange",
                Body = originalMessageBody,
                BasicProperties = new BasicProperties
                {
                    CorrelationId = string.Empty,
                    AppId = string.Empty
                }
            };

            try
            {
                errorStrategy.HandleConsumerError(deliverArgs, new Exception());
            }
            catch (Exception exc)
            {
                // swallow
            }
        }