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