1   /*
2    * $Id: MuleConfigurationTestCase.java 11764 2008-05-15 12:12:16Z 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.MuleServer;
14  import org.mule.RegistryContext;
15  import org.mule.api.MuleContext;
16  import org.mule.api.ThreadSafeAccess;
17  import org.mule.api.config.MuleConfiguration;
18  import org.mule.api.context.MuleContextBuilder;
19  import org.mule.config.DefaultMuleConfiguration;
20  import org.mule.context.DefaultMuleContextBuilder;
21  import org.mule.context.DefaultMuleContextFactory;
22  
23  import junit.framework.TestCase;
24  
25  public class MuleConfigurationTestCase extends TestCase
26  {
27      
28      private boolean failOnMessageScribbling;
29  
30      @Override
31      protected void setUp() throws Exception
32      {
33          super.setUp();
34          
35          // fiddling with ThreadSafeAccess must not have side effects on later tests. Store
36          // the current state here and restore it in tearDown
37          failOnMessageScribbling = ThreadSafeAccess.AccessControl.isFailOnMessageScribbling();
38      }
39  
40      @Override
41      protected void tearDown() throws Exception
42      {
43          muleContext = null;
44          MuleServer.setMuleContext(null);
45          RegistryContext.setRegistry(null);
46          ThreadSafeAccess.AccessControl.setFailOnMessageScribbling(failOnMessageScribbling);
47      } 
48      
49      private MuleContext muleContext;
50      
51      /** Test for MULE-3092 */
52      public void testConfigureProgramatically() throws Exception
53      {
54          DefaultMuleConfiguration config = new DefaultMuleConfiguration();
55          config.setDefaultEncoding("UTF-16");
56          config.setDefaultSynchronousEndpoints(true);
57          config.setSystemModelType("direct");
58          config.setDefaultSynchronousEventTimeout(30000);
59          config.setDefaultTransactionTimeout(60000);
60          config.setDefaultRemoteSync(true);
61          config.setWorkingDirectory("/some/directory");
62          config.setClientMode(true);
63          ThreadSafeAccess.AccessControl.setFailOnMessageScribbling(false);
64          config.setId("MY_SERVER");
65          config.setClusterId("MY_CLUSTER");
66          config.setDomainId("MY_DOMAIN");
67          config.setCacheMessageAsBytes(false);
68          config.setCacheMessageOriginalPayload(false);
69          config.setEnableStreaming(false);
70          ThreadSafeAccess.AccessControl.setAssertMessageAccess(false);
71          config.setAutoWrapMessageAwareTransform(false);
72          
73          MuleContextBuilder contextBuilder = new DefaultMuleContextBuilder();
74          contextBuilder.setMuleConfiguration(config);
75          muleContext = new DefaultMuleContextFactory().createMuleContext(contextBuilder);
76          
77          muleContext.start();
78          
79          verifyConfiguration();
80      }
81  
82      /** Test for MULE-3092 */
83      public void testConfigureWithSystemProperties() throws Exception
84      {
85          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "encoding", "UTF-16");
86          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "endpoints.synchronous", "true");
87          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "systemModelType", "direct");
88          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "timeout.synchronous", "30000");
89          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "timeout.transaction", "60000");
90          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "remoteSync", "true");
91          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "workingDirectory", "/some/directory");
92          System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "clientMode", "true");
93          
94          // this is just to make the test work for now. Since the initialization of the threadsafe
95          // check behaviour in ThreadSafeAccess.AccessControl has already happened at this point in
96          // time (we touched ThreadSafeAccess.AccessControl in setUp) setting the system property 
97          // won't have any effect here
98          // System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "disable.threadsafemessages", "true");
99          ThreadSafeAccess.AccessControl.setFailOnMessageScribbling(false);
100         
101         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "serverId", "MY_SERVER");
102         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "clusterId", "MY_CLUSTER");
103         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "domainId", "MY_DOMAIN");
104         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "message.cacheBytes", "false");
105         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "message.cacheOriginal", "false");
106         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "streaming.enable", "false");
107         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "message.assertAccess", "false");
108         System.setProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "transform.autoWrap", "false");
109         
110         muleContext = new DefaultMuleContextFactory().createMuleContext();
111         muleContext.start();
112 
113         verifyConfiguration();
114 
115         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "encoding");
116         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "endpoints.synchronous");
117         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "systemModelType");
118         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "timeout.synchronous");
119         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "timeout.transaction");
120         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "remoteSync");
121         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "workingDirectory");
122         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "clientMode");
123         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "disable.threadsafemessages");
124         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "serverId");
125         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "clusterId");
126         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "domainId");
127         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "message.cacheBytes");
128         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "message.cacheOriginal");
129         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "streaming.enable");
130         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "message.assertAccess");
131         System.clearProperty(MuleConfiguration.SYSTEM_PROPERTY_PREFIX + "transform.autoWrap");
132     }
133 
134     /** Test for MULE-3110 */
135     public void testConfigureAfterInitFails() throws Exception
136     {
137         muleContext = new DefaultMuleContextFactory().createMuleContext();        
138 
139         DefaultMuleConfiguration mutableConfig = ((DefaultMuleConfiguration) muleContext.getConfiguration());
140         
141         // These are OK to change after init but before start
142         mutableConfig.setDefaultSynchronousEndpoints(true);
143         mutableConfig.setSystemModelType("direct");
144         mutableConfig.setDefaultSynchronousEventTimeout(30000);
145         mutableConfig.setDefaultTransactionTimeout(60000);
146         mutableConfig.setDefaultRemoteSync(true);
147         mutableConfig.setClientMode(true);
148 
149         // These are not OK to change after init
150         mutableConfig.setDefaultEncoding("UTF-16");
151         mutableConfig.setWorkingDirectory("/some/directory");
152         mutableConfig.setId("MY_SERVER");
153         mutableConfig.setClusterId("MY_CLUSTER");
154         mutableConfig.setDomainId("MY_DOMAIN");
155 
156         MuleConfiguration config = muleContext.getConfiguration();
157 
158         // These are OK to change after init but before start
159         assertTrue(config.isDefaultSynchronousEndpoints());
160         assertEquals("direct", config.getSystemModelType());
161         assertEquals(30000, config.getDefaultSynchronousEventTimeout());
162         assertEquals(60000, config.getDefaultTransactionTimeout());
163         assertTrue(config.isDefaultRemoteSync());
164         assertTrue(config.isClientMode());
165         
166         // These are not OK to change after init
167         assertFalse("UTF-16".equals(config.getDefaultEncoding()));
168         assertFalse("/some/directory".equals(config.getWorkingDirectory()));
169         assertFalse("MY_SERVER".equals(config.getId()));
170         assertFalse("MY_CLUSTER".equals(config.getClusterId()));
171         assertFalse("MY_DOMAIN".equals(config.getDomainId()));
172     }
173 
174     /** Test for MULE-3110 */
175     public void testConfigureAfterStartFails() throws Exception
176     {
177         muleContext = new DefaultMuleContextFactory().createMuleContext();        
178         muleContext.start();
179 
180         DefaultMuleConfiguration mutableConfig = ((DefaultMuleConfiguration) muleContext.getConfiguration());
181         mutableConfig.setDefaultSynchronousEndpoints(true);
182         mutableConfig.setSystemModelType("direct");
183         mutableConfig.setDefaultSynchronousEventTimeout(30000);
184         mutableConfig.setDefaultTransactionTimeout(60000);
185         mutableConfig.setDefaultRemoteSync(true);
186         mutableConfig.setClientMode(true);
187 
188         MuleConfiguration config = muleContext.getConfiguration();
189         assertFalse(config.isDefaultSynchronousEndpoints());
190         assertFalse("direct".equals(config.getSystemModelType()));
191         assertFalse(30000 == config.getDefaultSynchronousEventTimeout());
192         assertFalse(60000 == config.getDefaultTransactionTimeout());
193         assertFalse(config.isDefaultRemoteSync());
194         assertFalse(config.isClientMode());
195     }
196 
197     protected void verifyConfiguration()
198     {
199         MuleConfiguration config = muleContext.getConfiguration();
200         assertEquals("UTF-16", config.getDefaultEncoding());
201         assertTrue(config.isDefaultSynchronousEndpoints());
202         assertEquals("direct", config.getSystemModelType());
203         assertEquals(30000, config.getDefaultSynchronousEventTimeout());
204         assertEquals(60000, config.getDefaultTransactionTimeout());
205         assertTrue(config.isDefaultRemoteSync());
206         assertEquals("/some/directory", config.getWorkingDirectory());
207         assertTrue(config.isClientMode());
208         assertFalse(ThreadSafeAccess.AccessControl.isFailOnMessageScribbling());
209         assertEquals("MY_SERVER", config.getId());
210         assertEquals("MY_CLUSTER", config.getClusterId());
211         assertEquals("MY_DOMAIN", config.getDomainId());
212         assertFalse(config.isCacheMessageAsBytes());
213         assertFalse(config.isCacheMessageOriginalPayload());
214         assertFalse(config.isEnableStreaming());
215         assertFalse(ThreadSafeAccess.AccessControl.isAssertMessageAccess());
216         assertFalse(config.isAutoWrapMessageAwareTransform());
217     }
218 }
219 
220