View Javadoc

1   /*
2    * $Id: AbstractConfigBuilderTestCase.java 12102 2008-06-19 10:56:12Z dirk.olmes $
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.DefaultExceptionStrategy;
14  import org.mule.api.DefaultMuleException;
15  import org.mule.api.MuleException;
16  import org.mule.api.component.JavaComponent;
17  import org.mule.api.config.ThreadingProfile;
18  import org.mule.api.endpoint.ImmutableEndpoint;
19  import org.mule.api.endpoint.InboundEndpoint;
20  import org.mule.api.endpoint.OutboundEndpoint;
21  import org.mule.api.routing.InboundRouter;
22  import org.mule.api.routing.InboundRouterCollection;
23  import org.mule.api.routing.NestedRouter;
24  import org.mule.api.routing.OutboundRouter;
25  import org.mule.api.routing.OutboundRouterCollection;
26  import org.mule.api.routing.filter.Filter;
27  import org.mule.api.service.Service;
28  import org.mule.api.transaction.TransactionConfig;
29  import org.mule.api.transformer.Transformer;
30  import org.mule.component.PooledJavaComponent;
31  import org.mule.config.PoolingProfile;
32  import org.mule.config.QueueProfile;
33  import org.mule.model.seda.SedaService;
34  import org.mule.routing.filters.MessagePropertyFilter;
35  import org.mule.routing.filters.PayloadTypeFilter;
36  import org.mule.routing.filters.RegExFilter;
37  import org.mule.routing.filters.logic.AndFilter;
38  import org.mule.routing.inbound.IdempotentReceiver;
39  import org.mule.routing.inbound.SelectiveConsumer;
40  import org.mule.routing.outbound.FilteringOutboundRouter;
41  import org.mule.tck.testmodels.mule.TestCatchAllStrategy;
42  import org.mule.tck.testmodels.mule.TestCompressionTransformer;
43  import org.mule.tck.testmodels.mule.TestConnector;
44  import org.mule.tck.testmodels.mule.TestExceptionStrategy;
45  import org.mule.tck.testmodels.mule.TestTransactionFactory;
46  import org.mule.transformer.TransformerUtils;
47  import org.mule.transport.AbstractConnector;
48  
49  public abstract class AbstractConfigBuilderTestCase extends AbstractScriptConfigBuilderTestCase
50  {
51  
52      public AbstractConfigBuilderTestCase(boolean legacy)
53      {
54          super(legacy);
55      }
56  
57  
58      // @Override
59      public void testManagerConfig() throws Exception
60      {
61          super.testManagerConfig();
62  
63          assertNotNull(muleContext.getTransactionManager());
64      }
65  
66      // @Override
67      public void testConnectorConfig() throws Exception
68      {
69          super.testConnectorConfig();
70  
71          TestConnector c = (TestConnector) muleContext.getRegistry().lookupConnector("dummyConnector");
72          assertNotNull(c);
73          assertNotNull(c.getExceptionListener());
74          assertTrue(c.getExceptionListener() instanceof TestExceptionStrategy);
75      }
76  
77      // @Override
78      public void testGlobalEndpointConfig() throws MuleException
79      {
80          super.testGlobalEndpointConfig();
81          ImmutableEndpoint endpoint = muleContext.getRegistry().lookupEndpointFactory().getInboundEndpoint("fruitBowlEndpoint");
82          assertNotNull(endpoint);
83          assertEquals(endpoint.getEndpointURI().getAddress(), "fruitBowlPublishQ");
84  
85          MessagePropertyFilter filter = (MessagePropertyFilter)endpoint.getFilter();
86          assertNotNull(filter);
87          assertEquals("foo=bar", filter.getExpression());
88      }
89  
90      // @Override
91      public void testEndpointConfig() throws MuleException
92      {
93          super.testEndpointConfig();
94  
95          // test that endpoints have been resolved on endpoints
96          ImmutableEndpoint endpoint = muleContext.getRegistry().lookupEndpointFactory().getInboundEndpoint("waterMelonEndpoint");
97          assertNotNull(endpoint);
98          assertEquals("UTF-8-TEST", endpoint.getEncoding());
99          assertEquals("test.queue", endpoint.getEndpointURI().getAddress());
100 
101         Service service = muleContext.getRegistry().lookupService("appleComponent2");
102         assertNotNull(service);
103     }
104 
105     public void testExceptionStrategy2()
106     {
107         Service service = muleContext.getRegistry().lookupService("appleComponent");
108         assertNotNull(service.getExceptionListener());
109         assertTrue(DefaultExceptionStrategy.class.isAssignableFrom(service.getExceptionListener().getClass()));
110     }
111 
112     // @Override
113     public void testTransformerConfig()
114     {
115         super.testTransformerConfig();
116 
117         Transformer t = muleContext.getRegistry().lookupTransformer("TestCompressionTransformer");
118         assertNotNull(t);
119         assertTrue(t instanceof TestCompressionTransformer);
120         assertEquals(t.getReturnClass(), java.lang.String.class);
121         assertNotNull(((TestCompressionTransformer) t).getContainerProperty());
122     }
123 
124     // @Override
125     public void testModelConfig() throws Exception
126     {
127         super.testModelConfig();        
128         assertNotNull(muleContext.getRegistry().lookupService("appleComponent"));
129         assertNotNull(muleContext.getRegistry().lookupService("appleComponent2"));
130     }
131 
132     public void testOutboundRouterConfig2()
133     {
134         // test outbound message router
135         Service service = muleContext.getRegistry().lookupService("appleComponent");
136         assertNotNull(service.getOutboundRouter());
137         OutboundRouterCollection router = service.getOutboundRouter();
138         assertNotNull(router.getCatchAllStrategy());
139         assertEquals(2, router.getRouters().size());
140         // check first Router
141         OutboundRouter route1 = (OutboundRouter) router.getRouters().get(0);
142         assertTrue(route1 instanceof FilteringOutboundRouter);
143         assertNotNull(((FilteringOutboundRouter) route1).getTransformers());
144         assertTrue(TransformerUtils.firstOrNull(((FilteringOutboundRouter) route1).getTransformers())
145                 instanceof TestCompressionTransformer);
146 
147         Filter filter = ((FilteringOutboundRouter) route1).getFilter();
148         assertNotNull(filter);
149         assertTrue(filter instanceof PayloadTypeFilter);
150         assertEquals(String.class, ((PayloadTypeFilter) filter).getExpectedType());
151 
152         // check second Router
153         OutboundRouter route2 = (OutboundRouter) router.getRouters().get(1);
154         assertTrue(route2 instanceof FilteringOutboundRouter);
155 
156         Filter filter2 = ((FilteringOutboundRouter) route2).getFilter();
157         assertNotNull(filter2);
158         assertTrue(filter2 instanceof AndFilter);
159         assertEquals(2,  ((AndFilter) filter2).getFilters().size());
160         Filter left = (Filter) ((AndFilter) filter2).getFilters().get(0);
161         Filter right = (Filter) ((AndFilter) filter2).getFilters().get(1);
162         assertNotNull(left);
163         assertTrue(left instanceof RegExFilter);
164         assertEquals("the quick brown (.*)", ((RegExFilter) left).getPattern());
165         assertNotNull(right);
166         assertTrue(right instanceof RegExFilter);
167         assertEquals("(.*) brown (.*)", ((RegExFilter) right).getPattern());
168 
169         assertTrue(router.getCatchAllStrategy() instanceof TestCatchAllStrategy);
170     }
171 
172 
173     public void testInboundRouterConfig2()
174     {
175         Service service = muleContext.getRegistry().lookupService("appleComponent");
176         assertNotNull(service.getInboundRouter());
177         InboundRouterCollection messageRouter = service.getInboundRouter();
178         assertNotNull(messageRouter.getCatchAllStrategy());
179         assertEquals(2, messageRouter.getRouters().size());
180         InboundRouter router = (InboundRouter) messageRouter.getRouters().get(0);
181         assertTrue(router instanceof SelectiveConsumer);
182         SelectiveConsumer sc = (SelectiveConsumer) router;
183 
184         assertNotNull(sc.getFilter());
185         Filter filter = sc.getFilter();
186         // check first Router
187         assertTrue(filter instanceof PayloadTypeFilter);
188         assertEquals(String.class, ((PayloadTypeFilter) filter).getExpectedType());
189 
190         InboundRouter router2 = (InboundRouter) messageRouter.getRouters().get(1);
191         assertTrue(router2 instanceof IdempotentReceiver);
192     }
193 
194     public void testThreadingConfig() throws DefaultMuleException
195     {
196         // expected default values from the configuration;
197         // these should differ from the programmatic values!
198 
199         // globals
200         int defaultMaxBufferSize = 42;
201         int defaultMaxThreadsActive = 16;
202         int defaultMaxThreadsIdle = 3;
203         // WAIT is 0, RUN is 4
204         int defaultThreadPoolExhaustedAction = ThreadingProfile.WHEN_EXHAUSTED_WAIT;
205         int defaultThreadTTL = 60001;
206 
207         // for the connector
208         int connectorMaxBufferSize = 2;
209 
210         // for the service
211         int componentMaxBufferSize = 6;
212         int componentMaxThreadsActive = 12;
213         int componentMaxThreadsIdle = 6;
214         int componentThreadPoolExhaustedAction = ThreadingProfile.WHEN_EXHAUSTED_DISCARD;
215 
216         // test default config
217         ThreadingProfile tp = muleContext.getDefaultThreadingProfile();
218         assertEquals(defaultMaxBufferSize, tp.getMaxBufferSize());
219         assertEquals(defaultMaxThreadsActive, tp.getMaxThreadsActive());
220         assertEquals(defaultMaxThreadsIdle, tp.getMaxThreadsIdle());
221         assertEquals(defaultThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
222         assertEquals(defaultThreadTTL, tp.getThreadTTL());
223 
224         // test service threading profile defaults
225         tp = muleContext.getDefaultComponentThreadingProfile();
226         assertEquals(defaultMaxBufferSize, tp.getMaxBufferSize());
227         assertEquals(defaultMaxThreadsActive, tp.getMaxThreadsActive());
228         assertEquals(defaultMaxThreadsIdle, tp.getMaxThreadsIdle());
229         assertEquals(defaultThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
230         assertEquals(defaultThreadTTL, tp.getThreadTTL());
231 
232         // test that unset values retain a default value
233         AbstractConnector c = (AbstractConnector) muleContext.getRegistry().lookupConnector("dummyConnector");
234         tp = c.getDispatcherThreadingProfile();
235         // this value is configured
236         assertEquals(connectorMaxBufferSize, tp.getMaxBufferSize());
237         // these values are inherited
238         assertEquals(defaultMaxThreadsActive, tp.getMaxThreadsActive());
239         assertEquals(defaultMaxThreadsIdle, tp.getMaxThreadsIdle());
240         assertEquals(defaultThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
241         assertEquals(defaultThreadTTL, tp.getThreadTTL());
242 
243         // test per-service values
244         Service service = muleContext.getRegistry().lookupService("appleComponent2");
245         assertTrue("service must be SedaService to get threading profile", service instanceof SedaService);
246         tp = ((SedaService) service).getThreadingProfile();
247         // these values are configured
248         assertEquals(componentMaxBufferSize, tp.getMaxBufferSize());
249         assertEquals(componentMaxThreadsActive, tp.getMaxThreadsActive());
250         assertEquals(componentMaxThreadsIdle, tp.getMaxThreadsIdle());
251         assertEquals(componentThreadPoolExhaustedAction, tp.getPoolExhaustedAction());
252         // this value is inherited
253         assertEquals(defaultThreadTTL, tp.getThreadTTL());
254     }
255 
256     public void testPoolingConfig()
257     {
258 //        //TODO RM* test config
259 //        PoolingProfile pp = RegistryContext.getConfiguration().getPoolingProfile();
260 //        assertEquals(10, pp.getMaxActive());
261 //        assertEquals(5, pp.getMaxIdle());
262 //        assertEquals(10001, pp.getMaxWait());
263 //        assertEquals(ObjectPool.WHEN_EXHAUSTED_WAIT, pp.getExhaustedAction());
264 //        assertEquals(PoolingProfile.INITIALISE_ONE, pp.getInitialisationPolicy());
265 //        assertTrue(pp.getPoolFactory() instanceof CommonsPoolFactory);
266 
267         // test per-descriptor overrides
268         Service service = muleContext.getRegistry().lookupService("appleComponent2");
269         PoolingProfile pp = ((PooledJavaComponent)service.getComponent()).getPoolingProfile();
270 
271         assertEquals(9, pp.getMaxActive());
272         assertEquals(6, pp.getMaxIdle());
273         assertEquals(4002, pp.getMaxWait());
274         assertEquals(PoolingProfile.WHEN_EXHAUSTED_FAIL, pp.getExhaustedAction());
275         assertEquals(PoolingProfile.INITIALISE_ALL, pp.getInitialisationPolicy());
276     }
277 
278     public void testQueueProfileConfig()
279     {
280 //        // test config
281 //        //TODO RM*
282 //        QueueProfile qp = RegistryContext.getConfiguration().getQueueProfile();
283 //        assertEquals(100, qp.getMaxOutstandingMessages());
284 //        assertTrue(qp.isPersistent());
285 
286         // test inherit
287         Service service = muleContext.getRegistry().lookupService("appleComponent2");
288         QueueProfile qp = ((SedaService)service).getQueueProfile();
289         assertEquals(102, qp.getMaxOutstandingMessages());
290         assertTrue(qp.isPersistent());
291 
292         // test override
293 //        descriptor = (MuleDescriptor)muleContext.getModel().getDescriptor("appleComponent2");
294 //        qp = descriptor.getQueueProfile();
295 //        assertEquals(102, qp.getMaxOutstandingMessages());
296 //        assertFalse(qp.isPersistent());
297     }
298 
299     public void testEndpointProperties() throws Exception
300     {
301         // test transaction config
302         Service service = muleContext.getRegistry().lookupService("appleComponent2");
303         InboundEndpoint inEndpoint = service.getInboundRouter().getEndpoint(
304                 "transactedInboundEndpoint");
305         assertNotNull(inEndpoint);
306         assertNotNull(inEndpoint.getProperties());
307         assertEquals("Prop1", inEndpoint.getProperties().get("testEndpointProperty"));
308     }
309 
310     public void testTransactionConfig() throws Exception
311     {
312         // test transaction config
313         Service apple = muleContext.getRegistry().lookupService("appleComponent2");
314         InboundEndpoint inEndpoint = apple.getInboundRouter().getEndpoint("transactedInboundEndpoint");
315         assertNotNull(inEndpoint);
316         assertEquals(1, apple.getOutboundRouter().getRouters().size());
317         assertNotNull(inEndpoint.getTransactionConfig());
318         assertEquals(TransactionConfig.ACTION_ALWAYS_BEGIN, inEndpoint.getTransactionConfig().getAction());
319         assertTrue(inEndpoint.getTransactionConfig().getFactory() instanceof TestTransactionFactory);
320         assertNull(inEndpoint.getTransactionConfig().getConstraint());
321 
322         OutboundRouter outRouter = (OutboundRouter) apple.getOutboundRouter().getRouters().get(0);
323         OutboundEndpoint outEndpoint = (OutboundEndpoint) outRouter.getEndpoints().get(0);
324         assertNotNull(outEndpoint);
325     }
326 
327     public void testEnvironmentProperties()
328     {
329         assertEquals("true", muleContext.getRegistry().lookupObject("doCompression"));
330         assertEquals("this was set from the manager properties!", muleContext.getRegistry().lookupObject("beanProperty1"));
331         assertNotNull(muleContext.getRegistry().lookupObject("OS_Version"));
332     }
333 
334 
335     public void testNestedRouterProxyCreation()
336     {
337         //Test that the proxy object was created and set on the service object
338         Service orange = muleContext.getRegistry().lookupService("orangeComponent");
339         assertNotNull(orange);
340         assertTrue(orange.getComponent() instanceof JavaComponent);
341         NestedRouter r = (NestedRouter) ((JavaComponent) orange.getComponent()).getNestedRouter().getRouters().get(0);
342         assertNotNull(r);
343 
344         //TODO Grab an instance of the service object itself and test that the proxy has been injected
345     }
346     
347     public void testMuleConfiguration()
348     {
349         assertTrue(muleContext.getConfiguration().isDefaultRemoteSync());
350         assertTrue(muleContext.getConfiguration().isDefaultSynchronousEndpoints());
351     }
352 
353 }