@Test public void shouldIncludeTheStacktraceInTheHeaderOfThePublishedMessage() { recoverer = new RepublishMessageRecoverer(amqpTemplate); ByteArrayOutputStream baos = new ByteArrayOutputStream(); cause.printStackTrace(new PrintStream(baos)); final String expectedHeaderValue = baos.toString(); recoverer.recover(message, cause); assertEquals(expectedHeaderValue, message.getMessageProperties().getHeaders().get("x-exception-stacktrace")); }
@Test public void shouldPublishWithRoutingKeyPrefixedWithErrorWhenExchangeIsNotSet() { recoverer = new RepublishMessageRecoverer(amqpTemplate); recoverer.recover(message, cause); verify(amqpTemplate).send("error.some.key", message); }
@Test public void shouldPublishWithSetErrorRoutingKeyWhenExchangeAndErrorRoutingKeyProvided() { recoverer = new RepublishMessageRecoverer(amqpTemplate, "errorExchange", "errorRoutingKey"); recoverer.recover(message, cause); verify(amqpTemplate).send("errorExchange", "errorRoutingKey", message); }
@Test public void shouldPublishToProvidedExchange() { recoverer = new RepublishMessageRecoverer(amqpTemplate, "error"); recoverer.recover(message, cause); verify(amqpTemplate).send("error", "error.some.key", message); }
@Test public void shouldIncludeTheCauseMessageInTheHeaderOfThePublishedMessage() { recoverer = new RepublishMessageRecoverer(amqpTemplate); recoverer.recover(message, cause); assertEquals(cause.getCause().getMessage(), message.getMessageProperties().getHeaders().get("x-exception-message")); }
@Test public void shouldSetTheOriginalMessageExchangeOnInTheHeaders() { message.getMessageProperties().setReceivedExchange("the.original.exchange"); recoverer = new RepublishMessageRecoverer(amqpTemplate, "error"); recoverer.recover(message, cause); assertEquals("the.original.exchange", message.getMessageProperties().getHeaders().get("x-original-exchange")); }
@Test public void setDeliveryModeIfNull() { this.message.getMessageProperties().setDeliveryMode(null); this.recoverer = new RepublishMessageRecoverer(amqpTemplate, "error"); this.recoverer.setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT); recoverer.recover(this.message, this.cause); assertEquals(MessageDeliveryMode.NON_PERSISTENT, this.message.getMessageProperties().getDeliveryMode()); }
@Test public void shouldRemapDeliveryMode() { message.getMessageProperties().setDeliveryMode(null); message.getMessageProperties().setReceivedDeliveryMode(MessageDeliveryMode.PERSISTENT); recoverer = new RepublishMessageRecoverer(amqpTemplate, "error") { protected Map<? extends String, ? extends Object> additionalHeaders(Message message, Throwable cause) { message.getMessageProperties().setDeliveryMode(message.getMessageProperties().getReceivedDeliveryMode()); return null; } }; recoverer.recover(message, cause); assertEquals(MessageDeliveryMode.PERSISTENT, message.getMessageProperties().getDeliveryMode()); }