/activeobjects-plugin/src/test/java/com/atlassian/activeobjects/internal/JdbcDriverDatabaseProviderFactoryTest.java
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}