1   /*
2    * $Id: MuleXmlConfigBuilderTestCase.java 7976 2007-08-21 14:26:13Z 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.test.config;
12  
13  import org.mule.MuleException;
14  import org.mule.MuleManager;
15  import org.mule.config.ConfigurationBuilder;
16  import org.mule.config.ConfigurationException;
17  import org.mule.config.PoolingProfile;
18  import org.mule.config.ThreadingProfile;
19  import org.mule.config.builders.MuleXmlConfigurationBuilder;
20  import org.mule.config.pool.CommonsPoolFactory;
21  import org.mule.impl.MuleDescriptor;
22  import org.mule.providers.AbstractConnector;
23  import org.mule.routing.outbound.AbstractOutboundRouter;
24  import org.mule.routing.response.AbstractResponseRouter;
25  import org.mule.tck.AbstractConfigBuilderTestCase;
26  import org.mule.tck.testmodels.fruit.Apple;
27  import org.mule.tck.testmodels.fruit.Orange;
28  import org.mule.tck.testmodels.mule.TestCompressionTransformer;
29  import org.mule.umo.UMODescriptor;
30  import org.mule.umo.endpoint.UMOEndpoint;
31  import org.mule.umo.routing.UMOOutboundRouterCollection;
32  import org.mule.umo.routing.UMOResponseRouterCollection;
33  import org.mule.umo.transformer.UMOTransformer;
34  import org.mule.util.ObjectPool;
35  import org.mule.util.properties.JXPathPropertyExtractor;
36  import org.mule.util.properties.PropertyExtractor;
37  
38  import java.util.List;
39  import java.util.Map;
40  
41  public class MuleXmlConfigBuilderTestCase extends AbstractConfigBuilderTestCase
42  {
43  
44      public String getConfigResources()
45      {
46          return "test-xml-mule-config.xml,test-xml-mule-config-split.xml,test-xml-mule-config-split-properties.xml";
47      }
48  
49      public ConfigurationBuilder getBuilder()
50      {
51          try
52          {
53              return new MuleXmlConfigurationBuilder();
54          }
55          catch (ConfigurationException e)
56          {
57              fail(e.getMessage());
58              return null;
59          }
60      }
61  
62      public void testPropertyExtractorConfig() throws Exception
63      {
64          UMODescriptor d = MuleManager.getInstance()
65              .lookupModel("main")
66              .getDescriptor("propertyExtractorTestComponent");
67          assertNotNull(d);
68          UMOOutboundRouterCollection router = d.getOutboundRouter();
69          assertNotNull(router);
70          List routers = router.getRouters();
71          assertNotNull(routers);
72          assertEquals(1, routers.size());
73          AbstractOutboundRouter theRouter = (AbstractOutboundRouter)routers.get(0);
74          PropertyExtractor pe = theRouter.getPropertyExtractor();
75          assertNotNull(pe);
76          // the one we put in the config
77          assertTrue(pe instanceof JXPathPropertyExtractor);
78      }
79  
80      public void testPropertyExtractorResponseRouterConfig() throws Exception
81      {
82          UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor(
83              "propertyExtractorResponseRouterTestComponent");
84          assertNotNull(d);
85          UMOResponseRouterCollection router = d.getResponseRouter();
86          assertNotNull(router);
87          List routers = router.getRouters();
88          assertNotNull(routers);
89          assertEquals(1, routers.size());
90          AbstractResponseRouter theRouter = (AbstractResponseRouter)routers.get(0);
91          PropertyExtractor pe = theRouter.getCorrelationExtractor();
92          assertNotNull(pe);
93          // the one we put in the config
94          assertTrue(pe instanceof JXPathPropertyExtractor);
95      }
96  
97      public void testPropertyTypesConfig() throws Exception
98      {
99          UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
100         assertNotNull(d);
101         assertNotNull(d.getProperties().get("factoryObject"));
102         assertTrue(d.getProperties().get("factoryObject") instanceof Orange);
103         assertNotNull(d.getProperties().get("containerObject"));
104         assertTrue(d.getProperties().get("containerObject") instanceof Apple);
105         assertNull(d.getProperties().get("doesNotExist"));
106         assertEquals(System.getProperty("os.version"), d.getProperties().get("osVersion"));
107         assertEquals("defaultValue", d.getProperties().get("notASystemProperty"));
108         assertEquals("test1", d.getProperties().get("test1"));
109         assertEquals("test2", d.getProperties().get("test2"));
110     }
111 
112     public void testMapPropertyTypesConfig() throws Exception
113     {
114         UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
115         assertNotNull(d);
116         Map props = (Map)d.getProperties().get("propertiesMap");
117         assertNotNull(props);
118         assertNotNull(props.get("factoryObject"));
119         assertTrue(props.get("factoryObject") instanceof Orange);
120         assertNotNull(props.get("containerObject"));
121         assertTrue(props.get("containerObject") instanceof Apple);
122         assertNull(props.get("doesNotExist"));
123         assertEquals(System.getProperty("os.version"), props.get("osVersion"));
124         assertEquals("defaultValue", props.get("notASystemProperty"));
125         assertEquals("test1", props.get("test1"));
126         assertEquals("test2", props.get("test2"));
127     }
128 
129     public void testListPropertyTypesConfig() throws Exception
130     {
131         UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
132         assertNotNull(d);
133         List props = (List)d.getProperties().get("propertiesList");
134         assertNotNull(props);
135         assertEquals(6, props.size());
136         assertNotNull(props.get(0));
137         assertTrue(props.get(0) instanceof Orange);
138         assertEquals(System.getProperty("os.version"), props.get(1));
139         assertEquals("defaultValue", props.get(2));
140         assertEquals("test1", props.get(3));
141         assertEquals("test2", props.get(4));
142 
143         // Container properties are added last
144         assertNotNull(props.get(5));
145         assertTrue(props.get(5) instanceof Apple);
146     }
147 
148     public void testEndpointURIParamsConfig()
149     {
150         UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
151         assertNotNull(d);
152         assertNotNull(d.getInboundEndpoint());
153         assertNotNull(d.getInboundTransformer());
154         assertNotNull(d.getInboundEndpoint().getResponseTransformer());
155     }
156 
157     public void testTransformerConfig()
158     {
159         UMOTransformer t = MuleManager.getInstance().lookupTransformer("TestCompressionTransformer");
160         assertNotNull(t);
161         assertTrue(t instanceof TestCompressionTransformer);
162 
163         // This will only work with the MuleXml Builder other implementations
164         // will have to set this proerty manually or mimic Mules behaviour
165         assertEquals("this was set from the manager properties!",
166             ((TestCompressionTransformer)t).getBeanProperty1());
167         assertEquals(12, ((TestCompressionTransformer)t).getBeanProperty2());
168 
169         assertEquals(t.getReturnClass(), java.lang.String.class);
170 
171         t = MuleManager.getInstance().lookupTransformer("TestTransformer");
172         assertNotNull(t);
173         assertEquals(t.getReturnClass(), byte[].class);
174     }
175 
176     public void testSystemPropertyOverride()
177     {
178         Map props = MuleManager.getInstance().getProperties();
179         assertNotNull(props);
180         assertEquals("default", props.get("system-prop2"));
181     }
182 
183     /**
184      * The MuleXmlConfiguration builder provides special support for overloading
185      * config elements for threadingProfiles, queueProfiles and poolingProfiles, so
186      * that defaults can be declared in the main configuration but overiding elements
187      * can just replace certain values
188      * 
189      * @throws MuleException
190      */
191     public void testThreadingConfig() throws MuleException
192     {
193         // test config
194         ThreadingProfile tp = MuleManager.getConfiguration().getDefaultThreadingProfile();
195         assertEquals(0, tp.getMaxBufferSize());
196         assertEquals(8, tp.getMaxThreadsActive());
197         assertEquals(4, tp.getMaxThreadsIdle());
198         assertEquals(0, tp.getPoolExhaustedAction());
199         assertEquals(60001, tp.getThreadTTL());
200 
201         // test defaults
202         tp = MuleManager.getConfiguration().getComponentThreadingProfile();
203         assertEquals(0, tp.getMaxBufferSize());
204         assertEquals(8, tp.getMaxThreadsActive());
205         assertEquals(4, tp.getMaxThreadsIdle());
206         assertEquals(0, tp.getPoolExhaustedAction());
207         assertEquals(60001, tp.getThreadTTL());
208 
209         // test thatvalues not set retain a default value
210         AbstractConnector c = (AbstractConnector)MuleManager.getInstance().lookupConnector("dummyConnector");
211         tp = c.getDispatcherThreadingProfile();
212         assertEquals(2, tp.getMaxBufferSize());
213         assertEquals(8, tp.getMaxThreadsActive());
214         assertEquals(4, tp.getMaxThreadsIdle());
215         assertEquals(0, tp.getPoolExhaustedAction());
216         assertEquals(60001, tp.getThreadTTL());
217 
218         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
219             "appleComponent2");
220         tp = descriptor.getThreadingProfile();
221         assertEquals(6, tp.getMaxBufferSize());
222         assertEquals(12, tp.getMaxThreadsActive());
223         assertEquals(6, tp.getMaxThreadsIdle());
224         assertEquals(0, tp.getPoolExhaustedAction());
225         assertEquals(60001, tp.getThreadTTL());
226     }
227 
228     public void testPoolingConfig()
229     {
230         // test config
231         PoolingProfile pp = MuleManager.getConfiguration().getPoolingProfile();
232         assertEquals(8, pp.getMaxActive());
233         assertEquals(4, pp.getMaxIdle());
234         assertEquals(4000, pp.getMaxWait());
235         assertEquals(ObjectPool.DEFAULT_EXHAUSTED_ACTION, pp.getExhaustedAction());
236         assertEquals(1, pp.getInitialisationPolicy());
237         assertTrue(pp.getPoolFactory() instanceof CommonsPoolFactory);
238 
239         // test override
240         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
241             "appleComponent2");
242         pp = descriptor.getPoolingProfile();
243 
244         assertEquals(8, pp.getMaxActive());
245         assertEquals(4, pp.getMaxIdle());
246         assertEquals(4000, pp.getMaxWait());
247         assertEquals(ObjectPool.DEFAULT_EXHAUSTED_ACTION, pp.getExhaustedAction());
248         assertEquals(2, pp.getInitialisationPolicy());
249     }
250 
251     public void testGlobalEndpointOverrides()
252     {
253         UMOEndpoint ep = MuleManager.getInstance().lookupEndpoint("orangeEndpoint");
254         assertNotNull(ep);
255         assertEquals(1, ep.getProperties().size());
256         assertEquals("value1", ep.getProperties().get("testGlobal"));
257         assertNull(ep.getFilter());
258 
259         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
260             "orangeComponent");
261         assertNotNull(descriptor);
262         ep = descriptor.getInboundRouter().getEndpoint("orangeEndpoint");
263         assertNotNull(ep);
264         assertEquals(2, ep.getProperties().size());
265         assertEquals("value1", ep.getProperties().get("testGlobal"));
266         assertEquals("value1", ep.getProperties().get("testLocal"));
267         assertNotNull(ep.getFilter());
268     }
269 }