View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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 }