/*
* 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 2006 - 2013 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.platform.engine.core;
import junit.framework.TestCase;
import org.pentaho.platform.api.util.ITempFileDeleter;
import org.pentaho.platform.engine.core.system.StandaloneApplicationContext;
import org.pentaho.platform.engine.core.system.StandaloneSession;
import org.pentaho.platform.engine.core.system.StandaloneTempFileDeleter;
import org.pentaho.platform.util.UUIDUtil;
import java.io.File;
import java.util.Locale;
@SuppressWarnings( "nls" )
public class StandaloneSessionTest extends TestCase {
private static final String SolutionDeleterTopFolderName = "test-session-solution";
public void testDefaultConstructor() {
StandaloneSession session = new StandaloneSession();
assertEquals( "session name is wrong", "unknown", session.getName() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session id is wrong", "unknown", session.getId() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session locale is wrong", Locale.getDefault(), session.getLocale() ); //$NON-NLS-1$
// make sure this does not blow up
session.destroy();
assertEquals( "session object name is wrong", StandaloneSession.class.getName(), session.getObjectName() ); //$NON-NLS-1$
}
protected void setUp() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ) ); //$NON-NLS-1$
File solnDir = new File( tmpDir, "test-session-solution/system/tmp" ); //$NON-NLS-1$
if ( !solnDir.exists() ) {
solnDir.mkdirs();
}
}
protected void tearDown() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ) ); //$NON-NLS-1$
File solnDir = new File( tmpDir, "test-session-solution" ); //$NON-NLS-1$
emptyDir( solnDir );
if ( ( solnDir != null ) & ( solnDir.exists() ) ) {
solnDir.delete();
}
}
protected void emptyDir( File aFile ) throws Exception {
File[] files = aFile.listFiles();
for ( File aTmpFile : files ) {
if ( aTmpFile.isDirectory() ) {
emptyDir( aTmpFile );
} else if ( aTmpFile.isFile() ) {
aTmpFile.delete();
}
}
}
public void testNameConstructor() {
StandaloneSession session = new StandaloneSession( "testname" ); //$NON-NLS-1$
assertEquals( "session name is wrong", "testname", session.getName() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session id is wrong", "testname", session.getId() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session locale is wrong", Locale.getDefault(), session.getLocale() ); //$NON-NLS-1$
}
public void testIdConstructor() {
StandaloneSession session = new StandaloneSession( "testname", "testid" ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session name is wrong", "testname", session.getName() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session id is wrong", "testid", session.getId() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session locale is wrong", Locale.getDefault(), session.getLocale() ); //$NON-NLS-1$
}
public void testConstructor() {
StandaloneSession session = new StandaloneSession( "testname", "testid", Locale.CHINESE ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session name is wrong", "testname", session.getName() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session id is wrong", "testid", session.getId() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "session locale is wrong", Locale.CHINESE, session.getLocale() ); //$NON-NLS-1$
}
public void testAttributes() {
StandaloneSession session = new StandaloneSession();
assertFalse( "Wrong attributes", session.getAttributeNames().hasNext() ); //$NON-NLS-1$
session.setAttribute( "testattribute", this ); //$NON-NLS-1$
assertTrue( "Wrong attributes", session.getAttributeNames().hasNext() ); //$NON-NLS-1$
assertEquals( "Wrong attribute name", "testattribute", session.getAttributeNames().next() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "Wrong attribute value", this, session.getAttribute( "testattribute" ) ); //$NON-NLS-1$ //$NON-NLS-2$
session.removeAttribute( "testattribute" ); //$NON-NLS-1$
assertFalse( "Wrong attributes", session.getAttributeNames().hasNext() ); //$NON-NLS-1$
assertNull( "Wrong attribute value", session.getAttribute( "testattribute" ) ); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testLogger() {
StandaloneSession session = new StandaloneSession();
assertNotNull( "Bad logger", session.getLogger() ); //$NON-NLS-1$
}
public void testAuthenticated() {
StandaloneSession session = new StandaloneSession( "testname" ); //$NON-NLS-1$
assertFalse( "Wrong authenication", session.isAuthenticated() ); //$NON-NLS-1$
session.setAuthenticated( null );
assertFalse( "Wrong authenication", session.isAuthenticated() ); //$NON-NLS-1$
session.setAuthenticated( "testname" ); //$NON-NLS-1$
assertTrue( "Wrong authenication", session.isAuthenticated() ); //$NON-NLS-1$
session.setNotAuthenticated();
assertNull( "session name is wrong", session.getName() ); //$NON-NLS-1$
assertFalse( "Wrong authenication", session.isAuthenticated() ); //$NON-NLS-1$
}
public void testActionProcess() {
StandaloneSession session = new StandaloneSession();
assertEquals( "Wrong action name", "", session.getActionName() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "Wrong process id", null, session.getProcessId() ); //$NON-NLS-1$
session.setActionName( "testaction" ); //$NON-NLS-1$
session.setProcessId( "testprocess" ); //$NON-NLS-1$
assertEquals( "Wrong action name", "testaction", session.getActionName() ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals( "Wrong process id", "testprocess", session.getProcessId() ); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBackgroundAlert() {
StandaloneSession session = new StandaloneSession();
assertFalse( "Wrong alert", session.getBackgroundExecutionAlert() ); //$NON-NLS-1$
session.setBackgroundExecutionAlert();
assertTrue( "Wrong alert", session.getBackgroundExecutionAlert() ); //$NON-NLS-1$
session.resetBackgroundExecutionAlert();
assertFalse( "Wrong alert", session.getBackgroundExecutionAlert() ); //$NON-NLS-1$
}
protected String getSolutionRoot() {
String tmpDir = System.getProperty( "java.io.tmpdir" ); //$NON-NLS-1$
if ( tmpDir.endsWith( "/" ) ) { //$NON-NLS-1$
return tmpDir + SolutionDeleterTopFolderName;
} else {
return tmpDir + "/" + SolutionDeleterTopFolderName; //$NON-NLS-1$
}
}
public void testTempFileDeleter() throws Exception {
StandaloneSession session = new StandaloneSession( "tempfiledeleter", UUIDUtil.getUUIDAsString() ); // get one with an id. //$NON-NLS-1$
StandaloneTempFileDeleter deleter = new StandaloneTempFileDeleter();
StandaloneApplicationContext appContext = new StandaloneApplicationContext( getSolutionRoot(), "" ); //$NON-NLS-1$ //$NON-NLS-2$
File file1 = appContext.createTempFile( session, "testTempFileDeleter", "txt", true ); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull( file1 ); // File object was returned
assertTrue( file1.exists() ); // File exists
assertFalse( deleter.hasTempFile( file1.getName() ) ); // Deleter wasn't bound to session, so no delete
// Bind deleter to the session
session.setAttribute( ITempFileDeleter.DELETER_SESSION_VARIABLE, deleter );
File file2 = appContext.createTempFile( session, "testTempFileDeleter", "txt", true ); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull( file2 ); // File object was returned
assertTrue( file2.exists() ); // File exists
assertTrue( deleter.hasTempFile( file2.getName() ) ); // Deleter is bound to session
// File names should be unique
assertFalse( file1.getName().equals( file2.getName() ) );
deleter.doTempFileCleanup();
assertTrue( file1.exists() ); // This file will be left over
assertFalse( file2.exists() ); // The deleter should have removed this
assertFalse( deleter.hasTempFile( file2.getName() ) ); // After doTempFileCleanup() the list should be empty
// The tearDown should blow away everything else...
deleter.trackTempFile( file2 ); // Add known deleted file to the deleter
deleter.doTempFileCleanup(); // Validates cleanup doesn't choke on missing files
// Test that IllegalArgumentException if passed a null
try {
deleter.trackTempFile( null );
fail();
} catch ( IllegalArgumentException expected ) {
//ignored
}
}
}