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