From 714b952b58e8aef7ef0badaafe6e6fd2746a4c6b Mon Sep 17 00:00:00 2001 From: David Turanski Date: Fri, 29 Apr 2011 11:51:02 -0400 Subject: [PATCH] INT-1234 --- .../config/xml/GlobalWireTapParser.java | 19 ++++ .../GlobalWireTapTests-context.xml | 34 ++++++++ .../interceptor/GlobalWireTapTests.java | 87 +++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java new file mode 100644 index 0000000000..96f259abd3 --- /dev/null +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java @@ -0,0 +1,19 @@ +package org.springframework.integration.config.xml; + +import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.xml.ParserContext; +import org.w3c.dom.Element; + +/** + * parser for the top level 'wire-tap' element + * @author David Turanski + * @since 2.1 + * + */ +public class GlobalWireTapParser extends GlobalChannelInterceptorParser { + @Override + protected Object getBeanDefinitionBuilderConstructorValue(Element element, ParserContext parserContext){ + String wireTapBeanName = new WireTapParser().parse(element, parserContext); + return new RuntimeBeanReference(wireTapBeanName); + } +} diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml new file mode 100644 index 0000000000..8ee64f0b80 --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java new file mode 100644 index 0000000000..3338a5bc54 --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java @@ -0,0 +1,87 @@ +package org.springframework.integration.channel.interceptor; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.integration.Message; +import org.springframework.integration.MessageChannel; +import org.springframework.integration.core.PollableChannel; +import org.springframework.integration.message.GenericMessage; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +/** + * + * @author David Turanski + * + */ +@ContextConfiguration +@RunWith(SpringJUnit4ClassRunner.class) +public class GlobalWireTapTests { + + + @Autowired + @Qualifier("channel") + MessageChannel channel; + + @Autowired + @Qualifier("random-channel") + MessageChannel anotherChannel; + + + + @Autowired + @Qualifier("wiretap-single") + PollableChannel wiretapSingle; + + @Autowired + @Qualifier("wiretap-all") + PollableChannel wiretapAll; + + + + @Test + public void testWireTapsOnTargetedChannel(){ + Message message = new GenericMessage("hello"); + channel.send(message); + Message wireTapMessage = wiretapSingle.receive(100); + assertNotNull(wireTapMessage); + + //There shoud be two messages on this channel. One for 'channel' and one for 'output' + wireTapMessage = wiretapAll.receive(100); + int msgCount=0; + while (wireTapMessage != null){ + msgCount++; + assertEquals(wireTapMessage.getPayload(),message.getPayload()); + wireTapMessage = wiretapAll.receive(100); + } + + assertEquals(2,msgCount); + } + + @Test + public void testWireTapsOnRandomChannel(){ + Message message = new GenericMessage("hello"); + anotherChannel.send(message); + + //This time no message on wiretapSingle + Message wireTapMessage = wiretapSingle.receive(100); + assertNull(wireTapMessage); + + //There shoud be two messages on this channel. One for 'channel' and one for 'output' + wireTapMessage = wiretapAll.receive(100); + int msgCount=0; + while (wireTapMessage != null){ + msgCount++; + assertEquals(wireTapMessage.getPayload(),message.getPayload()); + wireTapMessage = wiretapAll.receive(100); + } + + assertEquals(2,msgCount); + } + +}