// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dq.analysis.connpool;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import junit.framework.Assert;
import org.eclipse.emf.ecore.EClass;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.talend.core.model.metadata.builder.connection.ConnectionPackage;
import org.talend.core.model.metadata.builder.database.JavaSqlFactory;
import org.talend.cwm.helper.SwitchHelpers;
import org.talend.dataquality.analysis.Analysis;
import org.talend.dataquality.analysis.AnalysisContext;
import org.talend.dataquality.analysis.AnalysisResult;
import org.talend.dataquality.analysis.ExecutionInformations;
import org.talend.dq.analysis.AnalysisHandler;
import org.talend.utils.sugars.TypedReturnCode;
/**
* DOC yyin class global comment. Detailled comment
*/
@PrepareForTest({ AnalysisHandler.class, SwitchHelpers.class, JavaSqlFactory.class })
public class TdqAnalysisConnectionPoolTest {
@Rule
public PowerMockRule powerMockRule = new PowerMockRule();
TdqAnalysisConnectionPool connPool;
Analysis analysis;
org.talend.core.model.metadata.builder.connection.Connection dataManager;
/**
* DOC yyin Comment method "setUp".
*
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
analysis = mock(Analysis.class);
AnalysisContext context = mock(AnalysisContext.class);
AnalysisResult result = mock(AnalysisResult.class);
dataManager = mock(org.talend.core.model.metadata.builder.connection.Connection.class);
ExecutionInformations resultMetadata = mock(ExecutionInformations.class);
PowerMockito.mockStatic(AnalysisHandler.class);
AnalysisHandler mockHandler = mock(AnalysisHandler.class);
when(AnalysisHandler.createHandler(analysis)).thenReturn(mockHandler);
when(mockHandler.getNumberOfConnectionsPerAnalysis()).thenReturn(5);
when(context.getConnection()).thenReturn(dataManager);
when(analysis.getContext()).thenReturn(context);
when(analysis.getResults()).thenReturn(result);
when(result.getResultMetadata()).thenReturn(resultMetadata);
connPool = new TdqAnalysisConnectionPool(analysis, 5);
}
/**
* DOC yyin Comment method "tearDown".
*
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
}
/**
* Test method for
* {@link org.talend.dq.analysis.connpool.TdqAnalysisConnectionPool#getConnectionPool(org.talend.dataquality.analysis.Analysis)}
* .
*/
@Test
public void testGetConnectionPool() {
TdqAnalysisConnectionPool pool = TdqAnalysisConnectionPool.getConnectionPool(analysis);
assertNotNull(pool);
}
/**
* Test method for {@link org.talend.dq.analysis.connpool.TdqAnalysisConnectionPool#getConnection()}.
*
* @throws SQLException
*/
@Test
public void testGetConnection() throws SQLException {
TdqAnalysisConnectionPool pool = TdqAnalysisConnectionPool.getConnectionPool(analysis);
assertNotNull(pool);
// PowerMockito.mockStatic(SwitchHelpers.class);
// ConnectionSwitch<org.talend.core.model.metadata.builder.connection.Connection> conSwitch =
// mock(ConnectionSwitch.class);
// when(SwitchHelpers.CONNECTION_SWITCH).thenReturn(conSwitch);
EClass theEClass = mock(EClass.class);
when(dataManager.eClass()).thenReturn(theEClass);
when(theEClass.getClassifierID()).thenReturn(ConnectionPackage.CONNECTION);
when(theEClass.eContainer()).thenReturn(ConnectionPackage.eINSTANCE);
// org.talend.core.model.metadata.builder.connection.Connection dataprovider =
// mock(org.talend.core.model.metadata.builder.connection.Connection.class);
// when(conSwitch.doSwitch(dataManager)).thenReturn(dataprovider);
PowerMockito.mockStatic(JavaSqlFactory.class);
TypedReturnCode<Connection> trcConn = mock(TypedReturnCode.class);
when(JavaSqlFactory.createConnection(dataManager)).thenReturn(trcConn);
when(trcConn.isOk()).thenReturn(true);
Connection conn = mock(Connection.class);
when(trcConn.getObject()).thenReturn(conn);
DatabaseMetaData metaData = mock(DatabaseMetaData.class);
when(conn.getMetaData()).thenReturn(metaData);
when(metaData.getMaxConnections()).thenReturn(100);
Connection con = pool.getConnection();
assertNotNull(con);
}
/**
* Test method for {@link org.talend.dq.analysis.connpool.TdqAnalysisConnectionPool#closeConnectionPool()}.
*/
@Test
public void testCloseConnectionPool() {
TdqAnalysisConnectionPool pool = TdqAnalysisConnectionPool.getConnectionPool(analysis);
assertNotNull(pool);
pool.closeConnectionPool();
Assert.assertTrue(pool.getPConnections().size() == 0);
}
}