1 package com.atlassian.activeobjects.jira;
2
3 import com.atlassian.activeobjects.spi.DatabaseType;
4 import com.atlassian.jira.ofbiz.OfBizConnectionFactory;
5 import com.atlassian.tenancy.api.Tenant;
6 import org.junit.After;
7 import org.junit.Before;
8 import org.junit.Test;
9 import org.junit.runner.RunWith;
10 import org.mockito.Mock;
11 import org.mockito.junit.MockitoJUnitRunner;
12 import org.ofbiz.core.entity.jdbc.dbtype.DatabaseTypeFactory;
13
14 import java.sql.Connection;
15
16 import static org.junit.Assert.assertEquals;
17 import static org.mockito.Mockito.mock;
18 import static org.mockito.Mockito.when;
19
20
21
22
23 @RunWith(MockitoJUnitRunner.class)
24 public class JiraTenantAwareDataSourceProviderTest {
25 private JiraTenantAwareDataSourceProvider dataSourceProvider;
26
27 @Mock
28 private OfBizConnectionFactory ofBizConnectionFactory;
29
30 @Mock
31 private JiraDatabaseTypeExtractor jiraDatabaseTypeExtractor;
32
33 @Mock
34 private Tenant tenant;
35
36 @Before
37 public void setUp() {
38 dataSourceProvider = new JiraTenantAwareDataSourceProvider(ofBizConnectionFactory, jiraDatabaseTypeExtractor);
39 }
40
41 @After
42 public void tearDown() {
43 dataSourceProvider = null;
44 }
45
46 @Test
47 public void testGetUnknownDatabaseType() throws Exception {
48 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, null);
49 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, DatabaseTypeFactory.CLOUDSCAPE);
50 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, DatabaseTypeFactory.FIREBIRD);
51 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, DatabaseTypeFactory.H2);
52 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, DatabaseTypeFactory.SAP_DB);
53 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, DatabaseTypeFactory.SAP_DB_7_6);
54 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.UNKNOWN, DatabaseTypeFactory.SYBASE);
55 }
56
57 @Test
58 public void testGetDb2DatabaseType() throws Exception {
59 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.DB2, DatabaseTypeFactory.DB2);
60 }
61
62 @Test
63 public void testGetHsqlDatabaseType() throws Exception {
64 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.HSQL, DatabaseTypeFactory.HSQL);
65 }
66
67 @Test
68 public void testGetMySqlDatabaseType() throws Exception {
69 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.MYSQL, DatabaseTypeFactory.MYSQL);
70 }
71
72 @Test
73 public void testGetPostgreSqlDatabaseType() throws Exception {
74 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.POSTGRESQL, DatabaseTypeFactory.POSTGRES);
75 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.POSTGRESQL, DatabaseTypeFactory.POSTGRES_7_2);
76 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.POSTGRESQL, DatabaseTypeFactory.POSTGRES_7_3);
77 }
78
79 @Test
80 public void testGetOracleDatabaseType() throws Exception {
81 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.ORACLE, DatabaseTypeFactory.ORACLE_8I);
82 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.ORACLE, DatabaseTypeFactory.ORACLE_10G);
83 }
84
85 @Test
86 public void testGetSqlServerDatabaseType() throws Exception {
87 assertDatabaseTypeFromJiraDatabaseType(DatabaseType.MS_SQL, DatabaseTypeFactory.MSSQL);
88 }
89
90 private void assertDatabaseTypeFromJiraDatabaseType(DatabaseType databaseType, org.ofbiz.core.entity.jdbc.dbtype.DatabaseType value) throws Exception {
91 final Connection connection = mock(Connection.class);
92 when(ofBizConnectionFactory.getConnection()).thenReturn(connection);
93 when(jiraDatabaseTypeExtractor.getDatabaseType(connection)).thenReturn(value);
94 assertEquals(databaseType, dataSourceProvider.getDatabaseType(tenant));
95 }
96 }