View Javadoc
1   package com.atlassian.activeobjects.confluence;
2   
3   import com.atlassian.activeobjects.confluence.hibernate.DialectExtractor;
4   import com.atlassian.activeobjects.spi.DatabaseType;
5   import com.atlassian.hibernate.PluginHibernateSessionFactory;
6   import com.atlassian.tenancy.api.Tenant;
7   import net.sf.hibernate.dialect.DB2390Dialect;
8   import net.sf.hibernate.dialect.DB2400Dialect;
9   import net.sf.hibernate.dialect.DB2Dialect;
10  import net.sf.hibernate.dialect.Dialect;
11  import net.sf.hibernate.dialect.HSQLDialect;
12  import net.sf.hibernate.dialect.MySQLDialect;
13  import net.sf.hibernate.dialect.Oracle9Dialect;
14  import net.sf.hibernate.dialect.OracleDialect;
15  import net.sf.hibernate.dialect.PostgreSQLDialect;
16  import net.sf.hibernate.dialect.SQLServerDialect;
17  import net.sf.hibernate.dialect.SQLServerIntlDialect;
18  import org.junit.After;
19  import org.junit.Before;
20  import org.junit.Test;
21  import org.junit.runner.RunWith;
22  import org.mockito.Mock;
23  import org.mockito.junit.MockitoJUnitRunner;
24  
25  import static org.junit.Assert.assertEquals;
26  import static org.mockito.Mockito.doReturn;
27  
28  /**
29   * Testing {@link ConfluenceTenantAwareDataSourceProvider}
30   */
31  @RunWith(MockitoJUnitRunner.class)
32  public class ConfluenceTenantAwareDataSourceProviderTest {
33      private ConfluenceTenantAwareDataSourceProvider dataSourceProvider;
34  
35      @Mock
36      private PluginHibernateSessionFactory sessionFactory;
37  
38      @Mock
39      private DialectExtractor dialectExtrator;
40  
41      @Mock
42      private Tenant tenant;
43  
44      @Before
45      public void setUp() {
46          dataSourceProvider = new ConfluenceTenantAwareDataSourceProvider(sessionFactory, dialectExtrator);
47      }
48  
49      @After
50      public void tearDown() {
51          dataSourceProvider = null;
52      }
53  
54      @Test
55      public void testGetUnknownDatabaseTypeWithNullDialect() {
56          assertDatabaseTypeForDialect(DatabaseType.UNKNOWN, null);
57      }
58  
59      @Test
60      public void testGetHsqlDatabaseTypeWithHsqlDialect() {
61          assertDatabaseTypeForDialect(DatabaseType.HSQL, HSQLDialect.class);
62      }
63  
64      @Test
65      public void testGetMySqlDatabaseTypeWithMySqlDialect() {
66          assertDatabaseTypeForDialect(DatabaseType.MYSQL, com.atlassian.hibernate.dialect.MySQLDialect.class);
67          assertDatabaseTypeForDialect(DatabaseType.MYSQL, MySQLDialect.class);
68      }
69  
70      @Test
71      public void testGetPostgresDatabaseTypeWithPostgresDialect() {
72          assertDatabaseTypeForDialect(DatabaseType.POSTGRESQL, PostgreSQLDialect.class);
73      }
74  
75      @Test
76      public void testGetOracleDatabaseTypeWithOracleDialect() {
77          assertDatabaseTypeForDialect(DatabaseType.ORACLE, OracleDialect.class);
78          assertDatabaseTypeForDialect(DatabaseType.ORACLE, Oracle9Dialect.class);
79      }
80  
81      @Test
82      public void testGetMsSqlDatabaseTypeWithMsSqlDialect() {
83          assertDatabaseTypeForDialect(DatabaseType.MS_SQL, SQLServerDialect.class);
84          assertDatabaseTypeForDialect(DatabaseType.MS_SQL, SQLServerIntlDialect.class);
85      }
86  
87      @Test
88      public void testGetDB2DatabaseTypeWithDB2Dialect() {
89          assertDatabaseTypeForDialect(DatabaseType.DB2, DB2Dialect.class);
90          assertDatabaseTypeForDialect(DatabaseType.DB2, DB2390Dialect.class);
91          assertDatabaseTypeForDialect(DatabaseType.DB2, DB2400Dialect.class);
92      }
93  
94      private void assertDatabaseTypeForDialect(DatabaseType databaseType, Class<? extends Dialect> dialect) {
95          doReturn(dialect).when(dialectExtrator).getDialect();
96          assertEquals(databaseType, dataSourceProvider.getDatabaseType(tenant));
97      }
98  }