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