1   /*
2    * $Id: MuleXmlConfigBuilderTestCase.java 10498 2008-01-24 10:19:31Z 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.MuleManager;
14  import org.mule.config.ConfigurationBuilder;
15  import org.mule.config.ConfigurationException;
16  import org.mule.config.builders.MuleXmlConfigurationBuilder;
17  import org.mule.impl.MuleDescriptor;
18  import org.mule.routing.outbound.AbstractOutboundRouter;
19  import org.mule.routing.response.AbstractResponseRouter;
20  import org.mule.tck.AbstractConfigBuilderTestCase;
21  import org.mule.tck.testmodels.fruit.Apple;
22  import org.mule.tck.testmodels.fruit.Orange;
23  import org.mule.tck.testmodels.mule.TestCompressionTransformer;
24  import org.mule.umo.UMODescriptor;
25  import org.mule.umo.endpoint.UMOEndpoint;
26  import org.mule.umo.routing.UMOOutboundRouterCollection;
27  import org.mule.umo.routing.UMOResponseRouterCollection;
28  import org.mule.umo.transformer.UMOTransformer;
29  import org.mule.util.properties.JXPathPropertyExtractor;
30  import org.mule.util.properties.PropertyExtractor;
31  
32  import java.util.List;
33  import java.util.Map;
34  
35  public class MuleXmlConfigBuilderTestCase extends AbstractConfigBuilderTestCase
36  {
37  
38      public String getConfigResources()
39      {
40          return "test-xml-mule-config.xml,test-xml-mule-config-split.xml,test-xml-mule-config-split-properties.xml";
41      }
42  
43      // @Override
44      public ConfigurationBuilder getBuilder()
45      {
46          try
47          {
48              return new MuleXmlConfigurationBuilder();
49          }
50          catch (ConfigurationException e)
51          {
52              fail(e.getMessage());
53              return null;
54          }
55      }
56  
57      public void testPropertyExtractorConfig() throws Exception
58      {
59          UMODescriptor d = MuleManager.getInstance()
60              .lookupModel("main")
61              .getDescriptor("propertyExtractorTestComponent");
62          assertNotNull(d);
63          UMOOutboundRouterCollection router = d.getOutboundRouter();
64          assertNotNull(router);
65          List routers = router.getRouters();
66          assertNotNull(routers);
67          assertEquals(1, routers.size());
68          AbstractOutboundRouter theRouter = (AbstractOutboundRouter)routers.get(0);
69          PropertyExtractor pe = theRouter.getPropertyExtractor();
70          assertNotNull(pe);
71          // the one we put in the config
72          assertTrue(pe instanceof JXPathPropertyExtractor);
73      }
74  
75      public void testPropertyExtractorResponseRouterConfig() throws Exception
76      {
77          UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor(
78              "propertyExtractorResponseRouterTestComponent");
79          assertNotNull(d);
80          UMOResponseRouterCollection router = d.getResponseRouter();
81          assertNotNull(router);
82          List routers = router.getRouters();
83          assertNotNull(routers);
84          assertEquals(1, routers.size());
85          AbstractResponseRouter theRouter = (AbstractResponseRouter)routers.get(0);
86          PropertyExtractor pe = theRouter.getCorrelationExtractor();
87          assertNotNull(pe);
88          // the one we put in the config
89          assertTrue(pe instanceof JXPathPropertyExtractor);
90      }
91  
92      public void testPropertyTypesConfig() throws Exception
93      {
94          UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
95          assertNotNull(d);
96          assertNotNull(d.getProperties().get("factoryObject"));
97          assertTrue(d.getProperties().get("factoryObject") instanceof Orange);
98          assertNotNull(d.getProperties().get("containerObject"));
99          assertTrue(d.getProperties().get("containerObject") instanceof Apple);
100         assertNull(d.getProperties().get("doesNotExist"));
101         assertEquals(System.getProperty("os.version"), d.getProperties().get("osVersion"));
102         assertEquals("defaultValue", d.getProperties().get("notASystemProperty"));
103         assertEquals("test1", d.getProperties().get("test1"));
104         assertEquals("test2", d.getProperties().get("test2"));
105     }
106 
107     public void testMapPropertyTypesConfig() throws Exception
108     {
109         UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
110         assertNotNull(d);
111         Map props = (Map)d.getProperties().get("propertiesMap");
112         assertNotNull(props);
113         assertNotNull(props.get("factoryObject"));
114         assertTrue(props.get("factoryObject") instanceof Orange);
115         assertNotNull(props.get("containerObject"));
116         assertTrue(props.get("containerObject") instanceof Apple);
117         assertNull(props.get("doesNotExist"));
118         assertEquals(System.getProperty("os.version"), props.get("osVersion"));
119         assertEquals("defaultValue", props.get("notASystemProperty"));
120         assertEquals("test1", props.get("test1"));
121         assertEquals("test2", props.get("test2"));
122     }
123 
124     public void testListPropertyTypesConfig() throws Exception
125     {
126         UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
127         assertNotNull(d);
128         List props = (List)d.getProperties().get("propertiesList");
129         assertNotNull(props);
130         assertEquals(6, props.size());
131         assertNotNull(props.get(0));
132         assertTrue(props.get(0) instanceof Orange);
133         assertEquals(System.getProperty("os.version"), props.get(1));
134         assertEquals("defaultValue", props.get(2));
135         assertEquals("test1", props.get(3));
136         assertEquals("test2", props.get(4));
137 
138         // Container properties are added last
139         assertNotNull(props.get(5));
140         assertTrue(props.get(5) instanceof Apple);
141     }
142 
143     public void testEndpointURIParamsConfig()
144     {
145         UMODescriptor d = MuleManager.getInstance().lookupModel("main").getDescriptor("testPropertiesComponent");
146         assertNotNull(d);
147         assertNotNull(d.getInboundEndpoint());
148         assertNotNull(d.getInboundTransformer());
149         assertNotNull(d.getInboundEndpoint().getResponseTransformer());
150     }
151 
152     // @Override
153     public void testTransformerConfig()
154     {
155         // first of all test generic transformer configuration
156         super.testTransformerConfig();
157 
158         UMOTransformer t = MuleManager.getInstance().lookupTransformer("TestCompressionTransformer");
159         assertNotNull(t);
160         assertTrue(t instanceof TestCompressionTransformer);
161 
162         // This will only work with the MuleXml Builder other implementations
163         // will have to set this proerty manually or mimic Mules behaviour
164         assertEquals("this was set from the manager properties!",
165             ((TestCompressionTransformer)t).getBeanProperty1());
166         assertEquals(12, ((TestCompressionTransformer)t).getBeanProperty2());
167 
168         assertEquals(t.getReturnClass(), java.lang.String.class);
169 
170         t = MuleManager.getInstance().lookupTransformer("TestTransformer");
171         assertNotNull(t);
172         assertEquals(t.getReturnClass(), byte[].class);
173     }
174 
175     public void testSystemPropertyOverride()
176     {
177         Map props = MuleManager.getInstance().getProperties();
178         assertNotNull(props);
179         assertEquals("default", props.get("system-prop2"));
180     }
181 
182     public void testGlobalEndpointOverrides()
183     {
184         UMOEndpoint ep = MuleManager.getInstance().lookupEndpoint("orangeEndpoint");
185         assertNotNull(ep);
186         assertEquals(1, ep.getProperties().size());
187         assertEquals("value1", ep.getProperties().get("testGlobal"));
188         assertNull(ep.getFilter());
189 
190         MuleDescriptor descriptor = (MuleDescriptor)MuleManager.getInstance().lookupModel("main").getDescriptor(
191             "orangeComponent");
192         assertNotNull(descriptor);
193         ep = descriptor.getInboundRouter().getEndpoint("orangeEndpoint");
194         assertNotNull(ep);
195         assertEquals(2, ep.getProperties().size());
196         assertEquals("value1", ep.getProperties().get("testGlobal"));
197         assertEquals("value1", ep.getProperties().get("testLocal"));
198         assertNotNull(ep.getFilter());
199     }
200 
201 }