View Javadoc

1   /*
2    * $Id: AbstractConfigBuilderTestCase.java 9206 2007-10-18 15:38:38Z holger $
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.tck;
12  
13  import org.mule.MuleException;
14  import org.mule.MuleManager;
15  import org.mule.config.PoolingProfile;
16  import org.mule.config.QueueProfile;
17  import org.mule.config.ThreadingProfile;
18  import org.mule.config.pool.CommonsPoolFactory;
19  import org.mule.impl.DefaultExceptionStrategy;
20  import org.mule.impl.MuleDescriptor;
21  import org.mule.impl.endpoint.MuleEndpoint;
22  import org.mule.interceptors.LoggingInterceptor;
23  import org.mule.interceptors.TimerInterceptor;
24  import org.mule.providers.AbstractConnector;
25  import org.mule.providers.SimpleRetryConnectionStrategy;
26  import org.mule.providers.service.TransportFactory;
27  import org.mule.routing.filters.PayloadTypeFilter;
28  import org.mule.routing.filters.RegExFilter;
29  import org.mule.routing.filters.logic.AndFilter;
30  import org.mule.routing.filters.xml.JXPathFilter;
31  import org.mule.routing.inbound.IdempotentReceiver;
32  import org.mule.routing.inbound.SelectiveConsumer;
33  import org.mule.routing.outbound.FilteringOutboundRouter;
34  import org.mule.tck.testmodels.mule.TestCatchAllStrategy;
35  import org.mule.tck.testmodels.mule.TestCompressionTransformer;
36  import org.mule.tck.testmodels.mule.TestConnector;
37  import org.mule.tck.testmodels.mule.TestExceptionStrategy;
38  import org.mule.tck.testmodels.mule.TestTransactionFactory;
39  import org.mule.umo.UMODescriptor;
40  import org.mule.umo.UMOFilter;
41  import org.mule.umo.UMOInterceptorStack;
42  import org.mule.umo.UMOTransactionConfig;
43  import org.mule.umo.endpoint.UMOEndpoint;
44  import org.mule.umo.model.UMOModel;
45  import org.mule.umo.routing.UMOInboundRouter;
46  import org.mule.umo.routing.UMOInboundRouterCollection;
47  import org.mule.umo.routing.UMOOutboundRouter;
48  import org.mule.umo.routing.UMOOutboundRouterCollection;
49  import org.mule.umo.transformer.UMOTransformer;
50  import org.mule.util.ObjectPool;
51  
52  import java.util.Map;
53  
54  public abstract class AbstractConfigBuilderTestCase extends AbstractScriptConfigBuilderTestCase
55  {
56  
57      // @Override
58      public void testManagerConfig() throws Exception
59      {
60          super.testManagerConfig();
61  
62          assertNotNull(MuleManager.getInstance().getTransactionManager());
63      }
64  
65      // @Override
66      public void testConnectorConfig() throws Exception
67      {
68          super.testConnectorConfig();
69  
70          TestConnector c = (TestConnector)MuleManager.getInstance().lookupConnector("dummyConnector");
71          assertNotNull(c);
72          assertNotNull(c.getExceptionListener());
73          assertTrue(c.getExceptionListener() instanceof TestExceptionStrategy);
74          assertNotNull(c.getConnectionStrategy());
75          assertTrue(c.getConnectionStrategy() instanceof SimpleRetryConnectionStrategy);
76          assertEquals(4, ((SimpleRetryConnectionStrategy)c.getConnectionStrategy()).getRetryCount());
77          assertEquals(3000, ((SimpleRetryConnectionStrategy)c.getConnectionStrategy()).getFrequency());
78      }
79  
80      // @Override
81      public void testGlobalEndpointConfig()
82      {
83          super.testGlobalEndpointConfig();
84  
85          UMOEndpoint endpoint = MuleManager.getInstance().lookupEndpoint("fruitBowlEndpoint");
86          assertNotNull(endpoint);
87          assertEquals(endpoint.getEndpointURI().getAddress(), "fruitBowlPublishQ");
88          assertNotNull(endpoint.getFilter());
89          JXPathFilter filter = (JXPathFilter)endpoint.getFilter();
90          assertEquals("name", filter.getExpression());
91          assertEquals("bar", filter.getExpectedValue());
92          assertEquals("http://foo.com", filter.getNamespaces().get("foo"));
93      }
94  
95      // @Override
96      public void testEndpointConfig()
97      {
98          super.testEndpointConfig();
99  
100         String endpointString = MuleManager.getInstance().lookupEndpointIdentifier("Test Queue", null);
101         assertEquals(endpointString, "test://test.queue");
102         // test that endpoints have been resolved on endpoints
103         UMOEndpoint endpoint = MuleManager.getInstance().lookupEndpoint("waterMelonEndpoint");
104         assertNotNull(endpoint);
105         assertEquals("test.queue", endpoint.getEndpointURI().getAddress());
106 
107         UMODescriptor descriptor = MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent2");
108         assertNotNull(descriptor);
109     }
110 
111     // @Override
112     public void testInterceptorStacks()
113     {
114         super.testInterceptorStacks();
115 
116         UMOInterceptorStack stack = MuleManager.getInstance().lookupInterceptorStack("default");
117         assertNotNull(stack);
118         assertEquals(2, stack.getInterceptors().size());
119         assertTrue(stack.getInterceptors().get(0) instanceof LoggingInterceptor);
120         assertTrue(stack.getInterceptors().get(1) instanceof TimerInterceptor);
121     }
122 
123     public void testExceptionStrategy2()
124     {
125         UMODescriptor descriptor = MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent");
126         assertNotNull(descriptor.getExceptionListener());
127         assertEquals(DefaultExceptionStrategy.class, descriptor.getExceptionListener().getClass());
128     }
129 
130     // @Override
131     public void testTransformerConfig()
132     {
133         super.testTransformerConfig();
134 
135         UMOTransformer t = MuleManager.getInstance().lookupTransformer("TestCompressionTransformer");
136         assertNotNull(t);
137         assertTrue(t instanceof TestCompressionTransformer);
138         assertEquals(t.getReturnClass(), java.lang.String.class);
139         assertNotNull(((TestCompressionTransformer)t).getContainerProperty());
140     }
141 
142     // @Override
143     public void testModelConfig() throws Exception
144     {
145         super.testModelConfig();
146 
147         UMOModel model = MuleManager.getInstance().lookupModel("main");
148         assertTrue(model.isComponentRegistered("appleComponent"));
149         assertTrue(model.isComponentRegistered("appleComponent2"));
150     }
151 
152     public void testOutboundRouterConfig2()
153     {
154         // test outbound message router
155         UMODescriptor descriptor = MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent");
156         assertNotNull(descriptor.getOutboundRouter());
157         UMOOutboundRouterCollection router = descriptor.getOutboundRouter();
158         assertNotNull(router.getCatchAllStrategy());
159         assertEquals(2, router.getRouters().size());
160         // check first Router
161         UMOOutboundRouter route1 = (UMOOutboundRouter)router.getRouters().get(0);
162         assertTrue(route1 instanceof FilteringOutboundRouter);
163         // todo don't currently support "transformer" property
164         // assertNotNull(((FilteringOutboundRouter) route1).getTransformer());
165 
166         UMOFilter filter = ((FilteringOutboundRouter)route1).getFilter();
167         assertNotNull(filter);
168         assertTrue(filter instanceof PayloadTypeFilter);
169         assertEquals(String.class, ((PayloadTypeFilter)filter).getExpectedType());
170 
171         // check second Router
172         UMOOutboundRouter route2 = (UMOOutboundRouter)router.getRouters().get(1);
173         assertTrue(route2 instanceof FilteringOutboundRouter);
174 
175         UMOFilter filter2 = ((FilteringOutboundRouter)route2).getFilter();
176         assertNotNull(filter2);
177         assertTrue(filter2 instanceof AndFilter);
178         UMOFilter left = ((AndFilter)filter2).getLeftFilter();
179         UMOFilter right = ((AndFilter)filter2).getRightFilter();
180         assertNotNull(left);
181         assertTrue(left instanceof RegExFilter);
182         assertEquals("the quick brown (.*)", ((RegExFilter)left).getPattern());
183         assertNotNull(right);
184         assertTrue(right instanceof RegExFilter);
185         assertEquals("(.*) brown (.*)", ((RegExFilter)right).getPattern());
186 
187         assertTrue(router.getCatchAllStrategy() instanceof TestCatchAllStrategy);
188     }
189 
190 
191     public void testInboundRouterConfig2()
192     {
193         UMODescriptor descriptor = MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent");
194         assertNotNull(descriptor.getInboundRouter());
195         UMOInboundRouterCollection messageRouter = descriptor.getInboundRouter();
196         assertNotNull(messageRouter.getCatchAllStrategy());
197         assertEquals(2, messageRouter.getRouters().size());
198         UMOInboundRouter router = (UMOInboundRouter)messageRouter.getRouters().get(0);
199         assertTrue(router instanceof SelectiveConsumer);
200         SelectiveConsumer sc = (SelectiveConsumer)router;
201 
202         assertNotNull(sc.getFilter());
203         UMOFilter filter = sc.getFilter();
204         // check first Router
205         assertTrue(filter instanceof PayloadTypeFilter);
206         assertEquals(String.class, ((PayloadTypeFilter)filter).getExpectedType());
207 
208         UMOInboundRouter router2 = (UMOInboundRouter)messageRouter.getRouters().get(1);
209         assertTrue(router2 instanceof IdempotentReceiver);
210     }
211 
212     public void testThreadingConfig() throws MuleException
213     {
214         // expected default values from the configuration;
215         // these should differ from the programmatic values!
216         
217         // globals
218         int defaultMaxBufferSize = 42;
219         int defaultMaxThreadsActive = 17;
220         int defaultMaxThreadsIdle = 3;
221         int defaultThreadPoolExhaustedAction = ThreadingProfile.WHEN_EXHAUSTED_WAIT;
222         int defaultThreadTTL = 60001;
223         
224         // for the connector
225         int connectorMaxBufferSize = 2;
226         int connectorThreadPoolExhaustedAction = ThreadingProfile.WHEN_EXHAUSTED_DISCARD_OLDEST;
227 
228         // for the component
229         int componentMaxBufferSize = 6;
230         int componentMaxThreadsActive = 12;
231         int componentMaxThreadsIdle = 6;
232         int componentThreadPoolExhaustedAction = ThreadingProfile.WHEN_EXHAUSTED_DISCARD;
233 
234         // test default config
235         ThreadingProfile tp = MuleManager.getConfiguration().getDefaultThreadingProfile();
236         assertEquals(defaultMaxBufferSize, tp.getMaxBufferSize());
237         assertEquals(defaultMaxThreadsActive, tp.getMaxThreadsActive());
238         assertEquals(defaultMaxThreadsIdle, tp.getMaxThreadsIdle());
239         assertEquals(defaultThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
240         assertEquals(defaultThreadTTL, tp.getThreadTTL());
241 
242         // test component threading profile defaults
243         tp = MuleManager.getConfiguration().getComponentThreadingProfile();
244         assertEquals(defaultMaxBufferSize, tp.getMaxBufferSize());
245         assertEquals(defaultMaxThreadsActive, tp.getMaxThreadsActive());
246         assertEquals(defaultMaxThreadsIdle, tp.getMaxThreadsIdle());
247         assertEquals(defaultThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
248         assertEquals(defaultThreadTTL, tp.getThreadTTL());
249 
250         // test that unset values retain a default value
251         AbstractConnector c = (AbstractConnector)MuleManager.getInstance().lookupConnector("dummyConnector");
252         tp = c.getDispatcherThreadingProfile();
253         // this value is configured
254         assertEquals(connectorMaxBufferSize, tp.getMaxBufferSize());
255         assertEquals(connectorThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
256         // these values should be inherited if the current ConfigBuilder supports inheritance
257         assertEquals(defaultMaxThreadsActive, tp.getMaxThreadsActive());
258         assertEquals(defaultMaxThreadsIdle, tp.getMaxThreadsIdle());
259         assertEquals(defaultThreadTTL, tp.getThreadTTL());
260 
261         // test per-component values
262         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
263             "appleComponent2");
264         tp = descriptor.getThreadingProfile();
265         // these values are configured
266         assertEquals(componentMaxBufferSize, tp.getMaxBufferSize());
267         assertEquals(componentMaxThreadsActive, tp.getMaxThreadsActive());
268         assertEquals(componentMaxThreadsIdle, tp.getMaxThreadsIdle());
269         assertEquals(componentThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
270         // this value should be inherited when if current ConfigBuilder supports inheritance
271         assertEquals(defaultThreadTTL, tp.getThreadTTL());
272     }
273 
274     public void testPoolingConfig()
275     {
276         // test MuleManager config
277         PoolingProfile pp = MuleManager.getConfiguration().getPoolingProfile();
278         assertEquals(10, pp.getMaxActive());
279         assertEquals(5, pp.getMaxIdle());
280         assertEquals(10001, pp.getMaxWait());
281         assertEquals(ObjectPool.WHEN_EXHAUSTED_WAIT, pp.getExhaustedAction());
282         assertEquals(PoolingProfile.INITIALISE_ONE, pp.getInitialisationPolicy());
283         assertTrue(pp.getPoolFactory() instanceof CommonsPoolFactory);
284 
285         // test per-descriptor overrides
286         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
287             "appleComponent2");
288         pp = descriptor.getPoolingProfile();
289 
290         assertEquals(9, pp.getMaxActive());
291         assertEquals(6, pp.getMaxIdle());
292         assertEquals(4002, pp.getMaxWait());
293         assertEquals(ObjectPool.WHEN_EXHAUSTED_FAIL, pp.getExhaustedAction());
294         assertEquals(PoolingProfile.INITIALISE_ALL, pp.getInitialisationPolicy());
295     }
296 
297     public void testQueueProfileConfig()
298     {
299         // test config
300         QueueProfile qp = MuleManager.getConfiguration().getQueueProfile();
301         assertEquals(100, qp.getMaxOutstandingMessages());
302         assertTrue(qp.isPersistent());
303 
304         // test inherit
305         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
306             "orangeComponent");
307         qp = descriptor.getQueueProfile();
308         assertEquals(100, qp.getMaxOutstandingMessages());
309         assertTrue(qp.isPersistent());
310 
311         // test override
312         descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent2");
313         qp = descriptor.getQueueProfile();
314         assertEquals(102, qp.getMaxOutstandingMessages());
315         assertFalse(qp.isPersistent());
316     }
317 
318     public void testEndpointProperties() throws Exception
319     {
320         // test transaction config
321         UMODescriptor descriptor = MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent2");
322         MuleEndpoint inEndpoint = (MuleEndpoint)descriptor.getInboundRouter().getEndpoint(
323             "transactedInboundEndpoint");
324         assertNotNull(inEndpoint);
325         assertEquals(TransportFactory.NEVER_CREATE_CONNECTOR, inEndpoint.getCreateConnector());
326         assertNotNull(inEndpoint.getProperties());
327         assertEquals("Prop1", inEndpoint.getProperties().get("testEndpointProperty"));
328     }
329 
330     public void testTransactionConfig() throws Exception
331     {
332         // test transaction config
333         UMODescriptor descriptor = MuleManager.getInstance().lookupModel("main").getDescriptor("appleComponent2");
334         UMOEndpoint inEndpoint = descriptor.getInboundRouter().getEndpoint("transactedInboundEndpoint");
335         assertNotNull(inEndpoint);
336         assertNull(descriptor.getOutboundEndpoint());
337         assertEquals(1, descriptor.getOutboundRouter().getRouters().size());
338 
339         UMOEndpoint outEndpoint = (UMOEndpoint)((UMOOutboundRouter)descriptor.getOutboundRouter()
340             .getRouters()
341             .get(0)).getEndpoints().get(0);
342 
343         assertNotNull(outEndpoint);
344         assertNotNull(inEndpoint.getTransactionConfig());
345         assertEquals(UMOTransactionConfig.ACTION_ALWAYS_BEGIN, inEndpoint.getTransactionConfig().getAction());
346         assertTrue(inEndpoint.getTransactionConfig().getFactory() instanceof TestTransactionFactory);
347         assertNull(inEndpoint.getTransactionConfig().getConstraint());
348     }
349 
350     public void testEnvironmentProperties()
351     {
352         Map props = MuleManager.getInstance().getProperties();
353         assertNotNull(props);
354         assertNotNull(props.get("doCompression"));
355         assertEquals("true", props.get("doCompression"));
356         assertNotNull(props.get("beanProperty1"));
357         assertEquals("this was set from the manager properties!", props.get("beanProperty1"));
358         assertNotNull(props.get("OS Version"));
359     }
360 }