2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.database
;
12 import static org
.junit
.Assert
.assertEquals
;
13 import static org
.junit
.Assert
.assertFalse
;
14 import static org
.junit
.Assert
.assertNotNull
;
15 import static org
.junit
.Assert
.assertTrue
;
16 import static org
.junit
.Assert
.fail
;
18 import java
.io
.FileInputStream
;
19 import java
.io
.FileOutputStream
;
20 import java
.io
.IOException
;
21 import java
.util
.Properties
;
23 import org
.apache
.log4j
.Logger
;
24 import org
.hibernate
.cache
.internal
.NoCachingRegionFactory
;
25 import org
.hibernate
.cache
.spi
.RegionFactory
;
26 import org
.junit
.After
;
27 import org
.junit
.AfterClass
;
28 import org
.junit
.Before
;
29 import org
.junit
.BeforeClass
;
30 import org
.junit
.Ignore
;
31 import org
.junit
.Test
;
32 import org
.springframework
.beans
.PropertyValue
;
33 import org
.springframework
.beans
.PropertyValues
;
34 import org
.springframework
.beans
.factory
.config
.BeanDefinition
;
36 import eu
.etaxonomy
.cdm
.database
.CdmPersistentDataSource
.DbProperties
;
42 public class CdmPersistentDataSourceTest
{
43 @SuppressWarnings("unused")
44 private static final Logger logger
= Logger
.getLogger(CdmPersistentDataSourceTest
.class);
46 private static CdmPersistentDataSource dataSource
;
49 * @throws java.lang.Exception
52 public static void setUpBeforeClass() throws Exception
{
56 * @throws java.lang.Exception
59 public static void tearDownAfterClass() throws Exception
{
63 * @throws java.lang.Exception
66 public void setUp() throws Exception
{
67 dataSource
= CdmPersistentDataSource
.NewInstance("default");
68 assertNotNull(dataSource
);
70 String dataSourceString
= "tmp";
73 CdmPersistentDataSource
.delete(CdmPersistentDataSource
.NewInstance(dataSourceString
));
74 } catch (DataSourceNotFoundException e
) {
77 assertFalse(CdmPersistentDataSource
.exists(dataSourceString
));
82 * @throws java.lang.Exception
85 public void tearDown() throws Exception
{
87 String dataSourceString
= "tmp";
90 CdmPersistentDataSource
.delete(CdmPersistentDataSource
.NewInstance(dataSourceString
));
91 } catch (DataSourceNotFoundException e
) {
94 assertFalse(CdmPersistentDataSource
.exists(dataSourceString
));
98 //********************** TESTS ***********************************************/
101 public void testDummy() {
106 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#NewDefaultInstance()}.
109 public void testNewDefaultInstance() {
111 CdmPersistentDataSource defaultDs
= CdmPersistentDataSource
.NewInstance("default");
112 assertNotNull(defaultDs
);
113 assertEquals(CdmPersistentDataSource
.NewInstance("default"), CdmPersistentDataSource
.NewDefaultInstance());
114 } catch (DataSourceNotFoundException e
) {
120 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#NewLocalHsqlInstance()}.
123 public void testNewLocalHsqlInstance() {
125 assertEquals(CdmPersistentDataSource
.NewInstance("localDefaultHsql"), CdmPersistentDataSource
.NewLocalHsqlInstance());
126 } catch (DataSourceNotFoundException e
) {
132 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#NewInstance(java.lang.String)}.
135 public void testNewInstance() {
136 assertNotNull(dataSource
);
140 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getName()}.
143 public void testGetName() {
144 assertEquals("default", dataSource
.getName());
148 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getDatabaseType()}.
151 public void testGetDatabaseType() {
152 assertEquals(DatabaseTypeEnum
.MySQL
, dataSource
.getDatabaseType());
156 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getDbProperty(eu.etaxonomy.cdm.database.CdmPersistentDataSource.DbProperties)}.
159 public void testGetDbProperty() {
160 assertEquals("com.mysql.jdbc.Driver", dataSource
.getDatasourceProperty(DbProperties
.DRIVER_CLASS
));
164 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getDatasourceBean()}.
167 public void testGetDatasourceBean() {
168 BeanDefinition beanDef
= dataSource
.getDatasourceBean();
169 PropertyValues propValues
= beanDef
.getPropertyValues();
170 String propName
= "driverClassName";
171 assertEquals("com.mysql.jdbc.Driver", propValues
.getPropertyValue(propName
).getValue());
173 assertEquals("testUrl", propValues
.getPropertyValue(propName
).getValue());
174 propName
= "username";
175 assertEquals("testUser", propValues
.getPropertyValue(propName
).getValue());
176 propName
= "password";
177 assertEquals("testPassword", propValues
.getPropertyValue(propName
).getValue());
181 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL)}.
184 public void testGetHibernatePropertiesBeanHBM2DDL() {
185 DbSchemaValidation hbm2dll
= DbSchemaValidation
.CREATE
;
186 BeanDefinition beanDef
= dataSource
.getHibernatePropertiesBean(hbm2dll
);
187 PropertyValues propValues
= beanDef
.getPropertyValues();
188 String propName
= "properties";
189 PropertyValue propValue
= propValues
.getPropertyValue(propName
);
190 assertNotNull(propValue
);
191 assertTrue( propValue
.getValue() instanceof Properties
);
193 Properties properties
= (Properties
)propValue
.getValue();
194 assertEquals(hbm2dll
.toString(), properties
.getProperty("hibernate.hbm2ddl.auto"));
195 assertEquals(dataSource
.getDatabaseType().getHibernateDialectCanonicalName(), properties
.getProperty("hibernate.dialect"));
196 assertEquals(NoCachingRegionFactory
.class.getName(), properties
.getProperty("hibernate.cache.region.factory_class"));
197 assertEquals(String
.valueOf(false), properties
.getProperty("hibernate.show_sql"));
198 assertEquals(String
.valueOf(false), properties
.getProperty("hibernate.format_sql"));
201 beanDef
= dataSource
.getHibernatePropertiesBean(null);
202 propValues
= beanDef
.getPropertyValues();
203 propName
= "properties";
204 propValue
= propValues
.getPropertyValue(propName
);
205 assertNotNull(propValue
);
206 assertTrue( propValue
.getValue() instanceof Properties
);
208 properties
= (Properties
)propValue
.getValue();
209 assertEquals(DbSchemaValidation
.VALIDATE
.toString(), properties
.getProperty("hibernate.hbm2ddl.auto"));
213 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL, java.lang.Boolean, java.lang.Boolean, java.lang.Class)}.
216 public void testGetHibernatePropertiesBeanHBM2DDLBooleanBooleanClassOfQextendsCacheProvider() {
217 DbSchemaValidation hbm2dll
= DbSchemaValidation
.CREATE
;
218 boolean showSql
= false;
219 boolean formatSql
= false;
220 boolean registerSearchListener
= false;
221 Class
<?
extends RegionFactory
> cacheProviderClass
= NoCachingRegionFactory
.class;
223 BeanDefinition beanDef
= dataSource
.getHibernatePropertiesBean(hbm2dll
, showSql
, formatSql
, registerSearchListener
, cacheProviderClass
);
224 PropertyValues propValues
= beanDef
.getPropertyValues();
225 String propName
= "properties";
226 PropertyValue propValue
= propValues
.getPropertyValue(propName
);
227 assertNotNull(propValue
);
228 assertTrue( propValue
.getValue() instanceof Properties
);
230 Properties properties
= (Properties
)propValue
.getValue();
231 assertEquals(hbm2dll
.toString(), properties
.getProperty("hibernate.hbm2ddl.auto"));
232 assertEquals(dataSource
.getDatabaseType().getHibernateDialectCanonicalName(), properties
.getProperty("hibernate.dialect"));
233 assertEquals(cacheProviderClass
.getName(), properties
.getProperty("hibernate.cache.region.factory_class"));
234 assertEquals(String
.valueOf(showSql
), properties
.getProperty("hibernate.show_sql"));
235 assertEquals(String
.valueOf(formatSql
), properties
.getProperty("hibernate.format_sql"));
239 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#exists(java.lang.String)}.
242 public void testExists() {
243 assertTrue(CdmPersistentDataSource
.exists("default"));
244 assertTrue(CdmPersistentDataSource
.exists("localDefaultHsql"));
245 assertFalse(CdmPersistentDataSource
.exists("xlsj�dfl"));
249 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#save(java.lang.String, eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String)}.
252 public void testSaveStringDatabaseTypeEnumStringStringIntStringString() {
253 String dataSourceString
= "tmp";
254 assertFalse(CdmPersistentDataSource
.exists(dataSourceString
));
256 DatabaseTypeEnum databaseType
= DatabaseTypeEnum
.SqlServer2005
;
257 String servername
= "server";
258 String db
= "database";
259 String username
= "username";
260 String password
= "password";
263 ICdmDataSource dataSource
= CdmDataSource
.NewInstance(databaseType
, servername
, db
, port
, username
, password
);
265 CdmPersistentDataSource
.save(dataSourceString
, dataSource
);
266 assertTrue(CdmPersistentDataSource
.exists(dataSourceString
));
268 CdmPersistentDataSource loadedDataSource
= null;
270 loadedDataSource
= CdmPersistentDataSource
.NewInstance(dataSourceString
);
271 } catch (DataSourceNotFoundException e1
) {
274 assertEquals(databaseType
, dataSource
.getDatabaseType());
275 assertEquals(DatabaseTypeEnum
.SqlServer2005
.getDriverClassName(), loadedDataSource
.getDatasourceProperty(DbProperties
.DRIVER_CLASS
));
276 assertEquals("jdbc:sqlserver://server:1234;databaseName=database;SelectMethod=cursor", loadedDataSource
.getDatasourceProperty(DbProperties
.URL
));
277 assertEquals(username
, loadedDataSource
.getDatasourceProperty(DbProperties
.USERNAME
));
278 assertEquals(password
, loadedDataSource
.getDatasourceProperty(DbProperties
.PASSWORD
));
281 CdmPersistentDataSource
.delete(CdmPersistentDataSource
.NewInstance(dataSourceString
));
282 } catch (DataSourceNotFoundException e
) {
285 assertFalse(CdmPersistentDataSource
.exists(dataSourceString
));
289 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#save(java.lang.String, eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String)}.
292 public void testSaveStringDatabaseTypeEnumStringStringStringString() {
293 //see testSaveStringDatabaseTypeEnumStringStringIntStringString
297 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#delete(eu.etaxonomy.cdm.database.CdmPersistentDataSource)}.
300 public void testDelete() {
301 testSaveStringDatabaseTypeEnumStringStringStringString();
305 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getAllDataSources()}.
308 public void testGetAllDataSources() {
309 //assertEquals(6, CdmPersistentDataSource.getAllDataSources().size()); //does not run for all orders of tests of this class
310 assertEquals("default", CdmPersistentDataSource
.getAllDataSources().get(0).getName());
314 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#toString()}.
317 public void testToString() {
318 String dataSourceName
= "default";
320 assertEquals(dataSourceName
, CdmPersistentDataSource
.NewInstance(dataSourceName
).toString());
321 } catch (DataSourceNotFoundException e
) {
327 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getDataSourceInputStream()}.
330 public void testGetDataSourceInputStream() {
331 FileInputStream is
= CdmPersistentDataSource
.getDataSourceInputStream();
335 firstInput
= is
.read();
336 assertEquals("Input Stream should start with < (=Ascii(60))", 60, firstInput
);
337 } catch (IOException e
) {
338 fail("Exception occurred in datasource input stream read");
344 * Test method for {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource#getDataSourceOutputStream()}.
348 public void testGetDataSourceOutputStream() {
349 FileOutputStream os
= CdmPersistentDataSource
.getDataSourceOutputStream();