View Javadoc

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