View Javadoc

1   /*
2    * $Id: AbstractScriptConfigBuilderTestCase.java 20385 2010-11-29 20:25:26Z dfeist $
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.tck;
12  
13  import org.mule.api.MuleException;
14  import org.mule.api.component.InterfaceBinding;
15  import org.mule.api.component.JavaComponent;
16  import org.mule.api.endpoint.ImmutableEndpoint;
17  import org.mule.api.endpoint.InboundEndpoint;
18  import org.mule.api.endpoint.OutboundEndpoint;
19  import org.mule.api.exception.MessagingExceptionHandler;
20  import org.mule.api.model.Model;
21  import org.mule.api.processor.MessageProcessor;
22  import org.mule.api.routing.OutboundRouter;
23  import org.mule.api.routing.OutboundRouterCollection;
24  import org.mule.api.service.Service;
25  import org.mule.api.transformer.Transformer;
26  import org.mule.exception.AbstractExceptionListener;
27  import org.mule.model.resolvers.LegacyEntryPointResolverSet;
28  import org.mule.routing.ForwardingCatchAllStrategy;
29  import org.mule.routing.filters.MessagePropertyFilter;
30  import org.mule.routing.outbound.OutboundPassThroughRouter;
31  import org.mule.service.ServiceAsyncReplyCompositeMessageSource;
32  import org.mule.service.ServiceCompositeMessageSource;
33  import org.mule.tck.testmodels.fruit.FruitCleaner;
34  import org.mule.tck.testmodels.mule.TestCompressionTransformer;
35  import org.mule.tck.testmodels.mule.TestEntryPointResolverSet;
36  import org.mule.tck.testmodels.mule.TestExceptionStrategy;
37  import org.mule.tck.testmodels.mule.TestResponseAggregator;
38  import org.mule.transformer.TransformerUtils;
39  import org.mule.transformer.types.DataTypeFactory;
40  
41  import java.util.List;
42  import java.util.Map;
43  
44  public abstract class AbstractScriptConfigBuilderTestCase extends FunctionalTestCase
45  {
46  
47      // use legacy entry point resolver?
48      private boolean legacy;
49  
50      protected AbstractScriptConfigBuilderTestCase()
51      {
52          this(false);
53      }
54  
55      protected AbstractScriptConfigBuilderTestCase(boolean legacy)
56      {
57          this.legacy = legacy;
58      }
59  
60      public void testManagerConfig() throws Exception
61      {
62          assertEquals("true", muleContext.getRegistry().lookupObject("doCompression"));
63          assertNotNull(muleContext.getTransactionManager());
64      }
65  
66  
67      public void testConnectorConfig() throws Exception
68      {
69          MessagingExceptionHandler es = muleContext.getRegistry().lookupModel("main").getExceptionListener();
70          assertNotNull(es);
71          assertTrue(es.getClass().getName(), es instanceof TestExceptionStrategy);
72      }
73  
74      public void testGlobalEndpointConfig() throws MuleException
75      {
76          ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(
77              "fruitBowlEndpoint");
78          assertNotNull(endpoint);
79          assertEquals(endpoint.getEndpointURI().getAddress(), "fruitBowlPublishQ");
80          
81          MessagePropertyFilter filter = (MessagePropertyFilter)endpoint.getFilter();
82          assertNotNull(filter);
83          assertEquals("foo=bar", filter.getPattern());
84  
85          ImmutableEndpoint ep = muleContext.getEndpointFactory().getInboundEndpoint("testEPWithCS");
86          assertNotNull(ep);
87      }
88  
89      public void testEndpointConfig() throws MuleException
90      {
91          // test that targets have been resolved on targets
92          ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(
93              "waterMelonEndpoint");
94          assertNotNull(endpoint);
95          // aliases no longer possible
96          assertEquals("test.queue", endpoint.getEndpointURI().getAddress());
97  
98          Service service = muleContext.getRegistry().lookupService("orangeComponent");
99          ImmutableEndpoint ep = ((ServiceCompositeMessageSource) service.getMessageSource()).getEndpoint("Orange");
100         assertNotNull(ep);
101         final List responseTransformers = ep.getResponseTransformers();
102         assertNotNull(responseTransformers);
103         assertFalse(responseTransformers.isEmpty());
104         final Object responseTransformer = responseTransformers.get(0);
105         assertTrue(responseTransformer instanceof TestCompressionTransformer);
106     }
107 
108     public void testExceptionStrategy()
109     {
110         Service service = muleContext.getRegistry().lookupService("orangeComponent");
111         assertNotNull(muleContext.getRegistry().lookupModel("main").getExceptionListener());
112         assertNotNull(service.getExceptionListener());
113 
114         assertTrue(((AbstractExceptionListener) service.getExceptionListener()).getMessageProcessors().size() > 0);
115         OutboundEndpoint ep = (OutboundEndpoint) ((AbstractExceptionListener) service.getExceptionListener()).getMessageProcessors().get(0);
116 
117         assertEquals("test://orange.exceptions", ep.getEndpointURI().toString());
118     }
119 
120     public void testTransformerConfig()
121     {
122         Transformer t = muleContext.getRegistry().lookupTransformer("TestCompressionTransformer");
123         assertNotNull(t);
124         assertTrue(t instanceof TestCompressionTransformer);
125         assertEquals(t.getReturnDataType(), DataTypeFactory.STRING);
126         assertNotNull(((TestCompressionTransformer) t).getContainerProperty());
127     }
128 
129     public void testModelConfig() throws Exception
130     {
131         Model model = muleContext.getRegistry().lookupModel("main");
132         assertNotNull(model);
133         assertEquals("main", model.getName());
134         if (legacy)
135         {
136             assertTrue(model.getEntryPointResolverSet() instanceof LegacyEntryPointResolverSet);
137         }
138         else
139         {
140             assertTrue(model.getEntryPointResolverSet() instanceof TestEntryPointResolverSet);
141         }
142         assertTrue(model.getExceptionListener() instanceof TestExceptionStrategy);
143 
144         assertTrue(((AbstractExceptionListener) model.getExceptionListener()).getMessageProcessors().size() > 0);
145         OutboundEndpoint ep = (OutboundEndpoint) ((AbstractExceptionListener) model.getExceptionListener()).getMessageProcessors().get(0);
146 
147         assertEquals("test://component.exceptions", ep.getEndpointURI().toString());
148 
149         // assertTrue(model.isComponentRegistered("orangeComponent"));
150     }
151 
152     /*
153      * Since MULE-1933, Service no longer has properties and most properties are set on endpoint.
154      * So lets continue to test properties, but on targets instead.
155      */
156     public void testEndpointPropertiesConfig() throws Exception
157     {
158         ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(
159             "endpointWithProps");
160 
161         Map props = endpoint.getProperties();
162         assertNotNull(props);
163         assertEquals("9", props.get("segments"));
164         assertEquals("4.21", props.get("radius"));
165         assertEquals("Juicy Baby!", props.get("brand"));
166 
167         assertNotNull(props.get("listProperties"));
168         List list = (List) props.get("listProperties");
169         assertEquals(3, list.size());
170         assertEquals("prop1", list.get(0));
171         assertEquals("prop2", list.get(1));
172         assertEquals("prop3", list.get(2));
173 
174         assertNotNull(props.get("arrayProperties"));
175         list = (List) props.get("arrayProperties");
176         assertEquals(3, list.size());
177         assertEquals("prop4", list.get(0));
178         assertEquals("prop5", list.get(1));
179         assertEquals("prop6", list.get(2));
180 
181         assertNotNull(props.get("mapProperties"));
182         props = (Map) props.get("mapProperties");
183         assertEquals("prop1", props.get("prop1"));
184         assertEquals("prop2", props.get("prop2"));
185 
186         assertEquals(6, endpoint.getProperties().size());
187     }
188 
189     public void testOutboundRouterConfig()
190     {
191         // test outbound message router
192         Service service = muleContext.getRegistry().lookupService("orangeComponent");
193         assertNotNull(service.getOutboundMessageProcessor());
194         OutboundRouterCollection router = (OutboundRouterCollection) service.getOutboundMessageProcessor();
195         assertNull(router.getCatchAllStrategy());
196         assertEquals(1, router.getRoutes().size());
197         // check first Router
198         OutboundRouter route1 = (OutboundRouter) router.getRoutes().get(0);
199         assertTrue(route1 instanceof OutboundPassThroughRouter);
200         assertEquals(1, route1.getRoutes().size());
201     }
202 
203     public void testBindingConfig()
204     {
205         // test outbound message router
206         Service service = muleContext.getRegistry().lookupService("orangeComponent");
207         assertNotNull(service.getComponent());
208         assertTrue(service.getComponent() instanceof JavaComponent);
209         List<InterfaceBinding> bindings= ((JavaComponent) service.getComponent()).getInterfaceBindings();
210         assertNotNull(bindings);
211 
212         assertEquals(2, bindings.size());
213         // check first Router
214         InterfaceBinding route1 = bindings.get(0);
215         assertEquals(FruitCleaner.class, route1.getInterface());
216         assertEquals("wash", route1.getMethod());
217         assertNotNull(route1.getEndpoint());
218         // check second Router
219         InterfaceBinding route2 = bindings.get(1);
220         assertEquals(FruitCleaner.class, route2.getInterface());
221         assertEquals("polish", route2.getMethod());
222         assertNotNull(route1.getEndpoint());
223     }
224 
225     public void testDescriptorEndpoints()
226     {
227         Service service = muleContext.getRegistry().lookupService("orangeComponent");
228         assertEquals(1, ((OutboundRouterCollection) service.getOutboundMessageProcessor()).getRoutes().size());
229         OutboundRouter router = (OutboundRouter) ((OutboundRouterCollection)service.getOutboundMessageProcessor()).getRoutes().get(0);
230         assertEquals(1, router.getRoutes().size());
231         MessageProcessor mp = router.getRoutes().get(0);
232         assertNotNull(mp);
233         assertTrue(mp instanceof ImmutableEndpoint);
234         ImmutableEndpoint endpoint = (ImmutableEndpoint) mp;
235         assertNotNull(endpoint);
236         assertEquals("appleInEndpoint", endpoint.getName());
237         assertNotNull(endpoint.getTransformers());
238         assertTrue(TransformerUtils.firstOrNull(endpoint.getTransformers()) instanceof TestCompressionTransformer);
239 
240         assertEquals(2, ((ServiceCompositeMessageSource) service.getMessageSource()).getEndpoints().size());
241         assertNotNull(((ServiceCompositeMessageSource) service.getMessageSource()).getCatchAllStrategy());
242         assertTrue(((ServiceCompositeMessageSource) service.getMessageSource()).getCatchAllStrategy() instanceof ForwardingCatchAllStrategy);
243         ForwardingCatchAllStrategy fcas = (ForwardingCatchAllStrategy)((ServiceCompositeMessageSource) service.getMessageSource()).getCatchAllStrategy();
244         assertNotNull(fcas.getEndpoint());
245         assertEquals("test://catch.all", fcas.getEndpoint().getEndpointURI().toString());
246         endpoint = ((ServiceCompositeMessageSource) service.getMessageSource()).getEndpoint("orangeEndpoint");
247         assertNotNull(endpoint);
248         assertEquals("orangeEndpoint", endpoint.getName());
249         assertEquals("orangeQ", endpoint.getEndpointURI().getAddress());
250         assertNotNull(endpoint.getTransformers());
251         assertTrue(TransformerUtils.firstOrNull(endpoint.getTransformers()) instanceof TestCompressionTransformer);
252     }
253 
254     public void testInboundRouterConfig()
255     {
256         Service service = muleContext.getRegistry().lookupService("orangeComponent");
257         assertNotNull(service.getMessageSource());
258         ServiceCompositeMessageSource messageRouter = (ServiceCompositeMessageSource) service.getMessageSource();
259         assertNotNull(messageRouter.getCatchAllStrategy());
260         assertEquals(0, messageRouter.getMessageProcessors().size());
261         assertTrue(messageRouter.getCatchAllStrategy() instanceof ForwardingCatchAllStrategy);
262         assertEquals(2, messageRouter.getEndpoints().size());
263     }
264 
265     public void testResponseRouterConfig()
266     {
267         Service service = muleContext.getRegistry().lookupService("orangeComponent");
268         assertNotNull(service.getAsyncReplyMessageSource());
269         
270         ServiceAsyncReplyCompositeMessageSource messageRouter = service.getAsyncReplyMessageSource();
271         assertNull(messageRouter.getCatchAllStrategy());
272         assertEquals(10001, messageRouter.getTimeout().longValue());
273         assertEquals(1, messageRouter.getMessageProcessors().size());
274         
275         MessageProcessor router = messageRouter.getMessageProcessors().get(0);
276         assertTrue(router instanceof TestResponseAggregator);
277         assertNotNull(messageRouter.getEndpoints());
278         assertEquals(2, messageRouter.getEndpoints().size());
279         
280         InboundEndpoint ep = messageRouter.getEndpoints().get(0);
281         assertEquals("response1", ep.getEndpointURI().getAddress());
282         
283         ep = messageRouter.getEndpoints().get(1);
284         assertEquals("AppleResponseQueue", ep.getEndpointURI().getAddress());
285     }
286 }