INT-992: adding HeaderMatchers without MessageHistory matching

This commit is contained in:
Iwein Fuld
2010-03-09 19:13:57 +00:00
parent d978fbdb2b
commit 4f90109ec5
2 changed files with 113 additions and 19 deletions

View File

@@ -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;
/**
* <h2>Are the {@link MessageHeaders} of a {@link Message} containing any entry
* or multiple that match?</h2>
@@ -89,7 +92,6 @@ public class HeaderMatcher extends TypeSafeMatcher<Message<?>> {
*/
public void describeTo(Description description) {
description.appendText("a Message with Headers containing ").appendDescriptionOf(matcher);
}
@Factory
@@ -111,4 +113,55 @@ public class HeaderMatcher extends TypeSafeMatcher<Message<?>> {
public static Matcher<Message<?>> hasAllHeaders(Map<String, ?> entries) {
return new HeaderMatcher(MapContentMatchers.hasAllEntries(entries));
}
@Factory
public static <T> Matcher<Message<?>> hasMessageId(T value) {
return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.ID, value));
}
@Factory
public static <T> Matcher<Message<?>> hasCorrelationId(T value) {
return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.CORRELATION_ID, value));
}
@Factory
public static Matcher<Message<?>> hasSequenceNumber(Integer value) {
return hasSequenceNumber(is(value));
}
@Factory
public static Matcher<Message<?>> hasSequenceNumber(Matcher<Integer> matcher) {
return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.SEQUENCE_NUMBER, matcher));
}
@Factory
public static Matcher<Message<?>> hasSequenceSize(Integer value) {
return hasSequenceSize(is(value));
}
@Factory
public static Matcher<Message<?>> hasSequenceSize(Matcher<Integer> value) {
return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.SEQUENCE_SIZE, value));
}
@Factory
public static Matcher<Message<?>> hasExpirationDate(Date value) {
return hasExpirationDate(is(value.getTime()));
}
@Factory
public static Matcher<Message<?>> hasExpirationDate(Matcher<Long> matcher) {
return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.EXPIRATION_DATE, matcher));
}
@Factory
public static Matcher<Message<?>> hasTimestamp(Date value) {
return hasTimestamp(is(value.getTime()));
}
@Factory
public static Matcher<Message<?>> hasTimestamp(Matcher<Long> matcher) {
return new HeaderMatcher(MapContentMatchers.hasEntry(MessageHeaders.TIMESTAMP, matcher));
}
}

View File

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