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