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;
8   
9   import org.mule.api.MuleContext;
10  import org.mule.api.config.ConfigurationBuilder;
11  import org.mule.api.config.ConfigurationException;
12  import org.mule.api.config.MuleConfiguration;
13  import org.mule.api.config.MuleProperties;
14  import org.mule.api.context.WorkManager;
15  import org.mule.api.lifecycle.InitialisationException;
16  import org.mule.api.model.Model;
17  import org.mule.config.DefaultMuleConfiguration;
18  import org.mule.config.builders.AbstractConfigurationBuilder;
19  import org.mule.config.builders.SimpleConfigurationBuilder;
20  import org.mule.context.DefaultMuleContextBuilder;
21  import org.mule.context.DefaultMuleContextFactory;
22  import org.mule.context.notification.ServerNotificationManager;
23  import org.mule.lifecycle.MuleContextLifecycleManager;
24  import org.mule.model.seda.SedaModel;
25  import org.mule.tck.junit4.AbstractMuleTestCase;
26  import org.mule.tck.testmodels.fruit.Banana;
27  
28  import java.util.ArrayList;
29  import java.util.List;
30  import java.util.Properties;
31  
32  import javax.resource.spi.work.WorkListener;
33  
34  import org.junit.Test;
35  
36  import static junit.framework.Assert.assertNotNull;
37  import static org.junit.Assert.assertEquals;
38  import static org.junit.Assert.assertNull;
39  import static org.junit.Assert.assertTrue;
40  
41  public class DefaultMuleContextFactoryTestCase extends AbstractMuleTestCase
42  {
43  
44      private DefaultMuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
45      private static String TEST_STRING_KEY = "test";
46      private static String TEST_STRING_VALUE = "test_value";
47      private static String TEST_STRING_KEY2 = "test2";
48      private static String TEST_STRING_VALUE2 = "test_value2";
49      private static String TEST_OBJECT_NAME = "testObject";
50      private static String TEST_MODEL_NAME = "testModel";
51  
52      @Test
53      public void testCreateMuleContext() throws InitialisationException, ConfigurationException
54      {
55          MuleContext muleContext = muleContextFactory.createMuleContext();
56  
57          // Assert MuleContext config
58          testMuleContext(muleContext);
59  
60          testDefaults(muleContext);
61      }
62  
63      @Test
64      public void testCreateMuleContextConfigurationBuilder() throws InitialisationException, ConfigurationException
65      {
66          MuleContext muleContext = muleContextFactory.createMuleContext(new TestConfigurationBuilder());
67  
68          // Assert MuleContext config
69          testMuleContext(muleContext);
70  
71          testConfigurationBuilder1Objects(muleContext);
72  
73          testNoDefaults(muleContext);
74      }
75  
76      @Test
77      public void testCreateMuleContextListMuleContextBuilder() throws InitialisationException, ConfigurationException
78      {
79          List<ConfigurationBuilder> configBuilders = new ArrayList<ConfigurationBuilder>();
80          configBuilders.add(new TestConfigurationBuilder());
81          configBuilders.add(new TestConfigurationBuilder2());
82  
83          TestMuleContextBuilder muleContextBuilder = new TestMuleContextBuilder();
84          MuleContext muleContext = muleContextFactory.createMuleContext(configBuilders, muleContextBuilder);
85  
86          // Assert MuleContext config
87          testCustomMuleContext(muleContext);
88  
89          // Assert configured objects
90          testConfigurationBuilder1Objects(muleContext);
91          testConfigurationBuilder2Objects(muleContext);
92  
93          testNoDefaults(muleContext);
94      }
95  
96      @Test
97      public void testCreateMuleContextMuleContextBuilder() throws InitialisationException, ConfigurationException
98      {
99          TestMuleContextBuilder muleContextBuilder = new TestMuleContextBuilder();
100         MuleContext muleContext = muleContextFactory.createMuleContext(new SimpleConfigurationBuilder(null), muleContextBuilder);
101 
102         // Assert MuleContext config
103         testCustomMuleContext(muleContext);
104 
105         testNoDefaults(muleContext);
106     }
107 
108     @Test
109     public void testCreateMuleContextConfigurationBuilderMuleContextBuilder()
110         throws InitialisationException, ConfigurationException
111     {
112 
113         TestMuleContextBuilder muleContextBuilder = new TestMuleContextBuilder();
114         MuleContext muleContext = muleContextFactory.createMuleContext(new TestConfigurationBuilder2(),
115             muleContextBuilder);
116 
117         // Assert MuleContext config
118         testCustomMuleContext(muleContext);
119 
120         testConfigurationBuilder2Objects(muleContext);
121 
122         testNoDefaults(muleContext);
123     }
124 
125     @Test
126     public void testCreateMuleContextString() throws InitialisationException, ConfigurationException
127     {
128         MuleContext muleContext = null;
129         try
130         {
131             muleContext = muleContextFactory.createMuleContext("log4j.properties");
132 
133         }
134         catch (ConfigurationException e)
135         {
136             assertEquals(
137                 "No suitable configuration builder for resource \"[ConfigResource{resourceName='log4j.properties'}]\" found.  "
138                                 + "Check you have configuration module on your classpath and are using correct file extension. "
139                                 + "(org.mule.api.config.ConfigurationException)", e.getMessage());
140         }
141         assertNull(muleContext);
142     }
143 
144     @Test
145     public void testCreateMuleContextStringProperties() throws InitialisationException, ConfigurationException
146     {
147         Properties properties = new Properties();
148         properties.put("testKey1", "testValue1");
149         properties.put("testKey2", "testValue2");
150 
151         MuleContext muleContext = null;
152         try
153         {
154             muleContext = muleContextFactory.createMuleContext("log4j.properties", properties);
155 
156         }
157         catch (ConfigurationException e)
158         {
159             assertEquals(
160                 "No suitable configuration builder for resource \"[ConfigResource{resourceName='log4j.properties'}]\" found.  "
161                                 + "Check you have configuration module on your classpath and are using correct file extension. "
162                                 + "(org.mule.api.config.ConfigurationException)", e.getMessage());
163         }
164 
165         assertNull(muleContext);
166     }
167 
168     @Test
169     public void testCreateMuleContextConfigurationBuilderProperties()
170         throws InitialisationException, ConfigurationException
171     {
172         Properties properties = new Properties();
173         properties.put("testKey3", "testValue3");
174         properties.put("testKey4", "testValue4");
175 
176         MuleContext muleContext = muleContextFactory.createMuleContext(new TestConfigurationBuilder(), properties);
177 
178         // Assert MuleContext config
179         testMuleContext(muleContext);
180 
181         testConfigurationBuilder1Objects(muleContext);
182         assertEquals("testValue3", muleContext.getRegistry().lookupObject("testKey3"));
183         assertEquals("testValue4", muleContext.getRegistry().lookupObject("testKey4"));
184 
185         testNoDefaults(muleContext);
186     }
187 
188     private void testDefaults(MuleContext muleContext)
189     {
190         // Asert existance of defauts in registry
191         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_QUEUE_MANAGER));
192         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SECURITY_MANAGER));
193         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SYSTEM_MODEL));
194         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_ENDPOINT_FACTORY));
195         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_SIMPLE_REGISTRY_BOOTSTRAP));
196     }
197 
198     private void testNoDefaults(MuleContext muleContext)
199     {
200         // Asert non-existance of defauts in registry
201         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_QUEUE_MANAGER));
202         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SECURITY_MANAGER));
203         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SYSTEM_MODEL));
204         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_ENDPOINT_FACTORY));
205         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_SIMPLE_REGISTRY_BOOTSTRAP));
206     }
207 
208     private void testMuleContext(MuleContext muleContext)
209     {
210         assertNotNull(muleContext);
211         assertEquals(DefaultMuleContext.class, muleContext.getClass());
212         assertTrue(muleContext.isInitialised());
213         assertNotNull(muleContext.getConfiguration());
214         assertEquals(DefaultMuleConfiguration.class, muleContext.getConfiguration().getClass());
215         assertNotNull(muleContext.getLifecycleManager().getClass());
216 //        assertEquals(2, muleContext.getLifecycleManager().getLifecyclePairs().size());
217 //        assertNotNull(muleContext.getLifecycleManager().getLifecyclePairs().get(0));
218 //        assertNotNull(muleContext.getLifecycleManager().getLifecyclePairs().get(1));
219         assertNotNull(muleContext.getNotificationManager());
220         assertNotNull(muleContext.getWorkManager());
221     }
222 
223     private void testCustomMuleContext(MuleContext muleContext)
224     {
225         assertNotNull(muleContext);
226         assertEquals(TestMuleContext.class, muleContext.getClass());
227         assertTrue(muleContext.isInitialised());
228         assertNotNull(muleContext.getConfiguration());
229         //assertEquals(TestMuleConfiguration.class, muleContext.getConfiguration().getClass());
230         assertNotNull(muleContext.getLifecycleManager().getClass());
231 //        assertEquals(2, muleContext.getLifecycleManager().getLifecyclePairs().size());
232 //        assertNotNull(muleContext.getLifecycleManager().getLifecyclePairs().get(0));
233 //        assertNotNull(muleContext.getLifecycleManager().getLifecyclePairs().get(1));
234         assertNotNull(muleContext.getNotificationManager());
235         assertNotNull(muleContext.getWorkManager());
236     }
237 
238     private void testConfigurationBuilder1Objects(MuleContext muleContext)
239     {
240         // Test Registry contents for existance of object configured by
241         // TestConfigurationBuilder
242         assertEquals(TEST_STRING_VALUE, muleContext.getRegistry().lookupObject(TEST_STRING_KEY));
243         
244         Object obj = muleContext.getRegistry().lookupObject(TEST_OBJECT_NAME);
245         assertNotNull(obj);
246         assertEquals(Banana.class, obj.getClass());
247     }
248 
249     private void testConfigurationBuilder2Objects(MuleContext muleContext)
250     {
251         // Test Registry contents for existance of object configured by
252         // TestConfigurationBuilder2
253         assertEquals(TEST_STRING_VALUE2, muleContext.getRegistry().lookupObject(TEST_STRING_KEY2));
254         assertNotNull(muleContext.getRegistry().lookupModel(TEST_MODEL_NAME));
255         assertEquals(TEST_MODEL_NAME, muleContext.getRegistry().lookupModel(TEST_MODEL_NAME).getName());
256     }
257 
258     /**
259      * Override, we don't want a {@link MuleContext} created for this test case.
260      */
261     protected MuleContext createMuleContext() throws Exception
262     {
263         return null;
264     }
265 
266     static class TestConfigurationBuilder extends AbstractConfigurationBuilder
267     {
268         protected void doConfigure(MuleContext muleContext) throws Exception
269         {
270             muleContext.getRegistry().registerObject(TEST_STRING_KEY, TEST_STRING_VALUE);
271             muleContext.getRegistry().registerObject(TEST_OBJECT_NAME, new Banana());
272         }
273     }
274 
275     static class TestConfigurationBuilder2 extends AbstractConfigurationBuilder
276     {
277         protected void doConfigure(MuleContext muleContext) throws Exception
278         {
279             muleContext.getRegistry().registerObject(TEST_STRING_KEY2, TEST_STRING_VALUE2);
280             Model testModel = new SedaModel();
281             testModel.setName(TEST_MODEL_NAME);
282             muleContext.getRegistry().registerModel(testModel);
283         }
284     }
285 
286     static class TestMuleContextBuilder extends DefaultMuleContextBuilder
287     {
288         public MuleContext buildMuleContext()
289         {
290             MuleContextLifecycleManager lifecycleManager = getLifecycleManager();
291 
292             MuleContext muleContext = new TestMuleContext(getMuleConfiguration(),
293                                                              getWorkManager(),
294                                                              getWorkListener(),
295                                                              lifecycleManager,
296                                                              getNotificationManager());
297             lifecycleManager.setMuleContext(muleContext);
298             return muleContext;
299         }
300     }
301 
302     static class TestMuleContext extends DefaultMuleContext
303     {
304         public TestMuleContext(MuleConfiguration config,
305                                   WorkManager workManager, 
306                                   WorkListener workListener, 
307                                   MuleContextLifecycleManager lifecycleManager, 
308                                   ServerNotificationManager notificationManager)
309         {
310             super(config, workManager, workListener, lifecycleManager, notificationManager);
311         }
312     }
313 
314     static class TestMuleConfiguration extends DefaultMuleConfiguration
315     {
316         // just a skeleton
317     }
318 
319 }