INT-578 added test for RecipientListRouter with MessageSelectors

This commit is contained in:
Mark Fisher
2010-07-03 21:04:16 +00:00
parent 08928f9a80
commit d26c9eb197
2 changed files with 59 additions and 3 deletions

View File

@@ -59,7 +59,7 @@ import org.springframework.util.Assert;
*/
public class RecipientListRouter extends AbstractMessageRouter implements InitializingBean {
private volatile Map<MessageSelector, ? extends Collection<MessageChannel>> channelMap;
private volatile Map<MessageSelector, ? extends Collection<? extends MessageChannel>> channelMap;
/**
@@ -83,7 +83,7 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
*
* @param channelMap
*/
public void setChannelMap(Map<MessageSelector, ? extends Collection<MessageChannel>> channelMap) {
public void setChannelMap(Map<MessageSelector, ? extends Collection<? extends MessageChannel>> channelMap) {
this.channelMap = channelMap;
}
@@ -100,7 +100,8 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
@Override
protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
List<MessageChannel> recipients = new ArrayList<MessageChannel>();
Map<MessageSelector, Collection<MessageChannel>> map = new HashMap<MessageSelector, Collection<MessageChannel>>(this.channelMap);
Map<MessageSelector, Collection<? extends MessageChannel>> map =
new HashMap<MessageSelector, Collection<? extends MessageChannel>>(this.channelMap);
for (MessageSelector selector : map.keySet()) {
if (selector.accept(message)) {
recipients.addAll(map.get(selector));

View File

@@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -357,4 +358,58 @@ public class RecipientListRouterTests {
router.afterPropertiesSet();
}
@Test
public void selectors() {
QueueChannel channel1 = new QueueChannel();
QueueChannel channel2 = new QueueChannel();
QueueChannel channel3 = new QueueChannel();
QueueChannel channel4 = new QueueChannel();
QueueChannel channel5 = new QueueChannel();
QueueChannel channel6 = new QueueChannel();
RecipientListRouter router = new RecipientListRouter();
Map<MessageSelector, List<? extends MessageChannel>> channelMap =
new HashMap<MessageSelector, List<? extends MessageChannel>>();
channelMap.put(new AlwaysTrueSelector(), Collections.singletonList(channel1));
channelMap.put(new AlwaysFalseSelector(), Collections.singletonList(channel2));
List<QueueChannel> acceptList = new ArrayList<QueueChannel>();
acceptList.add(channel3);
acceptList.add(channel4);
channelMap.put(new AlwaysTrueSelector(), acceptList);
List<QueueChannel> rejectList = new ArrayList<QueueChannel>();
rejectList.add(channel5);
rejectList.add(channel6);
channelMap.put(new AlwaysFalseSelector(), rejectList);
router.setChannelMap(channelMap);
Message<?> message = new StringMessage("test");
router.handleMessage(message);
Message<?> reply1 = channel1.receive(0);
assertEquals(message, reply1);
Message<?> reply2 = channel2.receive(0);
assertNull(reply2);
Message<?> reply3 = channel3.receive(0);
assertEquals(message, reply3);
Message<?> reply4 = channel4.receive(0);
assertEquals(message, reply4);
Message<?> reply5 = channel5.receive(0);
assertNull(reply5);
Message<?> reply6 = channel6.receive(0);
assertNull(reply6);
}
private static class AlwaysTrueSelector implements MessageSelector {
public boolean accept(Message<?> message) {
return true;
}
}
private static class AlwaysFalseSelector implements MessageSelector {
public boolean accept(Message<?> message) {
return false;
}
}
}