View Javadoc

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