Java tutorial
/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.core.database; import org.apache.commons.dbcp.BasicDataSource; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.pentaho.di.core.KettleClientEnvironment; import org.pentaho.di.core.exception.KettleDatabaseException; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.logging.LogChannelInterface; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.DriverPropertyInfo; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.Properties; import java.util.logging.Logger; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; /** * User: Dzmitry Stsiapanau Date: 12/11/13 Time: 1:59 PM */ @RunWith(MockitoJUnitRunner.class) public class ConnectionPoolUtilTest implements Driver { private static final String PASSWORD = "manager"; private static final String ENCR_PASSWORD = "Encrypted 2be98afc86aa7f2e4cb14af7edf95aac8"; @Mock(answer = Answers.RETURNS_MOCKS) LogChannelInterface logChannelInterface; @Mock(answer = Answers.RETURNS_MOCKS) DatabaseMeta dbMeta; @Mock BasicDataSource dataSource; final int INITIAL_SIZE = 1; final int MAX_SIZE = 10; public ConnectionPoolUtilTest() { try { DriverManager.registerDriver(this); } catch (SQLException e) { e.printStackTrace(); } } @BeforeClass public static void setupBeforeClass() throws KettleException { KettleClientEnvironment.init(); } @Before public void setUp() throws Exception { when(dbMeta.getDriverClass()).thenReturn(this.getClass().getCanonicalName()); when(dbMeta.getConnectionPoolingProperties()).thenReturn(new Properties()); when(dbMeta.environmentSubstitute(anyString())).thenAnswer(invocation -> invocation.getArguments()[0]); } @After public void tearDown() throws Exception { DriverManager.deregisterDriver(this); } @Test public void testGetConnection() throws Exception { when(dbMeta.getName()).thenReturn("CP1"); when(dbMeta.getPassword()).thenReturn(PASSWORD); Connection conn = ConnectionPoolUtil.getConnection(logChannelInterface, dbMeta, "", 1, 2); assertTrue(conn != null); } @Test public void testGetConnectionEncrypted() throws Exception { when(dbMeta.getName()).thenReturn("CP2"); when(dbMeta.getPassword()).thenReturn(ENCR_PASSWORD); Connection conn = ConnectionPoolUtil.getConnection(logChannelInterface, dbMeta, "", 1, 2); assertTrue(conn != null); } @Test public void testGetConnectionName() throws Exception { when(dbMeta.getName()).thenReturn("CP2"); when(dbMeta.getPassword()).thenReturn(ENCR_PASSWORD); String connectionName = ConnectionPoolUtil.buildPoolName(dbMeta, ""); assertTrue(connectionName.equals("CP2")); assertFalse(connectionName.equals("CP2pentaho")); when(dbMeta.getDatabaseName()).thenReturn("pentaho"); connectionName = ConnectionPoolUtil.buildPoolName(dbMeta, ""); assertTrue(connectionName.equals("CP2pentaho")); assertFalse(connectionName.equals("CP2pentaholocal")); when(dbMeta.getHostname()).thenReturn("local"); connectionName = ConnectionPoolUtil.buildPoolName(dbMeta, ""); assertTrue(connectionName.equals("CP2pentaholocal")); assertFalse(connectionName.equals("CP2pentaholocal3306")); when(dbMeta.getDatabasePortNumberString()).thenReturn("3306"); connectionName = ConnectionPoolUtil.buildPoolName(dbMeta, ""); assertTrue(connectionName.equals("CP2pentaholocal3306")); } @Test public void testConfigureDataSource() throws KettleDatabaseException { when(dbMeta.getURL("partId")).thenReturn("jdbc:foo://server:111"); when(dbMeta.getUsername()).thenReturn("suzy"); when(dbMeta.getPassword()).thenReturn("password"); ConnectionPoolUtil.configureDataSource(dataSource, dbMeta, "partId", INITIAL_SIZE, MAX_SIZE); verify(dataSource).setDriverClassName("org.pentaho.di.core.database.ConnectionPoolUtilTest"); verify(dataSource).setDriverClassLoader(any(ClassLoader.class)); verify(dataSource).setUrl("jdbc:foo://server:111"); verify(dataSource).addConnectionProperty("user", "suzy"); verify(dataSource).addConnectionProperty("password", "password"); verify(dataSource).setInitialSize(INITIAL_SIZE); verify(dataSource).setMaxActive(MAX_SIZE); } @Test public void testConfigureDataSourceWhenNoDatabaseInterface() throws KettleDatabaseException { when(dbMeta.getDatabaseInterface()).thenReturn(null); ConnectionPoolUtil.configureDataSource(dataSource, dbMeta, "partId", INITIAL_SIZE, MAX_SIZE); verify(dataSource, never()).setDriverClassLoader(any(ClassLoader.class)); } @Override public Connection connect(String url, Properties info) throws SQLException { String password = info.getProperty("password"); return PASSWORD.equals(password) ? mock(Connection.class) : null; } @Override public boolean acceptsURL(String url) throws SQLException { return true; } @Override public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { return null; } @Override public int getMajorVersion() { return 0; } @Override public int getMinorVersion() { return 0; } @Override public boolean jdbcCompliant() { return false; } @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException { return null; } }