Added test for router configuration which delegates to errorChannel if channel can't be resolved

This commit is contained in:
Oleg Zhurakousky
2010-08-25 09:55:34 +00:00
parent 02d191c5d0
commit 78deab7677
2 changed files with 39 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.0.xsd">
<int:router input-channel="inputChannel" default-output-channel="errorChannel" ignore-channel-name-resolution-failures="true" >
<bean class="org.springframework.integration.router.config.RouterParserTests.NonExistingChannelRouter"/>
</int:router>
</beans>

View File

@@ -25,22 +25,30 @@ import java.util.Collection;
import java.util.Collections;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.Message;
import org.springframework.integration.MessageDeliveryException;
import org.springframework.integration.annotation.Router;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.ChannelResolver;
import org.springframework.integration.core.GenericMessage;
import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.core.MessageHandler;
import org.springframework.integration.core.MessagingTemplate;
import org.springframework.integration.core.PollableChannel;
import org.springframework.integration.core.StringMessage;
import org.springframework.integration.core.SubscribableChannel;
import org.springframework.integration.router.AbstractMessageRouter;
import org.springframework.integration.router.MethodInvokingRouter;
import org.springframework.integration.test.util.TestUtils;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
/**
* @author Mark Fisher
* @author Jonas Partner
@@ -172,6 +180,24 @@ public class RouterParserTests {
assertEquals(new Integer(3), message3.getHeaders().getSequenceNumber());
assertEquals(new Integer(3), message3.getHeaders().getSequenceSize());
}
@Test
public void testErrorChannel(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"ErrorChannelRoutingTests-context.xml", this.getClass());
MessageHandler handler = mock(MessageHandler.class);
DirectChannel inputChannel = context.getBean("inputChannel", DirectChannel.class);
SubscribableChannel errorChannel = context.getBean("errorChannel", SubscribableChannel.class);
errorChannel.subscribe(handler);
inputChannel.send(new StringMessage("fail"));
verify(handler, times(1)).handleMessage(Mockito.any(Message.class));
}
public static class NonExistingChannelRouter{
public String route(String payload){
return "foo";
}
}
public static class TestRouterImplementation extends AbstractMessageRouter {