예제 #1
0
        public void WhenMessageReachesMaximumNumberOfRetries_MessageIsDeadlettered()
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);

            writer.Write("{ Bar: 1 }");
            writer.Flush();
            stream.Position = 0;

            var tm = new TransportMessage {
                MessageType = typeof(Message).AssemblyQualifiedName
            };

            tm.SetBody(stream);

            Func <Task> action = () => receiver.HandOver(tm);

            action.ShouldNotThrow();
            receiver.DeadLetter.Should().NotBeEmpty();

            var transportMessage = receiver.DeadLetter.Single();

            transportMessage.DeliveryCount.Should().Be(10);
            transportMessage.Headers.Should().Contain(HeaderKeys.ExceptionReason, "Max number of retries has been reached!");
        }
예제 #2
0
        public void WhenMessageSentWithBodyWhichCannotBeDeserialized_MessageIsDeadlettered()
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);

            writer.Write("{ ; }");
            writer.Flush();
            stream.Position = 0;

            var tm = new TransportMessage {
                MessageType = typeof(Message).AssemblyQualifiedName
            };

            tm.SetBody(stream);

            Func <Task> action = () => receiver.HandOver(tm);

            action.ShouldThrow <SerializationException>();
            receiver.DeadLetter.Should().NotBeEmpty();

            var transportMessage = receiver.DeadLetter.Single();

            transportMessage.DeliveryCount.Should().Be(0);
            transportMessage.Headers.Should().Contain(HeaderKeys.ExceptionReason, "Messages which can't be deserialized are deadlettered immediately");
        }