/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, version 2 as published by the Free Software * Foundation. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * * Copyright 2005-2008 Pentaho Corporation. All rights reserved. * * @created Jul 8, 2005 * @author Marc Batchelor * */ package org.pentaho.test.platform.repository.runtime; import java.io.File; //import java.io.OutputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.pentaho.platform.api.repository.IRuntimeRepository; import org.pentaho.platform.repository.hibernate.HibernateUtil; import org.pentaho.platform.repository.messages.Messages; import org.pentaho.platform.repository.runtime.RuntimeElement; import org.pentaho.platform.repository.runtime.RuntimeRepository; import org.pentaho.test.platform.repository.RepositoryTestCase; @SuppressWarnings("nls") public class RuntimeRepositoryTest extends RepositoryTestCase { private StringBuffer longString = new StringBuffer(); private BigDecimal bdProperty = new BigDecimal("1128347.34873484738"); //$NON-NLS-1$ public static final String SOLUTION_PATH = "test-src/solution"; private static final String ALT_SOLUTION_PATH = "test-src/solution"; private static final String PENTAHO_XML_PATH = "/system/pentaho.xml"; final String SYSTEM_FOLDER = "/system"; // private static final String DEFAULT_SPRING_CONFIG_FILE_NAME = "pentahoObjects.spring.xml"; public String getSolutionPath() { File file = new File(SOLUTION_PATH + PENTAHO_XML_PATH); if(file.exists()) { System.out.println("File exist returning " + SOLUTION_PATH); return SOLUTION_PATH; } else { System.out.println("File does not exist returning " + ALT_SOLUTION_PATH); return ALT_SOLUTION_PATH; } } /** * @param arg0 */ public RuntimeRepositoryTest(String arg0) { super(arg0); Properties props = System.getProperties(); longString.append(props.getProperty("java.home")).append(props.getProperty("sun.cpu.isalist")). //$NON-NLS-1$ //$NON-NLS-2$ append(props.getProperty("java.vm.version")).append(props.getProperty("user.home")). //$NON-NLS-1$ //$NON-NLS-2$ append(props.getProperty("java.class.path")); //$NON-NLS-1$ } public static void main(String[] args) { RuntimeRepositoryTest test = new RuntimeRepositoryTest("testRuntimeRepository"); //$NON-NLS-1$ junit.textui.TestRunner.run(test); System.exit(0); } @SuppressWarnings("unused") private String getMessagesText() { List messages = this.getMessages(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < messages.size(); i++) { sb.append(messages.get(i)).append("\n"); //$NON-NLS-1$ } return sb.toString(); } // public void testRuntimeRepository() { // RuntimeElement baseElement = createRuntimeElement(); // HibernateUtil.flushSession(); // modifyAdd(baseElement); // HibernateUtil.flushSession(); // readElementTest(baseElement.getInstanceId()); // doReadOnlyTest(baseElement.getInstanceId()); // cleanupElement(baseElement.getInstanceId()); // OutputStream output = getOutputStream("RuntimeRepositoryTest.testRuntimeRepository", ".txt"); //$NON-NLS-1$ //$NON-NLS-2$ // try { // output.write(getMessagesText().getBytes()); // } catch (Exception e) { // } // } public void testDummyTest() { // do nothing, get the above test to pass! } public void setUp() { // TODO: remove once tests are passing } public void tearDown() { // TODO: remove once tests are passing } @SuppressWarnings("unused") private void doReadOnlyTest(String elementId) { info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_TESTINGREADONLY")); //$NON-NLS-1$ HibernateUtil.beginTransaction(); try { IRuntimeRepository repo = new RuntimeRepository(); repo.setSession(getPentahoSession()); RuntimeElement baseElement = (RuntimeElement) repo.loadElementById(elementId, null); info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_SETTINGELEMENTTOREADONLY")); //$NON-NLS-1$ baseElement.setReadOnly(true); } finally { HibernateUtil.commitTransaction(); } // Now, the element is read-only. // Flush the session and re-load the element to // test the "loaded" methods. HibernateUtil.flushSession(); HibernateUtil.clear(); // Now, reload the element. HibernateUtil.beginTransaction(); try { info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_LOADINGREADONLY")); //$NON-NLS-1$ IRuntimeRepository repo = new RuntimeRepository(); repo.setSession(getPentahoSession()); RuntimeElement baseElement = (RuntimeElement) repo.loadElementById(elementId, null); boolean caughtException = false; try { info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_TRYINGSETSTRINGPROPERTY")); //$NON-NLS-1$ baseElement .setStringProperty( Messages.getInstance().getString("RUNTIMEREPOTEST.MODIFY_NEW_STRING_KEY"), Messages.getInstance().getString("RUNTIMEREPOTEST.MODIFY_STRING_VALUE")); //$NON-NLS-1$ //$NON-NLS-2$ } catch (IllegalStateException ex) { caughtException = true; info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_EXCEPTIONTRIPPED")); //$NON-NLS-1$ } assertTrue(Messages.getInstance().getErrorString("RUNTIMEREPOTEST.ERROR_0001_EXCEPTIONNOTTRIPPED"), caughtException); //$NON-NLS-1$ caughtException = false; try { info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_TRYINGSETPARENTTYPE")); //$NON-NLS-1$ baseElement.setParentType(Messages.getInstance().getString("RUNTIMEREPOTEST.CREATE_PARENT_TYPE")); //$NON-NLS-1$ } catch (IllegalStateException ex) { caughtException = true; info(Messages.getInstance().getString("RUNTIMEREPOTEST.USER_EXCEPTIONTRIPPED")); //$NON-NLS-1$ } assertTrue(Messages.getInstance().getErrorString("RUNTIMEREPOTEST.ERROR_0001_EXCEPTIONNOTTRIPPED"), caughtException); //$NON-NLS-1$ } finally { HibernateUtil.commitTransaction(); } } @SuppressWarnings("unused") private void cleanupElement(String elementId) { HibernateUtil.beginTransaction(); IRuntimeRepository repo = new RuntimeRepository(); repo.setSession(getPentahoSession()); RuntimeElement re = (RuntimeElement) repo.loadElementById(elementId, null); HibernateUtil.makeTransient(re); HibernateUtil.commitTransaction(); HibernateUtil.flushSession(); HibernateUtil.clear(); } @SuppressWarnings("unused") private void modifyAdd(RuntimeElement baseElement) { HibernateUtil.beginTransaction(); try { IRuntimeRepository repo = new RuntimeRepository(); repo.setSession(getPentahoSession()); baseElement .setStringProperty( Messages.getInstance().getString("RUNTIMEREPOTEST.MODIFY_NEW_STRING_KEY"), Messages.getInstance().getString("RUNTIMEREPOTEST.MODIFY_STRING_VALUE")); //$NON-NLS-1$ //$NON-NLS-2$ } finally { HibernateUtil.commitTransaction(); } } @SuppressWarnings("unused") private RuntimeElement createRuntimeElement() { IRuntimeRepository repo = new RuntimeRepository(); repo.setSession(getPentahoSession()); RuntimeElement ele = null; ele = (RuntimeElement) repo .newRuntimeElement( Messages.getInstance().getString("RUNTIMEREPOTEST.CREATE_PARENT"), Messages.getInstance().getString("RUNTIMEREPOTEST.CREATE_PARENT_TYPE"), false); //$NON-NLS-1$ //$NON-NLS-2$ try { assertNotNull(ele); info(Messages.getInstance().getString("RUNTIMEREPOTEST.DEBUG_INSTANCE_ID") + ele.getInstanceId()); //$NON-NLS-1$ ele.setSolutionId(Messages.getInstance().getString("RUNTIMEREPOTEST.SALES_SOLUTION")); //$NON-NLS-1$ ele .setStringProperty( Messages.getInstance().getString("RUNTIMEREPOTEST.SHORT_STRING_KEY"), Messages.getInstance().getString("RUNTIMEREPOTEST.SHORT_STRING_VALUE")); //$NON-NLS-1$ //$NON-NLS-2$ // Get a Long String to Store... ele.setStringProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.LONG_STRING_KEY"), longString.toString()); //$NON-NLS-1$ ele.setDateProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.DATE_KEY"), new Date()); //$NON-NLS-1$ ele.setBigDecimalProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.DECIMAL_KEY"), bdProperty); //$NON-NLS-1$ List myList = new ArrayList(); myList.add(Messages.getInstance().getString("RUNTIMEREPOTEST.LIST_ELEMENT_STRING")); //$NON-NLS-1$ myList.add(new BigDecimal("1283764.1294839483")); //$NON-NLS-1$ myList.add(new Date()); ele.setListProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.LIST_ELEMENT_KEY"), myList); //$NON-NLS-1$ } finally { HibernateUtil.commitTransaction(); } return ele; } private void checkValue(String expected, String value) { assertEquals(Messages.getInstance().getErrorString("RUNTIMEREPOTEST.ERROR_0002_VALUEREADNOTWHATWASEXPECTED", //$NON-NLS-1$ expected, value), expected, value); } private void checkValue(BigDecimal expected, BigDecimal value) { assertEquals(Messages.getInstance().getErrorString("RUNTIMEREPOTEST.ERROR_0002_VALUEREADNOTWHATWASEXPECTED", //$NON-NLS-1$ expected.toString(), value.toString()), expected, value); } @SuppressWarnings("unused") private void readElementTest(String instanceId) { HibernateUtil.beginTransaction(); IRuntimeRepository repo = new RuntimeRepository(); repo.setSession(getPentahoSession()); RuntimeElement re = (RuntimeElement) repo.loadElementById(instanceId, null); checkValue(Messages.getInstance().getString("RUNTIMEREPOTEST.SALES_SOLUTION"), re.getSolutionId()); //$NON-NLS-1$ checkValue(longString.toString(), re.getStringProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.LONG_STRING_KEY"))); //$NON-NLS-1$ checkValue( Messages.getInstance().getString("RUNTIMEREPOTEST.SHORT_STRING_VALUE"), re.getStringProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.SHORT_STRING_KEY"))); //$NON-NLS-1$ //$NON-NLS-2$ checkValue(bdProperty, re.getBigDecimalProperty(Messages.getInstance().getString("RUNTIMEREPOTEST.DECIMAL_KEY"))); //$NON-NLS-1$ String xml = re.toXML(); info(xml); Set namesSet = re.getParameterNames(); Iterator it = namesSet.iterator(); String pName, pType; while (it.hasNext()) { pName = (String) it.next(); pType = re.getParameterType(pName); info(Messages.getInstance().getString("RUNTIMEREPOTEST.DEBUG_NAME_TYPE", pName, pType)); //$NON-NLS-1$ } } public static Test suite() { return new TestSuite(RuntimeRepositoryTest.class); } }