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