1 package org.codehaus.mojo.sql;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import java.io.File;
18 import java.util.Properties;
19
20 import org.apache.maven.plugin.MojoExecutionException;
21 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
22 import org.apache.maven.settings.Server;
23 import org.apache.maven.settings.Settings;
24 import org.apache.maven.shared.filtering.MavenFileFilter;
25
26
27
28
29 public class SqlExecMojoTest extends AbstractMojoTestCase {
30 private SqlExecMojo mojo;
31
32 private Properties p;
33
34 @Override
35 public void setUp() throws Exception {
36 super.setUp();
37 p = new Properties();
38 p.load(getClass().getResourceAsStream("/test.properties"));
39
40 mojo = new SqlExecMojo();
41
42
43 mojo.setDriver(p.getProperty("driver"));
44 mojo.setUsername(p.getProperty("user"));
45 mojo.setPassword(p.getProperty("password"));
46 mojo.setUrl(p.getProperty("url"));
47 mojo.setDriverProperties(p.getProperty("driverProperties"));
48
49 MavenFileFilter filter = (MavenFileFilter) lookup("org.apache.maven.shared.filtering.MavenFileFilter",
50 "default");
51 mojo.setFileFilter(filter);
52
53 }
54
55
56
57
58 public void testNoCommandMojo() throws MojoExecutionException {
59 mojo.execute();
60
61 assertEquals(0, mojo.getSuccessfulStatements());
62 }
63
64 public void testCreateCommandMojo() throws MojoExecutionException {
65 String command = "create table PERSON ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
66 mojo.addText(command);
67 mojo.execute();
68
69 assertEquals(1, mojo.getSuccessfulStatements());
70 }
71
72 public void testDropCommandMojo() throws MojoExecutionException {
73 String command = "drop table PERSON";
74 mojo.addText(command);
75 mojo.execute();
76 assertEquals(1, mojo.getSuccessfulStatements());
77 }
78
79 public void testFileSetMojo() throws MojoExecutionException {
80
81 Fileset ds = new Fileset();
82 ds.setBasedir("src/test");
83 ds.setIncludes(new String[] { "**/create*.sql" });
84 ds.scan();
85 assert (ds.getIncludedFiles().length == 1);
86
87 mojo.setFileset(ds);
88
89 mojo.execute();
90
91 assertEquals(3, mojo.getSuccessfulStatements());
92
93 }
94
95 public void testFileArrayMojo() throws MojoExecutionException {
96 File[] srcFiles = new File[1];
97 srcFiles[0] = new File("src/test/data/drop-test-tables.sql");
98
99 mojo.setSrcFiles(srcFiles);
100 mojo.execute();
101
102 assertEquals(3, mojo.getSuccessfulStatements());
103
104 }
105
106
107
108
109
110 public void testAllMojo() throws MojoExecutionException {
111
112 String command = "create table PERSON2 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
113 mojo.addText(command);
114
115 File[] srcFiles = new File[1];
116 srcFiles[0] = new File("src/test/data/create-test-tables.sql");
117 mojo.setSrcFiles(srcFiles);
118
119 Fileset ds = new Fileset();
120 ds.setBasedir("src/test");
121 ds.setIncludes(new String[] { "**/drop*.sql" });
122 ds.scan();
123 mojo.setFileset(ds);
124 mojo.execute();
125
126 assertEquals(7, mojo.getSuccessfulStatements());
127 }
128
129 public void testOrderFile() throws MojoExecutionException {
130 Fileset ds = new Fileset();
131 ds.setBasedir("src/test");
132 ds.setIncludes(new String[] { "**/drop*.sql", "**/create*.sql" });
133 ds.scan();
134 mojo.setFileset(ds);
135
136 mojo.setOrderFile(SqlExecMojo.FILE_SORTING_ASC);
137 mojo.execute();
138
139 assertEquals(6, mojo.getSuccessfulStatements());
140
141 try {
142 mojo.setOrderFile(SqlExecMojo.FILE_SORTING_DSC);
143 mojo.execute();
144 fail("Execution is not aborted on error.");
145 } catch (MojoExecutionException e) {
146 }
147 }
148
149 public void testOnErrorContinueMojo() throws MojoExecutionException {
150 String command = "create table BOGUS";
151 mojo.addText(command);
152 mojo.setOnError("continue");
153 mojo.execute();
154 assertEquals(0, mojo.getSuccessfulStatements());
155 }
156
157 public void testOnErrorAbortMojo() throws MojoExecutionException {
158 String command = "create table BOGUS";
159 mojo.addText(command);
160
161 try {
162 mojo.execute();
163 fail("Execution is not aborted on error.");
164
165 } catch (MojoExecutionException e) {
166
167 }
168
169 assertEquals(0, mojo.getSuccessfulStatements());
170 }
171
172 public void testOnErrorAbortAfterMojo() throws MojoExecutionException {
173 String commands = "create table BOGUS";
174
175 mojo.addText(commands);
176
177 File[] srcFiles = new File[1];
178 srcFiles[0] = new File("src/test/data/invalid-syntax.sql");
179
180 assertTrue(srcFiles[0].exists());
181
182 mojo.setSrcFiles(srcFiles);
183 mojo.setOnError("abortAfter");
184
185 try {
186 mojo.execute();
187 fail("Execution is not aborted on error.");
188
189 } catch (MojoExecutionException e) {
190
191 }
192
193 assertEquals(0, mojo.getSuccessfulStatements());
194 assertEquals(2, mojo.getTotalStatements());
195 }
196
197 public void testDefaultUsernamePassword() throws MojoExecutionException {
198
199 Settings settings = new Settings();
200 Server server = new Server();
201 settings.addServer(server);
202
203 mojo.setSettings(settings);
204
205
206 mojo.setUsername(null);
207 mojo.setPassword(null);
208
209 mojo.execute();
210
211 assertEquals("", mojo.getUsername());
212 assertEquals("", mojo.getPassword());
213
214 }
215
216 public void testUsernamePasswordLookup() throws MojoExecutionException {
217
218 Settings settings = new Settings();
219 Server server = new Server();
220 server.setId("somekey");
221 server.setUsername("username");
222 server.setPassword("password");
223 settings.addServer(server);
224
225 mojo.setSettings(settings);
226
227
228 mojo.setSettingsKey("somekey");
229 mojo.setUsername(null);
230 mojo.setPassword(null);
231
232 mojo.execute();
233
234 assertEquals("username", mojo.getUsername());
235 assertEquals("password", mojo.getPassword());
236
237 }
238
239 public void testBadDriver() {
240 mojo.setDriver("bad-driver");
241 try {
242 mojo.execute();
243
244 fail("Bad driver is not detected");
245 } catch (MojoExecutionException e) {
246
247 }
248 }
249
250 public void testBadUrl() {
251 mojo.setUrl("bad-url");
252 try {
253 mojo.execute();
254
255 fail("Bad URL is not detected");
256 } catch (MojoExecutionException e) {
257
258 }
259 }
260
261 public void testBadFile() {
262 File[] srcFiles = new File[1];
263 srcFiles[0] = new File("a-every-bogus-file-that-does-not-exist");
264
265 mojo.setSrcFiles(srcFiles);
266 try {
267 mojo.execute();
268
269 fail("Bad files is not detected");
270 } catch (MojoExecutionException e) {
271
272 }
273 }
274
275 public void testOnError() {
276 mojo.setOnError("AbOrT");
277 assertEquals(SqlExecMojo.ON_ERROR_ABORT, mojo.getOnError());
278 mojo.setOnError("cOnTiNuE");
279 assertEquals(SqlExecMojo.ON_ERROR_CONTINUE, mojo.getOnError());
280 try {
281 mojo.setOnError("bad");
282 fail(IllegalArgumentException.class.getName() + " was not thrown.");
283 } catch (IllegalArgumentException e) {
284
285 }
286 try {
287 mojo.setOnError(null);
288 fail(IllegalArgumentException.class.getName() + " was not thrown.");
289 } catch (IllegalArgumentException e) {
290
291 }
292 }
293
294 public void testSkip() throws MojoExecutionException {
295 String command = "create table PERSON ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
296 mojo.addText(command);
297 mojo.setSkip(true);
298 mojo.execute();
299
300
301 assertEquals(0, mojo.getSuccessfulStatements());
302 }
303
304 public void testDriverProperties() throws MojoExecutionException {
305 Properties driverProperties = this.mojo.getDriverProperties();
306 assertEquals(2, driverProperties.size());
307 assertEquals("value1", driverProperties.get("key1"));
308 assertEquals("value2", driverProperties.get("key2"));
309
310 mojo.setDriverProperties("key1=value1,key2");
311 try {
312 driverProperties = this.mojo.getDriverProperties();
313 } catch (MojoExecutionException e) {
314 }
315
316 }
317
318 public void testBlockMode() throws MojoExecutionException {
319 String command = "create table BLOCKTABLE ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
320 mojo.addText(command);
321 mojo.setEnableBlockMode(true);
322 mojo.execute();
323 assertEquals(1, mojo.getSuccessfulStatements());
324
325 mojo.setSqlCommand("");
326 mojo.getTransactions().clear();
327 command = "drop table BLOCKTABLE";
328 mojo.addText(command);
329 mojo.execute();
330 assertEquals(1, mojo.getSuccessfulStatements());
331 }
332
333 public void testKeepFormat() throws MojoExecutionException {
334
335
336
337 String command = "--create table PERSON ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
338 mojo.addText(command);
339 mojo.setKeepFormat(true);
340
341 try {
342 mojo.execute();
343 fail("-- at the start of the SQL command is ignored.");
344 } catch (MojoExecutionException e) {
345 }
346
347 assertEquals(0, mojo.getSuccessfulStatements());
348
349 }
350
351 public void testBadDelimiter() throws Exception {
352 String command = "create table SEPARATOR ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar):"
353 + "create table SEPARATOR2 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
354
355 mojo.addText(command);
356 mojo.setDelimiter(":");
357
358 try {
359 mojo.execute();
360 fail("Expected parser error.");
361 } catch (MojoExecutionException e) {
362 }
363 }
364
365 public void testGoodDelimiter() throws Exception {
366 String command = "create table SEPARATOR ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)\n:\n"
367 + "create table SEPARATOR2 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
368
369 mojo.addText(command);
370 mojo.setDelimiter(":");
371
372 mojo.execute();
373
374 assertEquals(2, mojo.getSuccessfulStatements());
375 }
376
377 public void testBadDelimiterType() throws Exception {
378 String command = "create table BADDELIMTYPE ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)" + "\n:"
379 + "create table BADDELIMTYPE2 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
380
381 mojo.addText(command);
382 mojo.setDelimiter(":");
383 mojo.setDelimiterType(DelimiterType.ROW);
384
385 try {
386 mojo.execute();
387 fail("Expected parser error.");
388 } catch (MojoExecutionException e) {
389 }
390 }
391
392 public void testGoodDelimiterType() throws Exception {
393 String command = "create table GOODDELIMTYPE ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)"
394 + "\n: \n" + "create table GOODDELIMTYPE2 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
395
396 mojo.addText(command);
397 mojo.setDelimiter(":");
398 mojo.setDelimiterType(DelimiterType.ROW);
399
400 mojo.execute();
401 assertEquals(2, mojo.getSuccessfulStatements());
402 }
403
404 @SuppressWarnings("deprecation")
405 public void testOutputFile() throws Exception {
406 String command = "create table GOODDELIMTYPE3 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)"
407 + "\n: \n" + "create table GOODDELIMTYPE4 ( PERSON_ID integer, FIRSTNAME varchar, LASTNAME varchar)";
408
409 mojo.addText(command);
410 mojo.setDelimiter(":");
411 mojo.setDelimiterType(DelimiterType.ROW);
412
413 String basedir = System.getProperty("basedir", ".");
414 File outputFile = new File(basedir, "target/sql.out");
415 outputFile.delete();
416 mojo.setOutputFile(outputFile);
417 mojo.setPrintResutlSet(true);
418
419 mojo.execute();
420
421 assertTrue("Output file: " + outputFile + " not found.", outputFile.exists());
422
423 assertTrue("Unexpected empty output file. ", outputFile.length() > 0);
424
425
426
427
428 }
429 }