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())))));
+ }
}