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!"); }
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"); }