View Javadoc

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