1 package org.apache.maven.plugin.war;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.plugin.testing.stubs.ArtifactStub;
23 import org.apache.maven.plugin.war.overlay.DefaultOverlay;
24 import org.codehaus.plexus.util.FileUtils;
25
26 import java.io.File;
27 import java.io.FileFilter;
28 import java.io.IOException;
29 import java.util.ArrayList;
30 import java.util.LinkedList;
31 import java.util.List;
32
33
34
35
36 public class WarOverlaysTest
37 extends AbstractWarExplodedMojoTest
38 {
39
40 private static File pomFile = new File( getBasedir(), "target/test-classes/unit/waroverlays/default.xml" );
41
42 public void setUp()
43 throws Exception
44 {
45 super.setUp();
46 generateFullOverlayWar( "overlay-full-1" );
47 generateFullOverlayWar( "overlay-full-2" );
48 generateFullOverlayWar( "overlay-full-3" );
49 }
50
51 protected File getPomFile()
52 {
53 return pomFile;
54 }
55
56 protected File getTestDirectory()
57 {
58 return new File( getBasedir(), "target/test-classes/unit/waroverlays" );
59 }
60
61 public void testEnvironment()
62 throws Exception
63 {
64
65 }
66
67 public void testNoOverlay()
68 throws Exception
69 {
70
71 final String testId = "no-overlay";
72 final File xmlSource = createXMLConfigDir( testId, new String[] { "web.xml" } );
73
74 final File webAppDirectory = setUpMojo( testId, null );
75 try
76 {
77 mojo.setWebXml( new File( xmlSource, "web.xml" ) );
78 mojo.execute();
79
80
81 assertDefaultContent( webAppDirectory );
82 assertWebXml( webAppDirectory );
83 }
84 finally
85 {
86 cleanDirectory( webAppDirectory );
87 }
88 }
89
90 public void testDefaultOverlay()
91 throws Exception
92 {
93
94 final String testId = "default-overlay";
95
96
97 final ArtifactStub overlay = buildWarOverlayStub( "overlay-one" );
98
99 final File webAppDirectory = setUpMojo( testId, new ArtifactStub[] { overlay } );
100 final List<File> assertedFiles = new ArrayList<File>();
101 try
102 {
103 mojo.execute();
104 assertedFiles.addAll( assertDefaultContent( webAppDirectory ) );
105 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
106 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "index.jsp", "login.jsp" },
107 "overlay file not found" ) );
108
109
110 assertOverlayedFile( webAppDirectory, "overlay-one", "index.jsp" );
111 assertOverlayedFile( webAppDirectory, "overlay-one", "login.jsp" );
112
113
114 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
115 assertWebAppContent( webAppDirectory, assertedFiles, filter );
116 }
117 finally
118 {
119 cleanDirectory( webAppDirectory );
120 }
121 }
122
123 public void testDefaultOverlays()
124 throws Exception
125 {
126
127 final String testId = "default-overlays";
128
129
130 final ArtifactStub overlay = buildWarOverlayStub( "overlay-one" );
131 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-two" );
132
133 final File webAppDirectory = setUpMojo( testId, new ArtifactStub[] { overlay, overlay2 } );
134 final List<File> assertedFiles = new ArrayList<File>();
135 try
136 {
137 mojo.execute();
138 assertedFiles.addAll( assertDefaultContent( webAppDirectory ) );
139 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
140 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "index.jsp", "login.jsp",
141 "admin.jsp" }, "overlay file not found" ) );
142
143
144 assertOverlayedFile( webAppDirectory, "overlay-one", "index.jsp" );
145 assertOverlayedFile( webAppDirectory, "overlay-one", "login.jsp" );
146
147
148
149 assertOverlayedFile( webAppDirectory, "overlay-two", "admin.jsp" );
150
151
152 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
153 assertWebAppContent( webAppDirectory, assertedFiles, filter );
154 }
155 finally
156 {
157 cleanDirectory( webAppDirectory );
158 }
159 }
160
161
162
163
164
165
166
167
168 public void testScenarioOneWithDefaulSettings()
169 throws Exception
170 {
171
172 final String testId = "scenario-one-default-settings";
173
174
175 final ArtifactStub overlay1 = buildWarOverlayStub( "overlay-full-1" );
176 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-full-2" );
177 final ArtifactStub overlay3 = buildWarOverlayStub( "overlay-full-3" );
178
179 final File webAppDirectory =
180 setUpMojo( testId, new ArtifactStub[] { overlay1, overlay2, overlay3 }, new String[] {
181 "org/sample/company/test.jsp", "jsp/b.jsp" } );
182
183 assertScenariOne( testId, webAppDirectory );
184 }
185
186
187
188
189
190
191
192
193 public void testScenarioOneWithOverlaySettings()
194 throws Exception
195 {
196
197 final String testId = "scenario-one-overlay-settings";
198
199
200 final ArtifactStub overlay1 = buildWarOverlayStub( "overlay-full-1" );
201 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-full-2" );
202 final ArtifactStub overlay3 = buildWarOverlayStub( "overlay-full-3" );
203
204 final File webAppDirectory =
205 setUpMojo( testId, new ArtifactStub[] { overlay1, overlay2, overlay3 }, new String[] {
206 "org/sample/company/test.jsp", "jsp/b.jsp" } );
207
208
209 final List<Overlay> overlays = new ArrayList<Overlay>();
210 overlays.add( new DefaultOverlay( overlay1 ) );
211 overlays.add( new DefaultOverlay( overlay2 ) );
212 overlays.add( new DefaultOverlay( overlay3 ) );
213 mojo.setOverlays( overlays );
214
215
216 assertScenariOne( testId, webAppDirectory );
217 }
218
219
220
221
222
223
224
225
226 public void testScenarioOneWithFullSettings()
227 throws Exception
228 {
229
230 final String testId = "scenario-one-full-settings";
231
232
233 final ArtifactStub overlay1 = buildWarOverlayStub( "overlay-full-1" );
234 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-full-2" );
235 final ArtifactStub overlay3 = buildWarOverlayStub( "overlay-full-3" );
236
237 final File webAppDirectory =
238 setUpMojo( testId, new ArtifactStub[] { overlay1, overlay2, overlay3 }, new String[] {
239 "org/sample/company/test.jsp", "jsp/b.jsp" } );
240
241
242 final List<Overlay> overlays = new ArrayList<Overlay>();
243
244
245 overlays.add( mojo.getCurrentProjectOverlay() );
246
247
248 overlays.add( new DefaultOverlay( overlay1 ) );
249 overlays.add( new DefaultOverlay( overlay2 ) );
250 overlays.add( new DefaultOverlay( overlay3 ) );
251 mojo.setOverlays( overlays );
252
253
254 assertScenariOne( testId, webAppDirectory );
255 }
256
257
258
259
260
261
262
263
264 private void assertScenariOne( String testId, File webAppDirectory )
265 throws Exception
266 {
267 final List<File> assertedFiles = new ArrayList<File>();
268 try
269 {
270 mojo.execute();
271 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
272 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "jsp/a.jsp", "jsp/b.jsp",
273 "jsp/c.jsp", "jsp/d/a.jsp", "jsp/d/b.jsp", "jsp/d/c.jsp", "org/sample/company/test.jsp",
274 "WEB-INF/classes/a.class", "WEB-INF/classes/b.class", "WEB-INF/classes/c.class", "WEB-INF/lib/a.jar",
275 "WEB-INF/lib/b.jar", "WEB-INF/lib/c.jar" }, "overlay file not found" ) );
276
277
278 assertDefaultFileContent( testId, webAppDirectory, "jsp/b.jsp" );
279 assertDefaultFileContent( testId, webAppDirectory, "org/sample/company/test.jsp" );
280
281
282 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/a.jsp" );
283 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/c.jsp" );
284 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/d/a.jsp" );
285 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/d/b.jsp" );
286 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/d/c.jsp" );
287 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/web.xml" );
288 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/classes/a.class" );
289 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/classes/b.class" );
290 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/classes/c.class" );
291 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/lib/a.jar" );
292 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/lib/b.jar" );
293 assertOverlayedFile( webAppDirectory, "overlay-full-1", "WEB-INF/lib/c.jar" );
294
295
296 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
297 assertWebAppContent( webAppDirectory, assertedFiles, filter );
298 }
299 finally
300 {
301 cleanDirectory( webAppDirectory );
302 }
303 }
304
305 public void testOverlaysIncludesExcludesWithMultipleDefinitions()
306 throws Exception
307 {
308
309 final String testId = "overlays-includes-excludes-multiple-defs";
310
311
312 final ArtifactStub overlay1 = buildWarOverlayStub( "overlay-full-1" );
313 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-full-2" );
314 final ArtifactStub overlay3 = buildWarOverlayStub( "overlay-full-3" );
315
316 final File webAppDirectory =
317 setUpMojo( testId, new ArtifactStub[] { overlay1, overlay2, overlay3 }, new String[] {
318 "org/sample/company/test.jsp", "jsp/b.jsp" } );
319
320 Overlay over1 = new DefaultOverlay( overlay3 );
321 over1.setExcludes( "**/a.*,**/c.*,**/*.xml" );
322
323 Overlay over2 = new DefaultOverlay( overlay1 );
324 over2.setIncludes( "jsp/d/*" );
325 over2.setExcludes( "jsp/d/a.jsp" );
326
327 Overlay over3 = new DefaultOverlay( overlay3 );
328 over3.setIncludes( "**/*.jsp" );
329
330 Overlay over4 = new DefaultOverlay( overlay2 );
331
332 mojo.setOverlays( new LinkedList<Overlay>() );
333 mojo.addOverlay( over1 );
334 mojo.addOverlay( over2 );
335 mojo.addOverlay( over3 );
336 mojo.addOverlay( mojo.getCurrentProjectOverlay() );
337 mojo.addOverlay( over4 );
338
339 final List<File> assertedFiles = new ArrayList<File>();
340 try
341 {
342 mojo.execute();
343 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
344 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "jsp/a.jsp", "jsp/b.jsp",
345 "jsp/c.jsp", "jsp/d/a.jsp", "jsp/d/b.jsp", "jsp/d/c.jsp", "org/sample/company/test.jsp",
346 "WEB-INF/classes/a.class", "WEB-INF/classes/b.class", "WEB-INF/classes/c.class", "WEB-INF/lib/a.jar",
347 "WEB-INF/lib/b.jar", "WEB-INF/lib/c.jar" }, "overlay file not found" ) );
348
349 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/a.jsp" );
350 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/b.jsp" );
351 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/c.jsp" );
352 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/d/a.jsp" );
353 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/d/b.jsp" );
354 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/d/c.jsp" );
355 assertDefaultFileContent( testId, webAppDirectory, "org/sample/company/test.jsp" );
356 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/web.xml" );
357 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/classes/a.class" );
358 assertOverlayedFile( webAppDirectory, "overlay-full-3", "WEB-INF/classes/b.class" );
359 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/classes/c.class" );
360 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/lib/a.jar" );
361 assertOverlayedFile( webAppDirectory, "overlay-full-3", "WEB-INF/lib/b.jar" );
362 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/lib/c.jar" );
363
364
365 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
366 assertWebAppContent( webAppDirectory, assertedFiles, filter );
367 }
368 finally
369 {
370 cleanDirectory( webAppDirectory );
371 }
372 }
373
374 public void testOverlaysIncludesExcludesWithMultipleDefinitions2()
375 throws Exception
376 {
377
378 final String testId = "overlays-includes-excludes-multiple-defs2";
379
380
381 final ArtifactStub overlay1 = buildWarOverlayStub( "overlay-full-1" );
382 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-full-2" );
383 final ArtifactStub overlay3 = buildWarOverlayStub( "overlay-full-3" );
384
385 final File webAppDirectory =
386 setUpMojo( testId, new ArtifactStub[] { overlay1, overlay2, overlay3 }, new String[] {
387 "org/sample/company/test.jsp", "jsp/b.jsp" } );
388
389 Overlay over1 = new DefaultOverlay( overlay3 );
390 over1.setExcludes( "**/a.*,**/c.*,**/*.xml,jsp/b.jsp" );
391
392 Overlay over2 = new DefaultOverlay( overlay1 );
393 over2.setIncludes( "jsp/d/*" );
394 over2.setExcludes( "jsp/d/a.jsp" );
395
396 Overlay over3 = new DefaultOverlay( overlay3 );
397 over3.setIncludes( "**/*.jsp" );
398 over3.setExcludes( "jsp/b.jsp" );
399
400 Overlay over4 = new DefaultOverlay( overlay2 );
401
402 mojo.setOverlays( new LinkedList<Overlay>() );
403 mojo.addOverlay( over1 );
404 mojo.addOverlay( over2 );
405 mojo.addOverlay( over3 );
406 mojo.addOverlay( mojo.getCurrentProjectOverlay() );
407 mojo.addOverlay( over4 );
408
409 final List<File> assertedFiles = new ArrayList<File>();
410 try
411 {
412 mojo.execute();
413 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
414 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "jsp/a.jsp", "jsp/b.jsp",
415 "jsp/c.jsp", "jsp/d/a.jsp", "jsp/d/b.jsp", "jsp/d/c.jsp", "org/sample/company/test.jsp",
416 "WEB-INF/classes/a.class", "WEB-INF/classes/b.class", "WEB-INF/classes/c.class", "WEB-INF/lib/a.jar",
417 "WEB-INF/lib/b.jar", "WEB-INF/lib/c.jar" }, "overlay file not found" ) );
418
419 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/a.jsp" );
420 assertDefaultFileContent( testId, webAppDirectory, "jsp/b.jsp" );
421 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/c.jsp" );
422 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/d/a.jsp" );
423 assertOverlayedFile( webAppDirectory, "overlay-full-3", "jsp/d/b.jsp" );
424 assertOverlayedFile( webAppDirectory, "overlay-full-1", "jsp/d/c.jsp" );
425 assertDefaultFileContent( testId, webAppDirectory, "org/sample/company/test.jsp" );
426 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/web.xml" );
427 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/classes/a.class" );
428 assertOverlayedFile( webAppDirectory, "overlay-full-3", "WEB-INF/classes/b.class" );
429 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/classes/c.class" );
430 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/lib/a.jar" );
431 assertOverlayedFile( webAppDirectory, "overlay-full-3", "WEB-INF/lib/b.jar" );
432 assertOverlayedFile( webAppDirectory, "overlay-full-2", "WEB-INF/lib/c.jar" );
433
434
435 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
436 assertWebAppContent( webAppDirectory, assertedFiles, filter );
437 }
438 finally
439 {
440 cleanDirectory( webAppDirectory );
441 }
442
443 }
444
445 public void testCacheWithUpdatedOverlay()
446 throws Exception
447 {
448
449 final String testId = "cache-updated-overlay";
450
451
452 final ArtifactStub overlay = buildWarOverlayStub( "overlay-one" );
453 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-two" );
454
455 final File webAppDirectory = setUpMojo( testId, new ArtifactStub[] { overlay, overlay2 } );
456 final List<File> assertedFiles = new ArrayList<File>();
457 try
458 {
459
460 setVariableValueToObject( mojo, "useCache", Boolean.TRUE );
461 setVariableValueToObject( mojo, "cacheFile", new File( mojo.getWorkDirectory(), "cache.xml" ) );
462
463 final LinkedList<Overlay> overlays = new LinkedList<Overlay>();
464 overlays.add( new DefaultOverlay( overlay ) );
465 overlays.add( new DefaultOverlay( overlay2 ) );
466 mojo.setOverlays( overlays );
467
468 mojo.execute();
469
470
471 final LinkedList<Overlay> updatedOverlays = new LinkedList<Overlay>();
472 updatedOverlays.add( new DefaultOverlay( overlay2 ) );
473 updatedOverlays.add( new DefaultOverlay( overlay ) );
474 mojo.setOverlays( updatedOverlays );
475
476 mojo.execute();
477
478 assertedFiles.addAll( assertDefaultContent( webAppDirectory ) );
479 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
480 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "index.jsp", "login.jsp",
481 "admin.jsp" }, "overlay file not found" ) );
482
483
484 assertOverlayedFile( webAppDirectory, "overlay-two", "index.jsp" );
485 assertOverlayedFile( webAppDirectory, "overlay-one", "login.jsp" );
486 assertOverlayedFile( webAppDirectory, "overlay-two", "admin.jsp" );
487
488
489 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
490 assertWebAppContent( webAppDirectory, assertedFiles, filter );
491 }
492 finally
493 {
494 cleanDirectory( webAppDirectory );
495 }
496 }
497
498 public void testCacheWithRemovedOverlay()
499 throws Exception
500 {
501
502 final String testId = "cache-removed-overlay";
503
504
505 final ArtifactStub overlay = buildWarOverlayStub( "overlay-one" );
506 final ArtifactStub overlay2 = buildWarOverlayStub( "overlay-two" );
507
508 final File webAppDirectory = setUpMojo( testId, new ArtifactStub[] { overlay, overlay2 } );
509 final List<File> assertedFiles = new ArrayList<File>();
510 try
511 {
512
513 setVariableValueToObject( mojo, "useCache", Boolean.TRUE );
514 setVariableValueToObject( mojo, "cacheFile", new File( mojo.getWorkDirectory(), "cache.xml" ) );
515
516 final LinkedList<Overlay> overlays = new LinkedList<Overlay>();
517 overlays.add( new DefaultOverlay( overlay ) );
518 overlays.add( new DefaultOverlay( overlay2 ) );
519 mojo.setOverlays( overlays );
520
521 mojo.execute();
522
523
524 final LinkedList<Overlay> updatedOverlays = new LinkedList<Overlay>();
525 updatedOverlays.add( new DefaultOverlay( overlay2 ) );
526 mojo.setOverlays( updatedOverlays );
527
528
529 mojo.getProject().getArtifacts().remove( overlay );
530
531 mojo.execute();
532
533 assertedFiles.addAll( assertDefaultContent( webAppDirectory ) );
534 assertedFiles.addAll( assertWebXml( webAppDirectory ) );
535 assertedFiles.addAll( assertCustomContent( webAppDirectory, new String[] { "index.jsp", "login.jsp",
536 "admin.jsp" }, "overlay file not found" ) );
537
538
539 assertOverlayedFile( webAppDirectory, "overlay-two", "index.jsp" );
540 assertOverlayedFile( webAppDirectory, "overlay-one", "login.jsp" );
541 assertOverlayedFile( webAppDirectory, "overlay-two", "admin.jsp" );
542
543
544 final FileFilter filter = new FileFilterImpl( webAppDirectory, new String[] { MANIFEST_PATH } );
545 assertWebAppContent( webAppDirectory, assertedFiles, filter );
546 }
547 finally
548 {
549 cleanDirectory( webAppDirectory );
550 }
551 }
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566 protected void assertOverlayedFile( File webAppDirectory, String overlayId, String filePath )
567 throws IOException
568 {
569 final File webAppFile = new File( webAppDirectory, filePath );
570 final File overlayFile = getOverlayFile( overlayId, filePath );
571 assertEquals( "Wrong content for overlayed file " + filePath, FileUtils.fileRead( overlayFile ),
572 FileUtils.fileRead( webAppFile ) );
573
574 }
575
576
577
578
579
580
581
582
583
584
585
586
587 protected void assertDefaultFileContent( String testId, File webAppDirectory, String filePath )
588 throws Exception
589 {
590 final File webAppFile = new File( webAppDirectory, filePath );
591 final File sourceFile = new File( getWebAppSource( testId ), filePath );
592 final String expectedContent = sourceFile.toString();
593 assertEquals( "Wrong content for file " + filePath, expectedContent, FileUtils.fileRead( webAppFile ) );
594
595 }
596
597 protected ArtifactStub generateSimpleWarArtifactStub( String id )
598 throws Exception
599 {
600 return buildWarOverlayStub( id );
601 }
602 }