1 package org.itracker;
2
3 import com.sun.tools.internal.ws.processor.model.java.JavaArrayType;
4 import org.apache.log4j.Logger;
5 import org.dbunit.database.DatabaseConfig;
6 import org.dbunit.database.DatabaseConnection;
7 import org.dbunit.dataset.CompositeDataSet;
8 import org.dbunit.dataset.IDataSet;
9 import org.dbunit.dataset.xml.XmlDataSet;
10 import org.dbunit.ext.hsqldb.HsqldbDataTypeFactory;
11 import org.dbunit.operation.DatabaseOperation;
12 import org.hibernate.Session;
13 import org.hibernate.SessionFactory;
14 import org.itracker.services.ConfigurationService;
15 import org.itracker.services.util.SystemConfigurationUtilities;
16 import org.junit.After;
17 import org.junit.Before;
18 import org.junit.internal.runners.JUnit4ClassRunner;
19 import org.junit.runner.RunWith;
20 import org.springframework.mail.MailSender;
21 import org.springframework.mail.javamail.JavaMailSender;
22 import org.springframework.mail.javamail.JavaMailSenderImpl;
23 import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
24 import org.springframework.orm.hibernate3.SessionHolder;
25 import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
26 import org.springframework.transaction.support.TransactionSynchronizationManager;
27
28 import javax.naming.InitialContext;
29 import javax.sql.DataSource;
30 import java.sql.SQLException;
31 import java.util.Properties;
32
33 @RunWith(JUnit4ClassRunner.class)
34 public abstract class AbstractDependencyInjectionTest extends
35 AbstractDependencyInjectionSpringContextTests {
36
37 private static final Logger log = Logger
38 .getLogger(AbstractDependencyInjectionSpringContextTests.class);
39 private DataSource dataSource;
40 private LocalSessionFactoryBean sessionFactoryBean;
41 public ClassLoader classLoader;
42 public IDataSet dataSet;
43 private SessionFactory sessionFactory;
44
45 protected AbstractDependencyInjectionTest() {
46 classLoader = getClass().getClassLoader();
47 }
48
49 @Override
50 public void onSetUp() throws Exception {
51 super.onSetUp();
52 sessionFactory = (SessionFactory) applicationContext
53 .getBean("sessionFactory");
54 Session session = sessionFactory.openSession();
55 TransactionSynchronizationManager.bindResource(sessionFactory,
56 new SessionHolder(session));
57
58 dataSet = getDataSet();
59 DatabaseConnection dbConnection = null;
60 try {
61
62 resetConfiguration();
63
64 dbConnection = new DatabaseConnection(getDataSource().getConnection());
65 dbConnection.getConfig().setProperty(
66 DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
67 new HsqldbDataTypeFactory());
68
69 if (dataSet != null) {
70 DatabaseOperation.CLEAN_INSERT.execute(dbConnection, dataSet);
71 }
72
73 if (!dbConnection.getConnection().getAutoCommit()) {
74 dbConnection.getConnection().commit();
75 }
76 } catch (Exception e) {
77 log.error("onSetUp: failed to set up datasets", e);
78 throw e;
79 } finally {
80 if (null != dbConnection) {
81 try {
82 dbConnection.close();
83 } catch (SQLException e) {
84 log.warn("onSetUp: failed to close connection", e);
85 }
86 }
87 }
88 }
89
90 @Override
91 public void onTearDown() throws Exception {
92 DatabaseConnection dbConnection = null;
93 try {
94 dbConnection = new DatabaseConnection(getDataSource()
95 .getConnection());
96
97 if (dataSet != null) {
98 DatabaseOperation.DELETE_ALL.execute(dbConnection, dataSet);
99 }
100
101 if (!dbConnection.getConnection().getAutoCommit()) {
102 dbConnection.getConnection().commit();
103 }
104
105 } catch (Exception e) {
106 log.error("onTearDown: failed to tear down datasets", e);
107 throw e;
108 } finally {
109 TransactionSynchronizationManager.unbindResource(sessionFactory);
110 sessionFactoryBean.destroy();
111
112
113 if (null != dbConnection) {
114 try {
115 dbConnection.close();
116 } catch (SQLException e) {
117 log.warn("onTearDown: failed to close connection", e);
118 }
119 }
120 super.onTearDown();
121 }
122 }
123
124 final protected void resetConfiguration() {
125 ConfigurationService configurationService = (ConfigurationService) applicationContext
126 .getBean("configurationService");
127
128 SystemConfigurationUtilities.initializeAllLanguages(configurationService, true);
129 configurationService.initializeConfiguration();
130
131 configurationService.resetConfigurationCache();
132 }
133
134 private IDataSet getDataSet() throws Exception {
135 final String[] aDataSet = getDataSetFiles();
136 final IDataSet[] dataSets = new IDataSet[aDataSet.length];
137
138 for (int i = 0; i < aDataSet.length; i++) {
139 dataSets[i] = new XmlDataSet(classLoader
140 .getResourceAsStream(aDataSet[i]));
141 }
142 return new CompositeDataSet(dataSets);
143 }
144
145
146
147
148
149
150
151 protected abstract String[] getDataSetFiles();
152
153 public LocalSessionFactoryBean getSessionFactoryBean() {
154 return sessionFactoryBean;
155 }
156
157 public void setSessionFactoryBean(LocalSessionFactoryBean sessionFactoryBean) {
158 this.sessionFactoryBean = sessionFactoryBean;
159 }
160
161 public DataSource getDataSource() {
162 return dataSource;
163 }
164
165 public void setDataSource(DataSource dataSource) {
166 this.dataSource = dataSource;
167 }
168
169 @Before
170 public final void callSetup() throws Exception {
171 super.setUp();
172 }
173
174 @After
175 public final void callTeardown() throws Exception {
176 super.tearDown();
177 }
178
179 }