1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration;
18
19 import java.io.File;
20 import java.io.FileInputStream;
21 import java.sql.Connection;
22
23 import javax.sql.DataSource;
24
25 import org.apache.commons.configuration.test.HsqlDB;
26 import org.apache.commons.dbcp.BasicDataSource;
27 import org.dbunit.database.DatabaseConnection;
28 import org.dbunit.database.IDatabaseConnection;
29 import org.dbunit.dataset.IDataSet;
30 import org.dbunit.dataset.xml.XmlDataSet;
31 import org.dbunit.operation.DatabaseOperation;
32
33
34
35
36
37
38
39
40
41 public class DatabaseConfigurationTestHelper
42 {
43
44 public final String DATABASE_DRIVER = "org.hsqldb.jdbcDriver";
45
46
47 public final String DATABASE_URL = "jdbc:hsqldb:mem:testdb";
48
49
50 public final String DATABASE_USERNAME = "sa";
51
52
53 public final String DATABASE_PASSWORD = "";
54
55
56 public static final String TABLE = "configuration";
57
58
59 public static final String TABLE_MULTI = "configurations";
60
61
62 public static final String COL_KEY = "key";
63
64
65 public static final String COL_VALUE = "value";
66
67
68 public static final String COL_NAME = "name";
69
70
71 public static final String CONFIG_NAME = "test";
72
73
74 private HsqlDB hsqlDB;
75
76
77 private DataSource datasource;
78
79
80
81
82
83 private boolean autoCommit = true;
84
85
86
87
88
89
90
91 public boolean isAutoCommit()
92 {
93 return autoCommit;
94 }
95
96
97
98
99
100
101
102 public void setAutoCommit(boolean autoCommit)
103 {
104 this.autoCommit = autoCommit;
105 }
106
107
108
109
110
111
112
113
114 public void setUp() throws Exception
115 {
116 File script = ConfigurationAssert.getTestFile("testdb.script");
117 hsqlDB = new HsqlDB(DATABASE_URL, DATABASE_DRIVER, script.getAbsolutePath());
118 }
119
120
121
122
123
124
125
126 public void tearDown() throws Exception
127 {
128 if (datasource != null)
129 {
130 datasource.getConnection().close();
131 }
132 hsqlDB.close();
133 }
134
135
136
137
138
139
140 public DatabaseConfiguration setUpConfig()
141 {
142 return new DatabaseConfiguration(getDatasource(), TABLE, COL_KEY,
143 COL_VALUE, !isAutoCommit());
144 }
145
146
147
148
149
150
151
152 public DatabaseConfiguration setUpMultiConfig()
153 {
154 return setUpMultiConfig(CONFIG_NAME);
155 }
156
157
158
159
160
161
162
163
164 public DatabaseConfiguration setUpMultiConfig(String configName)
165 {
166 return new DatabaseConfiguration(getDatasource(), TABLE_MULTI,
167 COL_NAME, COL_KEY, COL_VALUE, configName, !isAutoCommit());
168 }
169
170
171
172
173
174
175
176 public DataSource getDatasource()
177 {
178 if (datasource == null)
179 {
180 try
181 {
182 datasource = setUpDataSource();
183 }
184 catch (Exception ex)
185 {
186 throw new ConfigurationRuntimeException(
187 "Could not create data source", ex);
188 }
189 }
190 return datasource;
191 }
192
193
194
195
196
197
198
199
200 private DataSource setUpDataSource() throws Exception
201 {
202 BasicDataSource ds = new BasicDataSource();
203 ds.setDriverClassName(DATABASE_DRIVER);
204 ds.setUrl(DATABASE_URL);
205 ds.setUsername(DATABASE_USERNAME);
206 ds.setPassword(DATABASE_PASSWORD);
207 ds.setDefaultAutoCommit(isAutoCommit());
208
209
210 Connection conn = ds.getConnection();
211 IDatabaseConnection connection = new DatabaseConnection(conn);
212 IDataSet dataSet = new XmlDataSet(new FileInputStream(
213 ConfigurationAssert.getTestFile("dataset.xml")));
214
215 try
216 {
217 DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
218 }
219 finally
220 {
221 if (!isAutoCommit())
222 {
223 conn.commit();
224 }
225 connection.close();
226 }
227
228 return ds;
229 }
230 }