package org.pentaho.test.platform.engine.core; import static org.junit.Assert.*; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.junit.Test; import org.pentaho.platform.api.engine.IPentahoDefinableObjectFactory; import org.pentaho.platform.api.engine.IPentahoObjectFactory; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.api.engine.IPentahoSystemListener; import org.pentaho.platform.api.engine.ISessionStartupAction; import org.pentaho.platform.api.engine.ISolutionEngine; import org.pentaho.platform.engine.core.system.StandaloneSession; import org.pentaho.platform.engine.core.system.SystemSettings; import org.pentaho.platform.engine.core.system.boot.PentahoSystemBoot; import org.pentaho.platform.engine.core.system.boot.PlatformInitializationException; @SuppressWarnings( { "all" }) public class BootTest { @Test public void testBoot() throws Exception { PentahoSystemBoot boot = new PentahoSystemBoot(); boot.setFilePath("test-src/solution"); IPentahoObjectFactory factory = boot.getFactory(); assertNotNull("object factory is null", factory); assertTrue("object factory not definable", factory instanceof IPentahoDefinableObjectFactory); boot.define(ISolutionEngine.class.getSimpleName(), Object1.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); boot.define("MyObject", Object1.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); boot.define("MyObject", Object2.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); assertFalse(boot.isInitialized()); boolean ok = boot.start(); assertNull(boot.getSettingsProvider()); assertTrue(boot.isInitialized()); assertTrue(ok); factory = boot.getFactory(); Object2 object = factory.get(Object2.class, "MyObject", null); assertNotNull("object get failed", object); assertEquals("file path is wrong", "test-src/solution", boot.getFilePath()); boot.stop(); assertFalse(boot.isInitialized()); } @Test public void testBootListeners() throws Exception { PentahoSystemBoot boot = new PentahoSystemBoot(); boot.setFilePath("test-src/solution"); boot.define(ISolutionEngine.class.getSimpleName(), Object1.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); boot.define("systemStartupSession", StandaloneSession.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); TestLifecycleListener lifecycleListener1 = new TestLifecycleListener(); TestLifecycleListener lifecycleListener2 = new TestLifecycleListener(); boot.addLifecycleListener(lifecycleListener1); List<IPentahoSystemListener> lifecycleListeners1 = boot.getLifecycleListeners(); assertEquals(1, lifecycleListeners1.size()); assertEquals(lifecycleListener1, lifecycleListeners1.get(0)); assertFalse(TestLifecycleListener.startupCalled); assertFalse(TestLifecycleListener.shutdownCalled); List<IPentahoSystemListener> lifecycleListeners2 = new ArrayList<IPentahoSystemListener>(); lifecycleListeners2.add(lifecycleListener2); boot.setLifecycleListeners(lifecycleListeners2); List<IPentahoSystemListener> lifecycleListeners3 = boot.getLifecycleListeners(); assertEquals(1, lifecycleListeners3.size()); assertEquals(lifecycleListener2, lifecycleListeners3.get(0)); assertEquals(lifecycleListeners2, lifecycleListeners3); IPentahoObjectFactory factory = boot.getFactory(); assertNotNull("object factory is null", factory); assertTrue("object factory not definable", factory instanceof IPentahoDefinableObjectFactory); assertFalse(boot.isInitialized()); boolean ok = boot.start(); assertNull(boot.getSettingsProvider()); assertTrue(boot.isInitialized()); assertTrue(ok); assertTrue(TestLifecycleListener.startupCalled); assertFalse(TestLifecycleListener.shutdownCalled); boot.stop(); assertFalse(boot.isInitialized()); assertTrue(TestLifecycleListener.startupCalled); assertTrue(TestLifecycleListener.shutdownCalled); } @Test public void testBootActions() throws Exception { PentahoSystemBoot boot = new PentahoSystemBoot(); boot.setFilePath("test-src/solution"); boot.define(ISolutionEngine.class.getSimpleName(), Object1.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); TestStartupAction startupAction1 = new TestStartupAction(); TestStartupAction startupAction2 = new TestStartupAction(); boot.addStartupAction(startupAction1); List<ISessionStartupAction> startupActions1 = boot.getStartupActions(); assertEquals(1, startupActions1.size()); assertEquals(startupAction1, startupActions1.get(0)); List<ISessionStartupAction> startupActions2 = new ArrayList<ISessionStartupAction>(); startupActions2.add(startupAction2); boot.setStartupActions(startupActions2); List<ISessionStartupAction> startupActions3 = boot.getStartupActions(); assertEquals(1, startupActions3.size()); assertEquals(startupAction2, startupActions3.get(0)); assertEquals(startupActions2, startupActions3); IPentahoObjectFactory factory = boot.getFactory(); assertNotNull("object factory is null", factory); assertTrue("object factory not definable", factory instanceof IPentahoDefinableObjectFactory); assertFalse(boot.isInitialized()); boolean ok = boot.start(); assertNull(boot.getSettingsProvider()); assertTrue(boot.isInitialized()); assertTrue(ok); boot.stop(); assertFalse(boot.isInitialized()); } @Test public void testBootSettings() throws Exception { PentahoSystemBoot boot = new PentahoSystemBoot(); boot.setFilePath("test-src/solution"); IPentahoObjectFactory factory = boot.getFactory(); assertNotNull("object factory is null", factory); SystemSettings settings = new SystemSettings(); boot.setSettingsProvider(settings); assertEquals(settings, boot.getSettingsProvider()); } @Test(expected = NoSuchMethodError.class) public void testReadOnlyFactory() { PentahoSystemBoot boot = new PentahoSystemBoot(); boot.setFilePath("test-src/solution"); TestObjectFactory objectFactory = new TestObjectFactory(); boot.setFactory(objectFactory); boot.define(ISolutionEngine.class.getSimpleName(), Object1.class.getName(), IPentahoDefinableObjectFactory.Scope.GLOBAL); } }