// ============================================================================ // // 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.cwm.db.connection; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.junit.Assert; import org.junit.Test; import org.talend.commons.utils.io.FilesUtils; import org.talend.core.database.EDatabaseTypeName; import org.talend.core.model.metadata.builder.connection.ConnectionFactory; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.metadata.builder.connection.impl.ConnectionFactoryImpl; import org.talend.core.model.metadata.builder.database.ExtractMetaDataUtils; import org.talend.core.model.metadata.builder.database.JavaSqlFactory; import org.talend.core.model.metadata.builder.database.dburl.SupportDBUrlType; import org.talend.cwm.management.i18n.Messages; import org.talend.dq.CWMPlugin; import org.talend.utils.sugars.ReturnCode; /** * DOC msjian class global comment. Detailled comment */ public class ConnectionUtilsTest { /** * Test method for * {@link org.talend.cwm.db.connection.ConnectionUtils#isGeneralJdbc(org.talend.core.model.metadata.builder.connection.Connection)} * . */ @Test public void testIsGeneralJdbc() { DatabaseConnection createDatabaseConnection = ConnectionFactoryImpl.eINSTANCE.createDatabaseConnection(); EDatabaseTypeName generalJdbcType = EDatabaseTypeName.GENERAL_JDBC; createDatabaseConnection.setDatabaseType(generalJdbcType.getDisplayName()); Assert.assertTrue( "Current DatabaseType of connection should be " + EDatabaseTypeName.GENERAL_JDBC.getDisplayName(), ConnectionUtils.isGeneralJdbc(createDatabaseConnection)); //$NON-NLS-1$ } /** * Test method for * {@link org.talend.cwm.db.connection.ConnectionUtils#checkGeneralJdbcJarFilePathDriverClassName(org.talend.core.model.metadata.builder.connection.DatabaseConnection)} * . case 1 success case */ @Test public void testCheckGeneralJdbcJarFilePathDriverClassNameCase1() { String driverClass = "om.mysql.jdbc.Driver"; //$NON-NLS-1$ String driverName = "mysql-connector-java-5.1.12-bin.jar"; //$NON-NLS-1$ CopyTheJarFile(); DatabaseConnection createDatabaseConnection = ConnectionFactoryImpl.eINSTANCE.createDatabaseConnection(); createDatabaseConnection.setDriverClass(driverClass); createDatabaseConnection.setDriverJarPath(driverName); try { ReturnCode rc = ConnectionUtils.checkGeneralJdbcJarFilePathDriverClassName(createDatabaseConnection); Assert.assertTrue("The driver " + driverName + " of conection can not be find", rc.isOk()); //$NON-NLS-1$ } catch (MalformedURLException e) { Assert.fail(e.getMessage()); } } /** * Test method for * {@link org.talend.cwm.db.connection.ConnectionUtils#checkGeneralJdbcJarFilePathDriverClassName(org.talend.core.model.metadata.builder.connection.DatabaseConnection)} * . case 2 driverClass is null or empty */ @Test public void testCheckGeneralJdbcJarFilePathDriverClassNameCase2() { String driverClass = StringUtils.EMPTY; String driverName = "mysql-connector-java-5.1.12-bin.jar"; //$NON-NLS-1$ CopyTheJarFile(); DatabaseConnection createDatabaseConnection = ConnectionFactoryImpl.eINSTANCE.createDatabaseConnection(); createDatabaseConnection.setDriverClass(driverClass); createDatabaseConnection.setDriverJarPath(driverName); try { // driver class is empty case ReturnCode rc = ConnectionUtils.checkGeneralJdbcJarFilePathDriverClassName(createDatabaseConnection); Assert.assertFalse("The driver of conection is empty so that should not be found", rc.isOk()); //$NON-NLS-1$ Assert.assertEquals(Messages.getString("ConnectionUtils.DriverClassEmpty"), rc.getMessage()); //$NON-NLS-1$ // driver class is Null case driverClass = null; createDatabaseConnection.setDriverClass(driverClass); rc = ConnectionUtils.checkGeneralJdbcJarFilePathDriverClassName(createDatabaseConnection); Assert.assertFalse("The driver of conection is Null so that should not be found", rc.isOk()); //$NON-NLS-1$ Assert.assertEquals(Messages.getString("ConnectionUtils.DriverClassEmpty"), rc.getMessage()); //$NON-NLS-1$ } catch (MalformedURLException e) { Assert.fail(e.getMessage()); } } /** * Test method for * {@link org.talend.cwm.db.connection.ConnectionUtils#checkGeneralJdbcJarFilePathDriverClassName(org.talend.core.model.metadata.builder.connection.DatabaseConnection)} * . case 3 driverName is null or empty */ @Test public void testCheckGeneralJdbcJarFilePathDriverClassNameCase3() { String driverClass = "om.mysql.jdbc.Driver"; //$NON-NLS-1$ String driverName = StringUtils.EMPTY; CopyTheJarFile(); DatabaseConnection createDatabaseConnection = ConnectionFactoryImpl.eINSTANCE.createDatabaseConnection(); createDatabaseConnection.setDriverClass(driverClass); createDatabaseConnection.setDriverJarPath(driverName); try { // driver name is empty case ReturnCode rc = ConnectionUtils.checkGeneralJdbcJarFilePathDriverClassName(createDatabaseConnection); Assert.assertFalse("The class of driver is empty so that should not be found", rc.isOk()); //$NON-NLS-1$ Assert.assertEquals(Messages.getString("ConnectionUtils.DriverJarFileEmpty"), rc.getMessage()); //$NON-NLS-1$ // driver name is Null case driverClass = null; createDatabaseConnection.setDriverJarPath(driverName); rc = ConnectionUtils.checkGeneralJdbcJarFilePathDriverClassName(createDatabaseConnection); Assert.assertFalse("The class of driver is Null so that should not be found", rc.isOk()); //$NON-NLS-1$ Assert.assertEquals(Messages.getString("ConnectionUtils.DriverJarFileEmpty"), rc.getMessage()); //$NON-NLS-1$ } catch (MalformedURLException e) { Assert.fail(e.getMessage()); } } /** * Test method for * {@link org.talend.cwm.db.connection.ConnectionUtils#checkGeneralJdbcJarFilePathDriverClassName(org.talend.core.model.metadata.builder.connection.DatabaseConnection)} * . case 4 The jar can not be found case */ @Test public void testCheckGeneralJdbcJarFilePathDriverClassNameCase4() { String driverClass = "om.mysql.jdbc.Driver"; //$NON-NLS-1$ String driverName = "mysql-connector-java-5.1.12-bin111111.jar"; //$NON-NLS-1$ CopyTheJarFile(); DatabaseConnection createDatabaseConnection = ConnectionFactoryImpl.eINSTANCE.createDatabaseConnection(); createDatabaseConnection.setDriverClass(driverClass); createDatabaseConnection.setDriverJarPath(driverName); try { ReturnCode rc = ConnectionUtils.checkGeneralJdbcJarFilePathDriverClassName(createDatabaseConnection); Assert.assertFalse("The driver is not exist so that should not be found", rc.isOk()); //$NON-NLS-1$ Assert.assertEquals(Messages.getString("ConnectionUtils.JarFileCanNotBeFound"), rc.getMessage()); //$NON-NLS-1$ } catch (MalformedURLException e) { Assert.fail(e.getMessage()); } } /** * Copy The jar file if it is not exist or not new one. * * @throws URISyntaxException */ private void CopyTheJarFile() { try { File sourceFile = null; URL fileURL = null; try { URL resource = CWMPlugin.getDefault().getBundle() .getResource("jdbc" + Path.SEPARATOR + "mysql-connector-java-5.1.12-bin.jar"); //$NON-NLS-1$ //$NON-NLS-2$ fileURL = FileLocator.toFileURL(resource); URI uri = fileURL.toURI(); sourceFile = new File(uri); } catch (IllegalArgumentException e) { try { Assert.fail("url is: " + fileURL.toString() + "URI is: " + fileURL.toURI().toString()); //$NON-NLS-1$ //$NON-NLS-2$ } catch (URISyntaxException e1) { Assert.fail(e1.getMessage()); } } catch (URISyntaxException e) { Assert.fail(e.getMessage()); } if (sourceFile == null) { Assert.fail("source file is not exist"); //$NON-NLS-1$ } String tempLibPath = ExtractMetaDataUtils.getInstance().getJavaLibPath(); File targetFile = new File(tempLibPath + "mysql-connector-java-5.1.12-bin.jar"); //$NON-NLS-1$ FilesUtils.copyFile(sourceFile, targetFile); } catch (IOException e1) { Assert.fail(e1.getMessage()); } } /** * Test method for * {@link org.talend.cwm.db.connection.ConnectionUtils#checkUsernameBeforeSaveConnection4Sqlite(org.talend.core.model.metadata.builder.connection.Connection)} * . */ @Test public void testCheckUsernameBeforeSaveConnection4Sqlite() { DatabaseConnection sqliteConn = ConnectionFactory.eINSTANCE.createDatabaseConnection(); sqliteConn.setDatabaseType(SupportDBUrlType.SQLITE3DEFAULTURL.getDBKey()); sqliteConn.setUsername(""); //$NON-NLS-1$ sqliteConn.setContextMode(false); ConnectionUtils.checkUsernameBeforeSaveConnection4Sqlite(sqliteConn); Assert.assertTrue(JavaSqlFactory.DEFAULT_USERNAME.equals(sqliteConn.getUsername())); String username = "abc"; //$NON-NLS-1$ sqliteConn.setUsername(username); ConnectionUtils.checkUsernameBeforeSaveConnection4Sqlite(sqliteConn); Assert.assertFalse(JavaSqlFactory.DEFAULT_USERNAME.equals(sqliteConn.getUsername())); Assert.assertTrue(username.equals(sqliteConn.getUsername())); } @Test public void testIsConnectionAvailable_generalJDBC_false() { String driverClass = "om.mysql.jdbc.Driver"; //$NON-NLS-1$ String driverName = "mysql-connector-java-5.1.12-bin.jar"; //$NON-NLS-1$ CopyTheJarFile(); DatabaseConnection createDatabaseConnection = ConnectionFactoryImpl.eINSTANCE.createDatabaseConnection(); createDatabaseConnection.setDriverClass(driverClass); createDatabaseConnection.setDriverJarPath(driverName); createDatabaseConnection.setUsername("root"); //$NON-NLS-1$ createDatabaseConnection.setPassword("root"); //$NON-NLS-1$ createDatabaseConnection.setDatabaseType("General JDBC"); //$NON-NLS-1$ ReturnCode ret = ConnectionUtils.isConnectionAvailable(createDatabaseConnection); Assert.assertFalse(ret.isOk()); } }