PageRenderTime 35ms CodeModel.GetById 17ms app.highlight 17ms RepoModel.GetById 0ms app.codeStats 0ms

/activeobjects-plugin/src/test/java/com/atlassian/activeobjects/internal/JdbcDriverDatabaseProviderFactoryTest.java

https://bitbucket.org/activeobjects/ao-plugin
Java | 176 lines | 142 code | 31 blank | 3 comment | 0 complexity | 091264784ead4eb916f8694e609206d6 MD5 | raw file
Possible License(s): Apache-2.0
  1package com.atlassian.activeobjects.internal;
  2
  3import com.atlassian.activeobjects.spi.DatabaseType;
  4import net.java.ao.DatabaseProvider;
  5import net.java.ao.db.ClientDerbyDatabaseProvider;
  6import net.java.ao.db.EmbeddedDerbyDatabaseProvider;
  7import net.java.ao.db.HSQLDatabaseProvider;
  8import net.java.ao.db.MsJdbcSQLServerDatabaseProvider;
  9import net.java.ao.db.MySQLDatabaseProvider;
 10import net.java.ao.db.OracleDatabaseProvider;
 11import net.java.ao.db.PostgreSQLDatabaseProvider;
 12import net.java.ao.db.SQLServerDatabaseProvider;
 13import org.junit.After;
 14import org.junit.Before;
 15import org.junit.Ignore;
 16import org.junit.Rule;
 17import org.junit.Test;
 18import org.junit.rules.ExpectedException;
 19import org.junit.runner.RunWith;
 20import org.mockito.Mock;
 21import org.mockito.runners.MockitoJUnitRunner;
 22
 23import javax.sql.DataSource;
 24import java.sql.Connection;
 25import java.sql.DatabaseMetaData;
 26import java.sql.SQLException;
 27import java.sql.Statement;
 28
 29import static org.junit.Assert.assertEquals;
 30import static org.junit.Assert.assertNotNull;
 31import static org.mockito.Mockito.mock;
 32import static org.mockito.Mockito.when;
 33
 34/**
 35 * Testing {@link com.atlassian.activeobjects.internal.JdbcDriverDatabaseProviderFactory}
 36 */
 37
 38@RunWith(MockitoJUnitRunner.class)
 39public class JdbcDriverDatabaseProviderFactoryTest {
 40    private static final String SOME_UNKOWN_DRIVER = "some unknown driver";
 41
 42    @Rule
 43    public ExpectedException expectedException = ExpectedException.none();
 44
 45    private DatabaseProviderFactory databaseProviderFactory;
 46    @Mock
 47    private DriverNameExtractor driverNameExtractor;
 48
 49    @Before
 50    public void setUp() throws Exception {
 51        databaseProviderFactory = new JdbcDriverDatabaseProviderFactory(driverNameExtractor);
 52    }
 53
 54    @After
 55    public void tearDown() throws Exception {
 56        databaseProviderFactory = null;
 57        driverNameExtractor = null;
 58    }
 59
 60    @Test
 61    public void testGetDatabaseProviderForUnknownDriver() throws Exception {
 62        expectedException.expect(DatabaseProviderNotFoundException.class);
 63        databaseProviderFactory.getDatabaseProvider(getMockDataSource(SOME_UNKOWN_DRIVER), DatabaseType.UNKNOWN, null);
 64    }
 65
 66    @Test
 67    public void testGetDatabaseProviderForMySqlDriver() throws Exception {
 68        testGetProviderOfTypeForDriverClassName(MySQLDatabaseProvider.class, "MySQL-AB JDBC Driver", DatabaseType.UNKNOWN);
 69    }
 70
 71    @Test
 72    public void testGetDatabaseProviderForMySqlDatabaseType() throws Exception {
 73        testGetProviderOfTypeForDriverClassName(MySQLDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.MYSQL);
 74    }
 75
 76    @Test
 77    public void testGetDatabaseProviderForClientDerbyDriver() throws Exception {
 78        testGetProviderOfTypeForDriverClassName(ClientDerbyDatabaseProvider.class, "Apache Derby Embedded JDBC Driver", DatabaseType.UNKNOWN);
 79    }
 80
 81    @Test
 82    public void testGetDatabaseProviderForClientDerbyDatabaseType() throws Exception {
 83        testGetProviderOfTypeForDriverClassName(ClientDerbyDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.DERBY_NETWORK);
 84    }
 85
 86    @Test
 87    @Ignore
 88    public void testGetDatabaseProviderForEmbeddedDerbyDriver() throws Exception {
 89        testGetProviderOfTypeForDriverClassName(EmbeddedDerbyDatabaseProvider.class, "org.apache.derby.jdbc.EmbeddedDriver", DatabaseType.UNKNOWN);
 90    }
 91
 92    @Test
 93    public void testGetDatabaseProviderForEmbeddedDerbyDatabaseType() throws Exception {
 94        testGetProviderOfTypeForDriverClassName(EmbeddedDerbyDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.DERBY_EMBEDDED);
 95    }
 96
 97    @Test
 98    public void testGetDatabaseProviderForOracleDriver() throws Exception {
 99        testGetProviderOfTypeForDriverClassName(OracleDatabaseProvider.class, "Oracle JDBC driver", DatabaseType.UNKNOWN);
100    }
101
102    @Test
103    public void testGetDatabaseProviderForOracleDatabaseType() throws Exception {
104        testGetProviderOfTypeForDriverClassName(OracleDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.ORACLE);
105    }
106
107    @Test
108    public void testGetDatabaseProviderForPostgresDriver() throws Exception {
109        testGetProviderOfTypeForDriverClassName(PostgreSQLDatabaseProvider.class, "PostgreSQL Native Driver", DatabaseType.UNKNOWN);
110    }
111
112    @Test
113    public void testGetDatabaseProviderForPostgresDatabaseType() throws Exception {
114        testGetProviderOfTypeForDriverClassName(PostgreSQLDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.POSTGRESQL);
115    }
116
117    @Test
118    public void testGetDatabaseProviderForMsSqlDriverMsSqlDatabaseType() throws Exception {
119        testGetProviderOfTypeForDriverClassName(MsJdbcSQLServerDatabaseProvider.class, "Microsoft JDBC Driver 4.2 for SQL Server", DatabaseType.MS_SQL);
120    }
121
122    @Test
123    public void testGetDatabaseProviderForJtdsDriverMsSqlDatabaseType() throws Exception {
124        testGetProviderOfTypeForDriverClassName(SQLServerDatabaseProvider.class, "jTDS Type 4 JDBC Driver for MS SQL Server and Sybase", DatabaseType.MS_SQL);
125    }
126
127    @Test
128    public void testGetDatabaseProviderForUnknownDriverMsSqlDatabaseType() throws Exception {
129        expectedException.expect(DatabaseProviderNotFoundException.class);
130        testGetProviderOfTypeForDriverClassName(SQLServerDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.MS_SQL);
131    }
132
133    @Test
134    public void testGetDatabaseProviderForMsSqlDriverUnknownDatabaseType() throws Exception {
135        expectedException.expect(DatabaseProviderNotFoundException.class);
136        testGetProviderOfTypeForDriverClassName(SQLServerDatabaseProvider.class, "Microsoft JDBC Driver 4.2 for SQL Server", DatabaseType.UNKNOWN);
137    }
138
139    @Test
140    public void testGetDatabaseProviderForJtdsDriverUnknownDatabaseType() throws Exception {
141        expectedException.expect(DatabaseProviderNotFoundException.class);
142        testGetProviderOfTypeForDriverClassName(SQLServerDatabaseProvider.class, "jTDS Type 4 JDBC Driver for MS SQL Server and Sybase", DatabaseType.UNKNOWN);
143    }
144
145    @Test
146    public void testGetDatabaseProviderForHsqlDriver() throws Exception {
147        testGetProviderOfTypeForDriverClassName(HSQLDatabaseProvider.class, "HSQL Database Engine Driver", DatabaseType.UNKNOWN);
148    }
149
150    @Test
151    public void testGetDatabaseProviderForHsqlDatabaseType() throws Exception {
152        testGetProviderOfTypeForDriverClassName(HSQLDatabaseProvider.class, SOME_UNKOWN_DRIVER, DatabaseType.HSQL);
153    }
154
155    private void testGetProviderOfTypeForDriverClassName(Class<? extends DatabaseProvider> providerClass, String driver, DatabaseType databaseType) throws Exception {
156        final DataSource dataSource = getMockDataSource(driver);
157
158        final DatabaseProvider provider = databaseProviderFactory.getDatabaseProvider(dataSource, databaseType, null);
159        assertNotNull(provider);
160        assertEquals(providerClass, provider.getClass());
161    }
162
163    private DataSource getMockDataSource(String driver) throws SQLException {
164        final DataSource dataSource = mock(DataSource.class);
165        final Connection connection = mock(Connection.class);
166        final DatabaseMetaData metaData = mock(DatabaseMetaData.class);
167        final Statement statement = mock(Statement.class);
168
169        when(driverNameExtractor.getDriverName(dataSource)).thenReturn(driver);
170        when(dataSource.getConnection()).thenReturn(connection);
171        when(connection.getMetaData()).thenReturn(metaData);
172        when(connection.createStatement()).thenReturn(statement);
173        when(metaData.getIdentifierQuoteString()).thenReturn("");
174        return dataSource;
175    }
176}