1   /*
2    * $Id: QuickConfigurationBuilderTestCase.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.MuleManager;
14  import org.mule.config.ConfigurationBuilder;
15  import org.mule.config.builders.QuickConfigurationBuilder;
16  import org.mule.impl.DefaultComponentExceptionStrategy;
17  import org.mule.impl.endpoint.MuleEndpoint;
18  import org.mule.impl.model.seda.SedaModel;
19  import org.mule.interceptors.InterceptorStack;
20  import org.mule.interceptors.LoggingInterceptor;
21  import org.mule.interceptors.TimerInterceptor;
22  import org.mule.management.agents.JmxAgent;
23  import org.mule.providers.SimpleRetryConnectionStrategy;
24  import org.mule.routing.ForwardingCatchAllStrategy;
25  import org.mule.routing.filters.PayloadTypeFilter;
26  import org.mule.routing.filters.xml.JXPathFilter;
27  import org.mule.routing.inbound.InboundRouterCollection;
28  import org.mule.routing.nested.NestedRouter;
29  import org.mule.routing.nested.NestedRouterCollection;
30  import org.mule.routing.response.ResponseRouterCollection;
31  import org.mule.tck.AbstractScriptConfigBuilderTestCase;
32  import org.mule.tck.testmodels.fruit.FruitCleaner;
33  import org.mule.tck.testmodels.fruit.Orange;
34  import org.mule.tck.testmodels.mule.TestCompressionTransformer;
35  import org.mule.tck.testmodels.mule.TestConnector;
36  import org.mule.tck.testmodels.mule.TestDefaultLifecycleAdapterFactory;
37  import org.mule.tck.testmodels.mule.TestEntryPointResolver;
38  import org.mule.tck.testmodels.mule.TestExceptionStrategy;
39  import org.mule.tck.testmodels.mule.TestResponseAggregator;
40  import org.mule.tck.testmodels.mule.TestTransactionManagerFactory;
41  import org.mule.transformers.NoActionTransformer;
42  import org.mule.umo.UMODescriptor;
43  import org.mule.umo.UMOInterceptorStack;
44  import org.mule.umo.endpoint.UMOEndpoint;
45  import org.mule.umo.manager.UMOAgent;
46  import org.mule.umo.manager.UMOManager;
47  import org.mule.umo.model.UMOModel;
48  import org.mule.umo.routing.UMOInboundRouterCollection;
49  import org.mule.umo.routing.UMONestedRouterCollection;
50  import org.mule.umo.routing.UMOResponseRouterCollection;
51  import org.mule.util.StringUtils;
52  
53  import java.util.ArrayList;
54  import java.util.HashMap;
55  import java.util.List;
56  import java.util.Map;
57  
58  public class QuickConfigurationBuilderTestCase extends AbstractScriptConfigBuilderTestCase
59  {
60  
61      public String getConfigResources()
62      {
63          return null;
64      }
65  
66      public ConfigurationBuilder getBuilder()
67      {
68  
69          QuickConfigurationBuilder builder = new QuickConfigurationBuilder();
70          UMOManager m = builder.getManager();
71          // Disable the admin agent
72          MuleManager.getConfiguration().setServerUrl(StringUtils.EMPTY);
73          try
74          {
75              // set global properties
76              m.setProperty("doCompression", "true");
77  
78              // Set a dummy TX manager
79              m.setTransactionManager(new TestTransactionManagerFactory().create());
80              // register agents
81              UMOAgent agent = new JmxAgent();
82              agent.setName("jmxAgent");
83              m.registerAgent(agent);
84  
85              // register connector
86              TestConnector c = new TestConnector();
87              c.setName("dummyConnector");
88              c.setExceptionListener(new TestExceptionStrategy());
89              SimpleRetryConnectionStrategy cs = new SimpleRetryConnectionStrategy();
90              cs.setRetryCount(4);
91              cs.setFrequency(3000);
92              c.setConnectionStrategy(cs);
93              m.registerConnector(c);
94  
95              // Endpoint identifiers
96              m.registerEndpointIdentifier("AppleQueue", "test://apple.queue");
97              m.registerEndpointIdentifier("Banana_Queue", "test://banana.queue");
98              m.registerEndpointIdentifier("Test Queue", "test://test.queue");
99  
100             // Register transformers
101             TestCompressionTransformer t = new TestCompressionTransformer();
102             t.setReturnClass(String.class);
103             t.setBeanProperty2(12);
104             t.setContainerProperty("");
105             t.setBeanProperty1("this was set from the manager properties!");
106             m.registerTransformer(t);
107 
108             NoActionTransformer t2 = new NoActionTransformer();
109             t2.setReturnClass(byte[].class);
110             m.registerTransformer(t2);
111 
112             // Register endpoints
113             JXPathFilter filter = new JXPathFilter("name");
114             filter.setExpectedValue("bar");
115             Map ns = new HashMap();
116             ns.put("foo", "http://foo.com");
117             filter.setNamespaces(ns);
118             builder.registerEndpoint("test://fruitBowlPublishQ", "fruitBowlEndpoint", false, null, filter);
119             builder.registerEndpoint("Test Queue", "waterMelonEndpoint", false);
120             builder.registerEndpoint("test://AppleQueue", "appleInEndpoint", true);
121             builder.registerEndpoint("test://AppleResponseQueue", "appleResponseEndpoint", false);
122             Map props = new HashMap();
123             props.put("testGlobal", "value1");
124             builder.registerEndpoint("test://orangeQ", "orangeEndpoint", false, props);
125 
126             // Register Interceptors
127             InterceptorStack stack = new InterceptorStack();
128             List interceptors = new ArrayList();
129             interceptors.add(new LoggingInterceptor());
130             interceptors.add(new TimerInterceptor());
131             stack.setInterceptors(interceptors);
132             m.registerInterceptorStack("default", stack);
133 
134             // register model
135             UMOModel model = new SedaModel();
136             model.setName("main");
137             TestExceptionStrategy es = new TestExceptionStrategy();
138             es.addEndpoint(new MuleEndpoint("test://component.exceptions", false));
139             model.setExceptionListener(es);
140             model.setLifecycleAdapterFactory(new TestDefaultLifecycleAdapterFactory());
141             model.setEntryPointResolver(new TestEntryPointResolver());
142             m.registerModel(model);
143 
144             // register components
145             UMOEndpoint ep1 = m.lookupEndpoint("appleInEndpoint");
146             ep1.setTransformer(m.lookupTransformer("TestCompressionTransformer"));
147             UMODescriptor d = builder.createDescriptor("orange", "orangeComponent", null, ep1, props);
148             d.setContainer("descriptor");
149             DefaultComponentExceptionStrategy dces = new DefaultComponentExceptionStrategy();
150             dces.addEndpoint(new MuleEndpoint("test://orange.exceptions", false));
151             d.setExceptionListener(dces);
152             // Create the inbound router
153             UMOInboundRouterCollection inRouter = new InboundRouterCollection();
154             inRouter.setCatchAllStrategy(new ForwardingCatchAllStrategy());
155             inRouter.getCatchAllStrategy().setEndpoint(new MuleEndpoint("test://catch.all", false));
156             UMOEndpoint ep2 = builder.createEndpoint("test://orange/", "Orange", true,
157                 "TestCompressionTransformer");
158             ep2.setResponseTransformer(m.lookupTransformer("TestCompressionTransformer"));
159             inRouter.addEndpoint(ep2);
160             UMOEndpoint ep3 = m.lookupEndpoint("orangeEndpoint");
161             ep3.setFilter(new PayloadTypeFilter(String.class));
162             ep3.setTransformer(m.lookupTransformer("TestCompressionTransformer"));
163             Map props2 = new HashMap();
164             props2.put("testLocal", "value1");
165             ep3.setProperties(props2);
166             inRouter.addEndpoint(ep3);
167             d.setInboundRouter(inRouter);
168 
169             //Nested Router
170             UMONestedRouterCollection nestedRouter = new NestedRouterCollection();
171             NestedRouter nr1 = new NestedRouter();
172             nr1.setEndpoint(new MuleEndpoint("test://do.wash", false));
173             nr1.setInterface(FruitCleaner.class);
174             nr1.setMethod("wash");
175             nestedRouter.addRouter(nr1);
176             NestedRouter nr2 = new NestedRouter();
177             nr2.setEndpoint(new MuleEndpoint("test://do.polish", false));
178             nr2.setInterface(FruitCleaner.class);
179             nr2.setMethod("polish");
180             nestedRouter.addRouter(nr2);
181 
182             d.setNestedRouter(nestedRouter);
183             
184             // Response Router
185             UMOResponseRouterCollection responseRouter = new ResponseRouterCollection();
186             responseRouter.addEndpoint(new MuleEndpoint("test://response1", true));
187             responseRouter.addEndpoint(m.lookupEndpoint("appleResponseEndpoint"));
188             responseRouter.addRouter(new TestResponseAggregator());
189             responseRouter.setTimeout(10001);
190             d.setResponseRouter(responseRouter);
191 
192             // Interceptors
193             UMOInterceptorStack stack2 = m.lookupInterceptorStack("default");
194             d.setInterceptors(new ArrayList(stack2.getInterceptors()));
195             d.getInterceptors().add(new TimerInterceptor());
196 
197             // properties
198             Map cprops = new HashMap();
199             cprops.put("orange", new Orange());
200             cprops.put("brand", "Juicy Baby!");
201             cprops.put("segments", "9");
202             cprops.put("radius", "4.21");
203             Map nested = new HashMap();
204             nested.put("prop1", "prop1");
205             nested.put("prop2", "prop2");
206             cprops.put("mapProperties", nested);
207             List nested2 = new ArrayList();
208             nested2.add("prop1");
209             nested2.add("prop2");
210             nested2.add("prop3");
211             cprops.put("listProperties", nested2);
212             List nested3 = new ArrayList();
213             nested3.add("prop4");
214             nested3.add("prop5");
215             nested3.add("prop6");
216             cprops.put("arrayProperties", nested3);
217             d.setProperties(cprops);
218 
219             // register components
220             m.lookupModel("main").registerComponent(d);
221             if (StringUtils.isBlank(m.getId()))
222             {
223                 // if running with JMX agent, manager ID is mandatory
224                 m.setId(String.valueOf(System.currentTimeMillis()));
225             }
226             m.start();
227         }
228         catch (Exception e)
229         {
230             e.printStackTrace();
231             fail(e.getMessage());
232         }
233         return builder;
234     }
235 }