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