1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.spring.parsers.specific;
12
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertFalse;
15 import static org.junit.Assert.assertNotNull;
16 import static org.junit.Assert.assertNull;
17 import static org.junit.Assert.assertTrue;
18
19 import org.mule.api.MuleContext;
20 import org.mule.api.component.JavaComponent;
21 import org.mule.api.config.ConfigurationBuilder;
22 import org.mule.api.config.ConfigurationException;
23 import org.mule.api.context.MuleContextFactory;
24 import org.mule.api.lifecycle.InitialisationException;
25 import org.mule.api.service.Service;
26 import org.mule.component.AbstractJavaComponent;
27 import org.mule.component.DefaultInterfaceBinding;
28 import org.mule.component.DefaultJavaComponent;
29 import org.mule.component.PooledJavaComponent;
30 import org.mule.component.simple.PassThroughComponent;
31 import org.mule.config.PoolingProfile;
32 import org.mule.config.spring.SpringXmlConfigurationBuilder;
33 import org.mule.config.spring.parsers.specific.ComponentDelegatingDefinitionParser.CheckExclusiveClassAttributeObjectFactoryException;
34 import org.mule.config.spring.util.SpringBeanLookup;
35 import org.mule.construct.Flow;
36 import org.mule.context.DefaultMuleContextFactory;
37 import org.mule.model.resolvers.ArrayEntryPointResolver;
38 import org.mule.model.resolvers.CallableEntryPointResolver;
39 import org.mule.model.resolvers.DefaultEntryPointResolverSet;
40 import org.mule.model.resolvers.ExplicitMethodEntryPointResolver;
41 import org.mule.model.resolvers.MethodHeaderPropertyEntryPointResolver;
42 import org.mule.model.resolvers.NoArgumentsEntryPointResolver;
43 import org.mule.model.resolvers.ReflectionEntryPointResolver;
44 import org.mule.object.PrototypeObjectFactory;
45 import org.mule.object.SingletonObjectFactory;
46 import org.mule.tck.junit4.AbstractMuleTestCase;
47 import org.mule.tck.testmodels.mule.TestComponentLifecycleAdapterFactory;
48
49 import org.junit.Test;
50 import org.springframework.beans.factory.BeanDefinitionStoreException;
51
52 public class ComponentDefinitionParserFlowTestCase extends AbstractMuleTestCase
53 {
54
55 private MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
56 private MuleContext muleContext;
57
58 @Test
59 public void testDefaultJavaComponentShortcut() throws Exception
60 {
61 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
62 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
63 muleContext = muleContextFactory.createMuleContext(configBuilder);
64 Flow service = muleContext.getRegistry().lookupObject("service1");
65 validateCorrectServiceCreation(service);
66 assertEquals(DefaultJavaComponent.class, service.getMessageProcessors().get(0).getClass());
67 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
68 .getClass());
69 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
70 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
71 assertEquals(
72 2,
73 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
74 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
75 .toArray()[0] instanceof ArrayEntryPointResolver));
76 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
77 .toArray()[1] instanceof CallableEntryPointResolver));
78 }
79
80 @Test
81 public void testDefaultJavaComponentPrototype() throws Exception
82 {
83 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
84 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
85 muleContext = muleContextFactory.createMuleContext(configBuilder);
86 Flow service = muleContext.getRegistry().lookupObject("service2");
87 validateCorrectServiceCreation(service);
88 assertEquals(DefaultJavaComponent.class, service.getMessageProcessors().get(0).getClass());
89 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
90 .getClass());
91 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
92 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
93 assertEquals(
94 1,
95 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
96 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
97 .toArray()[0] instanceof CallableEntryPointResolver));
98 }
99
100 @Test
101 public void testDefaultJavaComponentSingleton() throws Exception
102 {
103 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
104 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
105 muleContext = muleContextFactory.createMuleContext(configBuilder);
106 Flow service = muleContext.getRegistry().lookupObject("service3");
107 validateCorrectServiceCreation(service);
108 assertEquals(DefaultJavaComponent.class, service.getMessageProcessors().get(0).getClass());
109 assertEquals(SingletonObjectFactory.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
110 .getClass());
111 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
112 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
113 assertEquals(
114 1,
115 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
116 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
117 .toArray()[0] instanceof ExplicitMethodEntryPointResolver));
118
119 }
120
121 @Test
122 public void testDefaultJavaComponentSpringBean() throws Exception
123 {
124 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
125 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
126 muleContext = muleContextFactory.createMuleContext(configBuilder);
127 Flow service = muleContext.getRegistry().lookupObject("service4");
128 validateCorrectServiceCreation(service);
129 assertEquals(DefaultJavaComponent.class, service.getMessageProcessors().get(0).getClass());
130 assertEquals(SpringBeanLookup.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
131 .getClass());
132 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
133 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
134 assertEquals(
135 1,
136 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
137 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
138 .toArray()[0] instanceof NoArgumentsEntryPointResolver));
139 }
140
141 private void validatePoolingProfile(Flow service)
142 {
143 assertNotNull(((PooledJavaComponent) service.getMessageProcessors().get(0)).getPoolingProfile());
144 assertNotNull(((PooledJavaComponent) service.getMessageProcessors().get(0)).getPoolingProfile());
145
146 PoolingProfile profile = ((PooledJavaComponent) service.getMessageProcessors().get(0)).getPoolingProfile();
147 assertNotNull(profile);
148 assertEquals("exhausted:", PoolingProfile.WHEN_EXHAUSTED_FAIL, profile.getExhaustedAction());
149 assertEquals("initialisation:", PoolingProfile.INITIALISE_ALL, profile.getInitialisationPolicy());
150 assertEquals("active:", 1, profile.getMaxActive());
151 assertEquals("idle:", 2, profile.getMaxIdle());
152 assertEquals("wait:", 3, profile.getMaxWait());
153 }
154
155 @Test
156 public void testPooledJavaComponentShortcut() throws Exception
157 {
158 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
159 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
160 muleContext = muleContextFactory.createMuleContext(configBuilder);
161 Flow service = muleContext.getRegistry().lookupObject("service5");
162 validateCorrectServiceCreation(service);
163 assertEquals(PooledJavaComponent.class, service.getMessageProcessors().get(0).getClass());
164 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
165 .getClass());
166 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
167 validatePoolingProfile(service);
168 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
169 assertEquals(
170 1,
171 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
172 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
173 .toArray()[0] instanceof MethodHeaderPropertyEntryPointResolver));
174
175 }
176
177 @Test
178 public void testPooledJavaComponentPrototype() throws Exception
179 {
180 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
181 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
182 muleContext = muleContextFactory.createMuleContext(configBuilder);
183 Flow service = muleContext.getRegistry().lookupObject("service6");
184 validateCorrectServiceCreation(service);
185 assertEquals(PooledJavaComponent.class, service.getMessageProcessors().get(0).getClass());
186 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
187 .getClass());
188 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
189 validatePoolingProfile(service);
190 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
191 assertEquals(
192 1,
193 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
194 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
195 .toArray()[0] instanceof ReflectionEntryPointResolver));
196
197 }
198
199 @Test
200 public void testPooledJavaComponentSingleton() throws Exception
201 {
202 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
203 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
204 muleContext = muleContextFactory.createMuleContext(configBuilder);
205 Flow service = muleContext.getRegistry().lookupObject("service7");
206 validateCorrectServiceCreation(service);
207 assertEquals(PooledJavaComponent.class, service.getMessageProcessors().get(0).getClass());
208 assertEquals(SingletonObjectFactory.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
209 .getClass());
210 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
211 validatePoolingProfile(service);
212 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
213 assertEquals(
214 1,
215 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers().size()));
216 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet()).getEntryPointResolvers()
217 .toArray()[0] instanceof ReflectionEntryPointResolver));
218
219 }
220
221 @Test
222 public void testPooledJavaComponentSpringBean() throws Exception
223 {
224 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
225 "org/mule/config/spring/parsers/specific/component-ok-test-flow.xml");
226 muleContext = muleContextFactory.createMuleContext(configBuilder);
227 Flow service = muleContext.getRegistry().lookupObject("service8");
228 validateCorrectServiceCreation(service);
229 assertEquals(PooledJavaComponent.class, service.getMessageProcessors().get(0).getClass());
230 assertEquals(SpringBeanLookup.class, ((AbstractJavaComponent) service.getMessageProcessors().get(0)).getObjectFactory()
231 .getClass());
232 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
233 validatePoolingProfile(service);
234 assertNull(((JavaComponent) service.getMessageProcessors().get(0)).getEntryPointResolverSet());
235 }
236
237 @Test
238 public void testClassAttributeAndObjectFactory() throws Exception
239 {
240 try
241 {
242 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
243 "org/mule/config/spring/parsers/specific/component-bad-test-flow.xml");
244 muleContextFactory.createMuleContext(configBuilder);
245 throw new IllegalStateException("Expected config to fail");
246 }
247 catch (Exception e)
248 {
249 assertEquals(ConfigurationException.class, e.getClass());
250 assertEquals(InitialisationException.class, e.getCause().getClass());
251 assertEquals(BeanDefinitionStoreException.class, e.getCause().getCause().getClass());
252 assertEquals(CheckExclusiveClassAttributeObjectFactoryException.class,
253 e.getCause().getCause().getCause().getClass());
254 }
255 }
256
257 protected void validateCorrectServiceCreation(Flow service) throws Exception
258 {
259 assertNotNull(service);
260 assertNotNull(service.getMessageProcessors().get(0));
261 assertFalse(service.getMessageProcessors().get(0) instanceof PassThroughComponent);
262 assertTrue(service.getMessageProcessors().get(0) instanceof JavaComponent);
263 assertEquals(DummyComponentWithBinding.class, ((JavaComponent) service.getMessageProcessors().get(0)).getObjectType());
264 assertNotNull(((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings());
265 assertEquals(1, ((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().size());
266 assertTrue(((JavaComponent) service.getMessageProcessors().get(0)).getInterfaceBindings().get(0) instanceof DefaultInterfaceBinding);
267 assertTrue(((JavaComponent) service.getMessageProcessors().get(0)).getLifecycleAdapterFactory() instanceof TestComponentLifecycleAdapterFactory);
268
269 }
270
271 protected MuleContext createMuleContext() throws Exception
272 {
273 return null;
274 }
275 }