View Javadoc

1   /*
2    * $Id: ComponentDefinitionParserServiceTestCase.java 22460 2011-07-20 07:44:33Z claude.mamo $
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 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 }