/* * 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.plugin.action.olap; import junit.framework.Assert; import org.junit.Test; import org.mockito.Mockito; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.engine.core.system.PentahoSessionHolder; import org.pentaho.platform.util.Base64PasswordService; import org.pentaho.platform.util.PasswordHelper; import java.util.Arrays; import java.util.Properties; public class Olap4jSystemListenerTest { @Test public void testStartupRegistersAndRemovesOlapConnections() throws Exception { final IOlapService mockOlapService = Mockito.mock( IOlapService.class ); final IPentahoSession mockSession = Mockito.mock( IPentahoSession.class ); Olap4jSystemListener listener = new Olap4jSystemListener() { @Override IOlapService getOlapService( IPentahoSession session ) { Assert.assertSame( mockSession, session ); return mockOlapService; } @Override PasswordHelper getPasswordHelper() { return new PasswordHelper( new Base64PasswordService() ); } }; final IPentahoSession oSession = PentahoSessionHolder.getSession(); PentahoSessionHolder.setSession( mockSession ); try { Properties properties1 = makeProperties( "aName", "idk", "jdbc:mongolap:host=remote;user=admin;Password=ENC:YWRtaW4=;port=1234", "aUser", "ENC:YVBhc3N3b3Jk" ); Properties properties2 = makeProperties( "bName", "istilldk", "jdbc:mongolap:host=remoteb;user=admin;password=admin;port=1234", "bUser", "bPassword" ); listener.setOlap4jConnectionList( Arrays.asList( properties1, properties2 ) ); listener.setOlap4jConnectionRemoveList( Arrays.asList( "defunctConnection", "worthless" ) ); listener.startup( mockSession ); Mockito.verify( mockOlapService ) .addOlap4jCatalog( "aName", "idk", "jdbc:mongolap:host=remote; user=admin; Password=admin; port=1234", "aUser", "aPassword", new Properties(), true, mockSession ); Mockito.verify( mockOlapService ) .addOlap4jCatalog( "bName", "istilldk", "jdbc:mongolap:host=remoteb; user=admin; password=admin; port=1234", "bUser", "bPassword", new Properties(), true, mockSession ); Mockito.verify( mockOlapService ).removeCatalog( "defunctConnection", mockSession ); Mockito.verify( mockOlapService ).removeCatalog( "worthless", mockSession ); } finally { PentahoSessionHolder.setSession( oSession ); } } @Test public void testExceptionsDoNotStopSystemLoad() throws Exception { final IOlapService mockOlapService = Mockito.mock( IOlapService.class ); final IPentahoSession mockSession = Mockito.mock( IPentahoSession.class ); Olap4jSystemListener listener = new Olap4jSystemListener() { @Override IOlapService getOlapService( IPentahoSession session ) { Assert.assertSame( mockSession, session ); return mockOlapService; } @Override PasswordHelper getPasswordHelper() { return new PasswordHelper( new Base64PasswordService() ); } }; Properties properties1 = makeProperties( "aName", "idk", "jdbc:mongolap:host=remote", "aUser", "aPassword" ); listener.setOlap4jConnectionList( Arrays.asList( properties1 ) ); listener.setOlap4jConnectionRemoveList( Arrays.asList( "defunctConnection" ) ); Mockito.doThrow( new RuntimeException( "something terrible happened" ) ) .when( mockOlapService ) .addOlap4jCatalog( "aName", "idk", "jdbc:mongolap:host=remote", "aUser", "aPassword", new Properties(), true, mockSession ); Mockito.doThrow( new RuntimeException( "something amazing happend" ) ) .when( mockOlapService ) .removeCatalog( "defunctConnection", mockSession ); Assert.assertTrue( listener.startup( mockSession ) ); } private Properties makeProperties( String name, String className, String connectString, String user, String password ) { Properties properties = new Properties(); properties.setProperty( "name", name ); properties.setProperty( "className", className ); properties.setProperty( "connectString", connectString ); properties.setProperty( "user", user ); properties.setProperty( "password", password ); return properties; } }