1   package com.atlassian.config.db;
2   
3   import com.atlassian.config.ApplicationConfig;
4   import com.atlassian.config.ApplicationConfiguration;
5   import junit.framework.TestCase;
6   
7   public class HibernateConfigTest extends TestCase
8   {
9   
10      private HibernateConfig hibernateConfig;
11      private ApplicationConfiguration applicationConfiguration;
12  
13      private static interface DatabasePredicate
14      {
15          boolean test();
16      }
17  
18      @Override
19      protected void setUp() throws Exception
20      {
21          super.setUp();
22          hibernateConfig = new HibernateConfig();
23          applicationConfiguration = new ApplicationConfig();
24          hibernateConfig.setApplicationConfig(applicationConfiguration);
25          useProperty("hibernate.dialect", "");
26          useProperty(HibernateConfig.HIBERNATE_SETUP, "false");
27      }
28  
29      @Override
30      protected void tearDown() throws Exception
31      {
32          super.tearDown();
33          hibernateConfig = null;
34          applicationConfiguration = null;
35      }
36  
37      public void testIsHibernateSetup() throws Exception
38      {
39          assertFalse(hibernateConfig.isHibernateSetup());
40      }
41  
42      public void testGetHibernateProperties() throws Exception
43      {
44          assertNotNull(hibernateConfig.getHibernateProperties());
45      }
46  
47      public void testIsMySql() throws Exception
48      {
49          testIsDatabase("net.sf.hibernate.dialect.MySQLDialect", new DatabasePredicate()
50          {
51              public boolean test()
52              {
53                  return hibernateConfig.isMySql();
54              }
55          });
56  
57      }
58  
59      public void testIsOracle() throws Exception
60      {
61          testIsDatabase("net.sf.hibernate.dialect.OracleDialect", new DatabasePredicate()
62          {
63              public boolean test()
64              {
65                  return hibernateConfig.isOracle();
66              }
67          });
68          testIsDatabase("net.sf.hibernate.dialect.Oracle9Dialect", new DatabasePredicate()
69          {
70              public boolean test()
71              {
72                  return hibernateConfig.isOracle();
73              }
74          });
75      }
76  
77      public void testIsHSQL() throws Exception
78      {
79          testIsDatabase("net.sf.hibernate.dialect.HSQLDialect", new DatabasePredicate()
80          {
81              public boolean test()
82              {
83                  return hibernateConfig.isHSQL();
84              }
85          });
86      }
87  
88      private void testIsDatabase(final String dialect, final DatabasePredicate p)
89      {
90          assertFalse(p.test());
91          useProperty(HibernateConfig.HIBERNATE_SETUP, "true");
92          assertFalse(p.test());
93  
94          useProperty("hibernate.dialect", dialect);
95          assertTrue(p.test());
96          useProperty("hibernate.dialect", "net.sf.hibernate.dialect.ProgressDialect");
97          assertFalse(p.test());
98      }
99  
100     private void useProperty(final String key, final String value)
101     {
102         applicationConfiguration.setProperty(key, value);
103     }
104 
105 }