/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

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