1   /*
2    * $Id: DefaultMuleContextFactoryTestCase.java 11371 2008-03-15 03:12:09Z tcarlson $
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;
12  
13  import org.mule.api.MuleContext;
14  import org.mule.api.config.ConfigurationException;
15  import org.mule.api.config.MuleConfiguration;
16  import org.mule.api.config.MuleProperties;
17  import org.mule.api.context.WorkManager;
18  import org.mule.api.lifecycle.InitialisationException;
19  import org.mule.api.lifecycle.LifecycleManager;
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.model.seda.SedaModel;
28  import org.mule.tck.AbstractMuleTestCase;
29  import org.mule.tck.testmodels.fruit.Banana;
30  
31  import java.util.ArrayList;
32  import java.util.List;
33  import java.util.Properties;
34  
35  import javax.resource.spi.work.WorkListener;
36  
37  public class DefaultMuleContextFactoryTestCase extends AbstractMuleTestCase
38  {
39  
40      private DefaultMuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
41      private static String TEST_STRING_KEY = "test";
42      private static String TEST_STRING_VALUE = "test_value";
43      private static String TEST_STRING_KEY2 = "test2";
44      private static String TEST_STRING_VALUE2 = "test_value2";
45      private static String TEST_OBJECT_NAME = "testObject";
46      private static String TEST_MODEL_NAME = "testModel";
47  
48      public void testCreateMuleContext() throws InitialisationException, ConfigurationException
49      {
50          MuleContext muleContext = muleContextFactory.createMuleContext();
51  
52          // Assert MuleContext config
53          testMuleContext(muleContext);
54  
55          testDefaults(muleContext);
56  
57      }
58  
59      public void testCreateMuleContextConfigurationBuilder() throws InitialisationException, ConfigurationException
60      {
61          MuleContext muleContext = muleContextFactory.createMuleContext(new TestConfigurationBuilder());
62  
63          // Assert MuleContext config
64          testMuleContext(muleContext);
65  
66          testConfigurationBuilder1Objects(muleContext);
67  
68          testNoDefaults(muleContext);
69  
70      }
71  
72      public void testCreateMuleContextListMuleContextBuilder() throws InitialisationException, ConfigurationException
73      {
74          List configBuilders = new ArrayList();
75          configBuilders.add(new TestConfigurationBuilder());
76          configBuilders.add(new TestConfigurationBuilder2());
77  
78          TestMuleContextBuilder muleContextBuilder = new TestMuleContextBuilder();
79          MuleContext muleContext = muleContextFactory.createMuleContext(configBuilders, muleContextBuilder);
80  
81          // Assert MuleContext config
82          testCustomMuleContext(muleContext);
83  
84          // Assert configured objects
85          testConfigurationBuilder1Objects(muleContext);
86          testConfigurationBuilder2Objects(muleContext);
87  
88          testNoDefaults(muleContext);
89  
90      }
91  
92      public void testCreateMuleContextMuleContextBuilder() throws InitialisationException, ConfigurationException
93      {
94          TestMuleContextBuilder muleContextBuilder = new TestMuleContextBuilder();
95          MuleContext muleContext = muleContextFactory.createMuleContext(new SimpleConfigurationBuilder(null), muleContextBuilder);
96  
97          // Assert MuleContext config
98          testCustomMuleContext(muleContext);
99  
100         testNoDefaults(muleContext);
101     }
102 
103     public void testCreateMuleContextConfigurationBuilderMuleContextBuilder()
104         throws InitialisationException, ConfigurationException
105     {
106 
107         TestMuleContextBuilder muleContextBuilder = new TestMuleContextBuilder();
108         MuleContext muleContext = muleContextFactory.createMuleContext(new TestConfigurationBuilder2(),
109             muleContextBuilder);
110 
111         // Assert MuleContext config
112         testCustomMuleContext(muleContext);
113 
114         testConfigurationBuilder2Objects(muleContext);
115 
116         testNoDefaults(muleContext);
117     }
118 
119     public void testCreateMuleContextString() throws InitialisationException, ConfigurationException
120     {
121         MuleContext muleContext = null;
122         try
123         {
124             muleContext = muleContextFactory.createMuleContext("log4j.properties");
125 
126         }
127         catch (ConfigurationException e)
128         {
129             assertEquals(
130                 "No suitable configuration builder for resource \"[ConfigResource{resourceName='log4j.properties'}]\" found.  "
131                                 + "Check you have configuration module on your classpath and are using correct file extension. "
132                                 + "(org.mule.api.config.ConfigurationException)", e.getMessage());
133         }
134         assertNull(muleContext);
135 
136     }
137 
138     public void testCreateMuleContextStringProperties() throws InitialisationException, ConfigurationException
139     {
140         Properties properties = new Properties();
141         properties.put("testKey1", "testValue1");
142         properties.put("testKey2", "testValue2");
143 
144         MuleContext muleContext = null;
145         try
146         {
147             muleContext = muleContextFactory.createMuleContext("log4j.properties", properties);
148 
149         }
150         catch (ConfigurationException e)
151         {
152             assertEquals(
153                 "No suitable configuration builder for resource \"[ConfigResource{resourceName='log4j.properties'}]\" found.  "
154                                 + "Check you have configuration module on your classpath and are using correct file extension. "
155                                 + "(org.mule.api.config.ConfigurationException)", e.getMessage());
156         }
157 
158         assertNull(muleContext);
159     }
160 
161     public void testCreateMuleContextConfigurationBuilderProperties()
162         throws InitialisationException, ConfigurationException
163     {
164         Properties properties = new Properties();
165         properties.put("testKey3", "testValue3");
166         properties.put("testKey4", "testValue4");
167 
168         MuleContext muleContext = muleContextFactory.createMuleContext(new TestConfigurationBuilder(), properties);
169 
170         // Assert MuleContext config
171         testMuleContext(muleContext);
172 
173         testConfigurationBuilder1Objects(muleContext);
174         assertEquals("testValue3", muleContext.getRegistry().lookupObject("testKey3"));
175         assertEquals("testValue4", muleContext.getRegistry().lookupObject("testKey4"));
176 
177         testNoDefaults(muleContext);
178     }
179 
180     private void testDefaults(MuleContext muleContext)
181     {
182         // Asert existance of defauts in registry
183         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_QUEUE_MANAGER));
184         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SECURITY_MANAGER));
185         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SYSTEM_MODEL));
186         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_ENDPOINT_FACTORY));
187         assertNotNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_SIMPLE_REGISTRY_BOOTSTRAP));
188     }
189 
190     private void testNoDefaults(MuleContext muleContext)
191     {
192         // Asert non-existance of defauts in registry
193         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_QUEUE_MANAGER));
194         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SECURITY_MANAGER));
195         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_SYSTEM_MODEL));
196         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_ENDPOINT_FACTORY));
197         assertNull(muleContext.getRegistry().lookupObject(MuleProperties.OBJECT_MULE_SIMPLE_REGISTRY_BOOTSTRAP));
198     }
199 
200     private void testMuleContext(MuleContext muleContext)
201     {
202         assertNotNull(muleContext);
203         assertEquals(DefaultMuleContext.class, muleContext.getClass());
204         assertTrue(muleContext.isInitialised());
205         assertNotNull(muleContext.getConfiguration());
206         assertEquals(DefaultMuleConfiguration.class, muleContext.getConfiguration().getClass());
207         assertNotNull(muleContext.getLifecycleManager().getClass());
208         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[0]);
209         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[1]);
210         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[2]);
211         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[3]);
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         assertNotNull(muleContext.getLifecycleManager().getClass());
223         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[0]);
224         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[1]);
225         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[2]);
226         assertNotNull(muleContext.getLifecycleManager().getLifecycles().toArray()[3]);
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             MuleContext muleContext = new TestMuleContext(getMuleConfiguration(),
284                                                              getWorkManager(),
285                                                              getWorkListener(),
286                                                              getLifecycleManager(),
287                                                              getNotificationManager());
288             return muleContext;
289         }
290     }
291 
292     static class TestMuleContext extends DefaultMuleContext
293     {
294         public TestMuleContext(MuleConfiguration config,
295                                   WorkManager workManager, 
296                                   WorkListener workListener, 
297                                   LifecycleManager lifecycleManager, 
298                                   ServerNotificationManager notificationManager)
299         {
300             super(config, workManager, workListener, lifecycleManager, notificationManager);
301         }
302     }
303 
304     static class TestMuleConfiguration extends DefaultMuleConfiguration
305     {
306         // just a skeleton
307     }
308 
309 }