View Javadoc

1   /*
2    * $Id: ComponentDefinitionParserTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
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.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 }