diff --git a/org.springframework.integration.test/src/main/java/org/springframework/integration/test/matcher/HeaderMatcher.java b/org.springframework.integration.test/src/main/java/org/springframework/integration/test/matcher/HeaderMatcher.java index 2f93520216..408c5eb0ac 100644 --- a/org.springframework.integration.test/src/main/java/org/springframework/integration/test/matcher/HeaderMatcher.java +++ b/org.springframework.integration.test/src/main/java/org/springframework/integration/test/matcher/HeaderMatcher.java @@ -22,8 +22,11 @@ import org.junit.Assert; import org.springframework.integration.core.Message; import org.springframework.integration.core.MessageHeaders; +import java.util.Date; import java.util.Map; +import static org.hamcrest.CoreMatchers.is; + /** *

Are the {@link MessageHeaders} of a {@link Message} containing any entry * or multiple that match?

@@ -89,7 +92,6 @@ public class HeaderMatcher extends TypeSafeMatcher> { */ public void describeTo(Description description) { description.appendText("a Message with Headers containing ").appendDescriptionOf(matcher); - } @Factory @@ -111,4 +113,55 @@ public class HeaderMatcher extends TypeSafeMatcher> { public static Matcher> hasAllHeaders(Map entries) { return new HeaderMatcher(MapContentMatchers.hasAllEntries(entries)); } + + @Factory + public static Matcher> hasMessageId(T value) { + return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.ID, value)); + } + + @Factory + public static Matcher> hasCorrelationId(T value) { + return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.CORRELATION_ID, value)); + } + + @Factory + public static Matcher> hasSequenceNumber(Integer value) { + return hasSequenceNumber(is(value)); + } + + @Factory + public static Matcher> hasSequenceNumber(Matcher matcher) { + return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.SEQUENCE_NUMBER, matcher)); + } + + @Factory + public static Matcher> hasSequenceSize(Integer value) { + return hasSequenceSize(is(value)); + } + + @Factory + public static Matcher> hasSequenceSize(Matcher value) { + return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.SEQUENCE_SIZE, value)); + } + + @Factory + public static Matcher> hasExpirationDate(Date value) { + return hasExpirationDate(is(value.getTime())); + } + + @Factory + public static Matcher> hasExpirationDate(Matcher matcher) { + return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.EXPIRATION_DATE, matcher)); + } + + @Factory + public static Matcher> hasTimestamp(Date value) { + return hasTimestamp(is(value.getTime())); + } + + @Factory + public static Matcher> hasTimestamp(Matcher matcher) { + return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.TIMESTAMP, matcher)); + } + } \ No newline at end of file diff --git a/org.springframework.integration.test/src/test/java/org/springframework/integration/test/matcher/HeaderMatcherTests.java b/org.springframework.integration.test/src/test/java/org/springframework/integration/test/matcher/HeaderMatcherTests.java index 50adfc5c93..4e52d47c57 100644 --- a/org.springframework.integration.test/src/test/java/org/springframework/integration/test/matcher/HeaderMatcherTests.java +++ b/org.springframework.integration.test/src/test/java/org/springframework/integration/test/matcher/HeaderMatcherTests.java @@ -16,22 +16,21 @@ package org.springframework.integration.test.matcher; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.CoreMatchers.nullValue; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.springframework.integration.test.matcher.HeaderMatcher.*; - -import java.util.HashMap; -import java.util.Map; - +import org.hamcrest.Matcher; import org.junit.Before; import org.junit.Test; import org.springframework.integration.core.Message; import org.springframework.integration.message.MessageBuilder; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.springframework.integration.test.matcher.HeaderMatcher.*; + /** * @author Alex Peters * @author Iwein Fuld @@ -55,8 +54,8 @@ public class HeaderMatcherTests { @Before public void setUp() { - message = MessageBuilder.withPayload(ANY_PAYLOAD).setHeader(ANY_HEADER_KEY, - ANY_HEADER_VALUE).setHeader(OTHER_HEADER_KEY, OTHER_HEADER_VALUE).build(); + message = MessageBuilder.withPayload(ANY_PAYLOAD).setHeader(ANY_HEADER_KEY, ANY_HEADER_VALUE).setHeader( + OTHER_HEADER_KEY, OTHER_HEADER_VALUE).build(); } @Test @@ -116,17 +115,17 @@ public class HeaderMatcherTests { expectedInHeaderMap.remove(UNKNOWN_KEY); expectedInHeaderMap.put(OTHER_HEADER_KEY, ANY_HEADER_VALUE); // fails } - + @Test public void readableException_singleHeader() throws Exception { try { - assertThat(message, hasHeader("corn", "bread")); + assertThat(message, hasHeader("corn", "bread")); } - catch (AssertionError ae){ + catch (AssertionError ae) { assertTrue(ae.getMessage().contains("Expected: a Message with Headers containing ")); } } - + @Test public void readableException_allHeaders() throws Exception { try { @@ -135,8 +134,50 @@ public class HeaderMatcherTests { entries.put("chocolate", "pudding"); assertThat(message, hasAllHeaders(entries)); } - catch (AssertionError ae){ + catch (AssertionError ae) { assertTrue(ae.getMessage().contains("Expected: a Message with Headers containing ")); } } + + @Test + public void hasMessageId_sameId() throws Exception { + assertThat(message, hasMessageId(message.getHeaders().getId())); + } + + @Test + public void hasCorrelationId_() throws Exception { + Object correlationId = message.getHeaders().getId(); + message = MessageBuilder.withPayload("blabla").setCorrelationId(correlationId).build(); + assertThat(message, hasCorrelationId(correlationId)); + } + + @Test + public void hasSequenceNumber_() throws Exception { + int sequenceNumber = 123; + message = MessageBuilder.fromMessage(message).setSequenceNumber(sequenceNumber).build(); + assertThat(message, hasSequenceNumber(sequenceNumber)); + } + + @Test + public void hasSequenceSize_() throws Exception { + int sequenceSize = 123; + message = MessageBuilder.fromMessage(message).setSequenceSize(sequenceSize).build(); + assertThat(message, hasSequenceSize(sequenceSize)); + assertThat(message, hasSequenceSize(is(sequenceSize))); + } + + @Test + public void hasTimestamp_() throws Exception { + assertThat(message, hasTimestamp(new Date(message.getHeaders().getTimestamp()))); + } + + @Test + public void hasExpirationDate_() throws Exception { + Matcher anyMatcher = anything(); + assertThat(message, not(hasExpirationDate(anyMatcher))); + Date expirationDate = new Date(System.currentTimeMillis() + 10000); + message = MessageBuilder.fromMessage(message).setExpirationDate(expirationDate).build(); + assertThat(message, hasExpirationDate(expirationDate)); + assertThat(message, hasExpirationDate(not(is((System.currentTimeMillis()))))); + } }