From b5d213c93fbaf221c2438fb1d00d04cb7385b040 Mon Sep 17 00:00:00 2001 From: David Turanski Date: Wed, 7 Sep 2011 17:38:55 -0400 Subject: [PATCH] added tests --- .gitignore | 1 + .springBeans | 3 ++ pom.xml | 8 +--- .../integration/flow/Flow.java | 8 +++- .../integration/flow/config/FlowUtils.java | 45 ++++++++++++++++++- .../integration/flow/FlowUtilsTest.java | 8 ++++ .../integration/flow/config/xml/Bar.java | 5 +++ .../flow/config/xml/FlowWithAutowireTest.java | 15 +++++++ .../integration/flow/config/xml/Foo.java | 8 ++++ .../FlowWithAutowireTest-context.xml | 9 ++++ .../autowired/autowired-flow-context.xml | 20 +++++++++ .../resources/autowired-referenced-beans.xml | 8 ++++ 12 files changed, 127 insertions(+), 11 deletions(-) create mode 100644 src/test/java/org/springframework/integration/flow/config/xml/Bar.java create mode 100644 src/test/java/org/springframework/integration/flow/config/xml/FlowWithAutowireTest.java create mode 100644 src/test/java/org/springframework/integration/flow/config/xml/Foo.java create mode 100644 src/test/resources/FlowWithAutowireTest-context.xml create mode 100644 src/test/resources/META-INF/spring/integration/flows/autowired/autowired-flow-context.xml create mode 100644 src/test/resources/autowired-referenced-beans.xml diff --git a/.gitignore b/.gitignore index abbe282..1beb459 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target .settings +.springBeans diff --git a/.springBeans b/.springBeans index 14e9505..d38365d 100644 --- a/.springBeans +++ b/.springBeans @@ -13,6 +13,9 @@ src/test/resources/META-INF/spring/integration/flows/subflow1/subflow1-context.xml src/test/resources/TransactionalFlowTest-context.xml src/test/resources/txmanager-config.xml + src/test/resources/autowired-referenced-beans.xml + src/test/resources/META-INF/spring/integration/flows/autowired/autowired-flow-context.xml + src/test/resources/FlowWithAutowireTest-context.xml diff --git a/pom.xml b/pom.xml index 1449578..424621e 100644 --- a/pom.xml +++ b/pom.xml @@ -63,13 +63,7 @@ ${spring.framework.version} test - - - org.springframework.integration - spring-integration-jms - ${spring.integration.version} - test - + org.springframework.integration diff --git a/src/main/java/org/springframework/integration/flow/Flow.java b/src/main/java/org/springframework/integration/flow/Flow.java index 5841158..b06d351 100644 --- a/src/main/java/org/springframework/integration/flow/Flow.java +++ b/src/main/java/org/springframework/integration/flow/Flow.java @@ -12,6 +12,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionValidationException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -139,7 +140,10 @@ public class Flow implements InitializingBean, BeanNameAware, ChannelResolver, A this.flowContext.setConfigLocations(configLocations); this.flowContext.refresh(); - + + // Deep debug + // FlowUtils.displayBeansGraph(flowContext.getBeanFactory()); + // this.flowConfiguration = flowContext.getBean(FlowConfiguration.class); Assert.notNull(flowConfiguration, "flow context does not contain a flow configuration"); @@ -247,7 +251,7 @@ public class Flow implements InitializingBean, BeanNameAware, ChannelResolver, A List channelNames = Arrays.asList(this.flowContext.getBeanNamesForType(MessageChannel.class)); - Set referencedMessageChannels = FlowUtils.getReferencedMessageChannels(this.flowContext.getBeanFactory(),5); + Set referencedMessageChannels = FlowUtils.getReferencedMessageChannels(this.flowContext.getBeanFactory()); for (String referencedMessageChannel: referencedMessageChannels) { if (!channelNames.contains(referencedMessageChannel)) { diff --git a/src/main/java/org/springframework/integration/flow/config/FlowUtils.java b/src/main/java/org/springframework/integration/flow/config/FlowUtils.java index 58ba810..b62eb28 100644 --- a/src/main/java/org/springframework/integration/flow/config/FlowUtils.java +++ b/src/main/java/org/springframework/integration/flow/config/FlowUtils.java @@ -17,8 +17,11 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import org.springframework.beans.factory.config.BeanDefinition; @@ -29,6 +32,7 @@ import org.springframework.integration.MessageChannel; import org.springframework.integration.core.SubscribableChannel; import org.springframework.integration.handler.BridgeHandler; import org.springframework.util.ResourceUtils; +import org.springframework.util.StringUtils; /** * Utility functions used by the flow parsers @@ -109,12 +113,40 @@ public class FlowUtils { } } - public static Set getReferencedMessageChannels(ConfigurableListableBeanFactory beanFactory, int max) { + public static void displayBeansGraph(ConfigurableListableBeanFactory beanFactory) { + String[] beans = beanFactory.getBeanNamesForType(Object.class); + _displayDependencies(beanFactory, beans, 0); + } + + private static void _displayDependencies(ConfigurableListableBeanFactory beanFactory, String[] beans, int level) { + for (int i = 0; i < beans.length; i++) { + + System.out.println(indent(level) + beans[i]); + + String[] dependencies = beanFactory.getDependenciesForBean(beans[i]); + String[] depsArray = new String[dependencies.length]; + int index = 0; + for (String dependency : dependencies) { + if (!dependency.equals(beans[i])) { + + depsArray[index++] = dependency; + } else { + System.out.println(indent(level+1) + beans[i]); + } + } + if (depsArray.length > 0) { + _displayDependencies(beanFactory, Arrays.copyOf(depsArray, index), level + 1); + } + + } + + } + + public static Set getReferencedMessageChannels(ConfigurableListableBeanFactory beanFactory) { String[] beans = beanFactory.getBeanNamesForType(Object.class); Set messageChannels = new HashSet(); _getReferencedMessageChannels(beanFactory, beans, messageChannels); return Collections.unmodifiableSet(messageChannels); - } private static void _getReferencedMessageChannels(ConfigurableListableBeanFactory beanFactory, String[] beans, @@ -140,4 +172,13 @@ public class FlowUtils { } } + private static String indent(int size) { + String indent = ""; + for (int i = 0; i < size; i++) { + indent += " "; + } + return indent; + + } + } diff --git a/src/test/java/org/springframework/integration/flow/FlowUtilsTest.java b/src/test/java/org/springframework/integration/flow/FlowUtilsTest.java index 9c51f28..ed3261a 100644 --- a/src/test/java/org/springframework/integration/flow/FlowUtilsTest.java +++ b/src/test/java/org/springframework/integration/flow/FlowUtilsTest.java @@ -4,6 +4,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.Message; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.PublishSubscribeChannel; @@ -36,5 +38,11 @@ public class FlowUtilsTest { assertSame(message, result); } + + @Test + public void displayDependencies() { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("META-INF/spring/integration/flows/subflow5/subflow5-context.xml"); + FlowUtils.displayBeansGraph(ctx.getBeanFactory()); + } } diff --git a/src/test/java/org/springframework/integration/flow/config/xml/Bar.java b/src/test/java/org/springframework/integration/flow/config/xml/Bar.java new file mode 100644 index 0000000..b359f40 --- /dev/null +++ b/src/test/java/org/springframework/integration/flow/config/xml/Bar.java @@ -0,0 +1,5 @@ +package org.springframework.integration.flow.config.xml; + +public class Bar { + +} diff --git a/src/test/java/org/springframework/integration/flow/config/xml/FlowWithAutowireTest.java b/src/test/java/org/springframework/integration/flow/config/xml/FlowWithAutowireTest.java new file mode 100644 index 0000000..387aab0 --- /dev/null +++ b/src/test/java/org/springframework/integration/flow/config/xml/FlowWithAutowireTest.java @@ -0,0 +1,15 @@ +package org.springframework.integration.flow.config.xml; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("classpath:/FlowWithAutowireTest-context.xml") +public class FlowWithAutowireTest { + @Test + public void test() { + + } +} diff --git a/src/test/java/org/springframework/integration/flow/config/xml/Foo.java b/src/test/java/org/springframework/integration/flow/config/xml/Foo.java new file mode 100644 index 0000000..6f61f7f --- /dev/null +++ b/src/test/java/org/springframework/integration/flow/config/xml/Foo.java @@ -0,0 +1,8 @@ +package org.springframework.integration.flow.config.xml; + +import org.springframework.beans.factory.annotation.Autowired; + +public class Foo { + @Autowired + Bar bar; +} diff --git a/src/test/resources/FlowWithAutowireTest-context.xml b/src/test/resources/FlowWithAutowireTest-context.xml new file mode 100644 index 0000000..879c71b --- /dev/null +++ b/src/test/resources/FlowWithAutowireTest-context.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/src/test/resources/META-INF/spring/integration/flows/autowired/autowired-flow-context.xml b/src/test/resources/META-INF/spring/integration/flows/autowired/autowired-flow-context.xml new file mode 100644 index 0000000..9d46529 --- /dev/null +++ b/src/test/resources/META-INF/spring/integration/flows/autowired/autowired-flow-context.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/src/test/resources/autowired-referenced-beans.xml b/src/test/resources/autowired-referenced-beans.xml new file mode 100644 index 0000000..59db78f --- /dev/null +++ b/src/test/resources/autowired-referenced-beans.xml @@ -0,0 +1,8 @@ + + + + + +