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