001: /* ====================================================================
002: * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
003: *
004: * Copyright (c) 1995-2003 Jcorporate Ltd. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution,
019: * if any, must include the following acknowledgment:
020: * "This product includes software developed by Jcorporate Ltd.
021: * (http://www.jcorporate.com/)."
022: * Alternately, this acknowledgment may appear in the software itself,
023: * if and wherever such third-party acknowledgments normally appear.
024: *
025: * 4. "Jcorporate" and product names such as "Expresso" must
026: * not be used to endorse or promote products derived from this
027: * software without prior written permission. For written permission,
028: * please contact info@jcorporate.com.
029: *
030: * 5. Products derived from this software may not be called "Expresso",
031: * or other Jcorporate product names; nor may "Expresso" or other
032: * Jcorporate product names appear in their name, without prior
033: * written permission of Jcorporate Ltd.
034: *
035: * 6. No product derived from this software may compete in the same
036: * market space, i.e. framework, without prior written permission
037: * of Jcorporate Ltd. For written permission, please contact
038: * partners@jcorporate.com.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
044: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
045: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
046: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Jcorporate Ltd. Contributions back
056: * to the project(s) are encouraged when you make modifications.
057: * Please send them to support@jcorporate.com. For more information
058: * on Jcorporate Ltd. and its products, please see
059: * <http://www.jcorporate.com/>.
060: *
061: * Portions of this software are based upon other open source
062: * products and are subject to their respective licenses.
063: */
064: package com.jcorporate.expresso.kernel.test;
065:
066: import com.jcorporate.expresso.kernel.DataContext;
067: import com.jcorporate.expresso.kernel.RootContainerInterface;
068: import com.jcorporate.expresso.kernel.SystemFactory;
069: import com.jcorporate.expresso.kernel.management.ExpressoRuntimeMap;
070: import junit.framework.TestCase;
071:
072: /**
073: * Unit tests for the whole component system
074: *
075: * @author Michael Rimov
076: * @version $Revision: 1.2 $ on $Date: 2004/11/17 20:48:23 $
077: */
078:
079: public class TestComponentSystem extends TestCase {
080:
081: public TestComponentSystem(String _name) {
082: super (_name);
083: }
084:
085: /**
086: * setUp method for test case
087: */
088: protected void setUp() {
089: }
090:
091: /**
092: * tearDown method for test case
093: */
094: protected void tearDown() {
095: }
096:
097: public void testInitRoot() {
098: RootContainerInterface globalContainer = null;
099: try {
100: globalContainer = SystemFactory
101: .buildExpressoComponentSystem(this .getClass()
102: .getResource("Test1ExpressoServices.xml"),
103: this .getClass().getResource(
104: "TestLog4jConfig.xml"), System
105: .getProperty("junit.argv.logDir",
106: "/d:/expresso/log"));
107:
108: assertTrue(globalContainer != null);
109: assertTrue(globalContainer.getExpressoServicesConfig() != null);
110: assertTrue(globalContainer.getContainerImplementation() != null);
111: assertTrue(globalContainer.getSetupValues() != null);
112: assertTrue("abcdefg".equals(globalContainer
113: .getSetupValue("test1")));
114: assertTrue(globalContainer.getLogManager() != null);
115: assertTrue(globalContainer.getParent() == null);
116: assertTrue(globalContainer.getMetaData() != null);
117: assertTrue(globalContainer.getExpressoServicesConfig() != null);
118: globalContainer.destroy();
119: } catch (Exception ex) {
120: ex.printStackTrace();
121: fail("Caught Exception constructing Global Container");
122: }
123:
124: }
125:
126: public void testInit() {
127: RootContainerInterface globalContainer = null;
128: try {
129: globalContainer = SystemFactory
130: .buildExpressoComponentSystem(this .getClass()
131: .getResource("Test1ExpressoServices.xml"),
132: this .getClass().getResource(
133: "TestLog4jConfig.xml"),
134: "D:/Expresso/log");
135:
136: DataContext dc = (DataContext) globalContainer
137: .locateComponent("default");
138: assertTrue("DataContext should be non-null", dc != null);
139: assertTrue("DataContext should have setup tables", dc
140: .getHasSetupTables().booleanValue() == true);
141:
142: assertTrue(
143: "Security Context should be the default database",
144: dc.getSecurityContext().equals("default"));
145:
146: assertTrue(
147: "Should have correct description as set by services.xml",
148: dc.getContextDescription().equals(
149: "A Sample Default Database"));
150:
151: assertTrue("Should have correct test setup value: got "
152: + dc.getSetupValue("test1") + "instead",
153: "Test Setup Value"
154: .equals(dc.getSetupValue("test1")));
155:
156: TestComponent tc = (TestComponent) dc
157: .locateComponent("TestComponent");
158: assertTrue("Test Component must not be null", tc != null);
159:
160: globalContainer.destroy();
161: } catch (Exception ex) {
162: ex.printStackTrace();
163: fail("Caught Exception constructing Global Container");
164: }
165:
166: }
167:
168: /**
169: * This, unfortunately, is a visual 'joke' in that you should see a warning
170: * message about having to GC a Rootcontainer interface when it should
171: * have been explicitly destroyed.
172: */
173: public void testGC() {
174: RootContainerInterface globalContainer = null;
175: try {
176: globalContainer = SystemFactory
177: .buildExpressoComponentSystem(this .getClass()
178: .getResource("Test1ExpressoServices.xml"),
179: this .getClass().getResource(
180: "TestLog4jConfig.xml"),
181: "D:/Expresso/log");
182:
183: assertTrue(globalContainer != null);
184: globalContainer = null;
185: ExpressoRuntimeMap.unregisterRuntime(null);
186: System.gc();
187: System.runFinalization();
188:
189: assertTrue(ExpressoRuntimeMap.getDefaultRuntime() == null);
190: } catch (Exception ex) {
191: ex.printStackTrace();
192: fail("Caught Exception constructing Global Container");
193: }
194:
195: }
196:
197: /**
198: * This test case actually tests the management class ExpressoRuntimeMap
199: * by initializing several containers and making sure that the ExpressoRuntime
200: * map seems to be keeping track of them properly.
201: */
202: public void testMultipleInits() {
203: RootContainerInterface globalContainer = null;
204:
205: try {
206: globalContainer = SystemFactory
207: .buildExpressoComponentSystem(this .getClass()
208: .getResource("Test1ExpressoServices.xml"),
209: this .getClass().getResource(
210: "TestLog4jConfig.xml"),
211: "D:/Expresso/log");
212:
213: RootContainerInterface testContainer = SystemFactory
214: .buildExpressoComponentSystem(this .getClass()
215: .getResource("Test2ExpressoServices.xml"),
216: this .getClass().getResource(
217: "TestLog4jConfig.xml"),
218: "D:/Expresso/log");
219:
220: RootContainerInterface retrievedContainer = ExpressoRuntimeMap
221: .getDefaultRuntime();
222: assertTrue(
223: "Retrieved container should be the global test container",
224: retrievedContainer == globalContainer);
225:
226: retrievedContainer = ExpressoRuntimeMap
227: .getRuntime("sampleRuntime");
228: assertTrue(retrievedContainer != null);
229: assertTrue(
230: "Retrieved container should be the second created container",
231: retrievedContainer == testContainer);
232:
233: testContainer.destroy();
234: retrievedContainer = ExpressoRuntimeMap
235: .getRuntime("sampleRuntime");
236: assertTrue("sampleRuntime should no longer exist",
237: retrievedContainer == null);
238: globalContainer.destroy();
239: } catch (Exception ex) {
240: ex.printStackTrace();
241: fail("Caught Exception constructing Containers");
242: }
243: }
244:
245: /**
246: * Executes the test case
247: */
248: public static void main(String[] argv) {
249: String[] testCaseList = { TestComponentSystem.class.getName() };
250: junit.textui.TestRunner.main(testCaseList);
251: }
252: }
|