View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.plugins.war.overlay;
20  
21  import java.util.ArrayList;
22  import java.util.List;
23  
24  import org.apache.maven.plugin.testing.stubs.ArtifactStub;
25  import org.apache.maven.plugins.war.Overlay;
26  import org.apache.maven.plugins.war.stub.MavenProjectArtifactsStub;
27  import org.apache.maven.plugins.war.stub.WarArtifactStub;
28  import org.codehaus.plexus.PlexusTestCase;
29  
30  import static org.apache.maven.plugins.war.Overlay.DEFAULT_EXCLUDES;
31  import static org.apache.maven.plugins.war.Overlay.DEFAULT_INCLUDES;
32  
33  /**
34   * @author Stephane Nicoll
35   */
36  public class OverlayManagerTest extends PlexusTestCase {
37  
38      public void testEmptyProject() throws Exception {
39          final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
40          final List<Overlay> overlays = new ArrayList<>();
41          try {
42              final Overlay currentProjectOverlay = Overlay.createInstance();
43              OverlayManager manager =
44                      new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay);
45              assertNotNull(manager.getOverlays());
46              assertEquals(1, manager.getOverlays().size());
47              assertEquals(currentProjectOverlay, manager.getOverlays().get(0));
48          } catch (InvalidOverlayConfigurationException e) {
49              e.printStackTrace();
50              fail("Should not have failed to validate a valid overly config " + e.getMessage());
51          }
52      }
53  
54      public void testAutodetectSimpleOverlay(Overlay currentProjectOverlay) throws Exception {
55  
56          final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
57          final ArtifactStub first = newWarArtifact("test", "test-webapp");
58          project.addArtifact(first);
59  
60          final List<Overlay> overlays = new ArrayList<>();
61  
62          try {
63              final Overlay overlay = currentProjectOverlay;
64              OverlayManager manager = new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, overlay);
65              assertNotNull(manager.getOverlays());
66              assertEquals(2, manager.getOverlays().size());
67              assertEquals(overlay, manager.getOverlays().get(0));
68              assertEquals(new DefaultOverlay(first), manager.getOverlays().get(1));
69          } catch (InvalidOverlayConfigurationException e) {
70              e.printStackTrace();
71              fail("Should not have failed to validate a valid overlay config " + e.getMessage());
72          }
73      }
74  
75      public void testSimpleOverlay() throws Exception {
76  
77          final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
78          final ArtifactStub first = newWarArtifact("test", "test-webapp");
79          project.addArtifact(first);
80  
81          final List<Overlay> overlays = new ArrayList<>();
82          overlays.add(new DefaultOverlay(first));
83  
84          try {
85              final Overlay currentProjectOverlay = Overlay.createInstance();
86              OverlayManager manager =
87                      new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay);
88              assertNotNull(manager.getOverlays());
89              assertEquals(2, manager.getOverlays().size());
90              assertEquals(Overlay.createInstance(), manager.getOverlays().get(0));
91              assertEquals(overlays.get(0), manager.getOverlays().get(1));
92          } catch (InvalidOverlayConfigurationException e) {
93              e.printStackTrace();
94              fail("Should not have failed to validate a valid overlay config " + e.getMessage());
95          }
96      }
97  
98      public void testUnknownOverlay() throws Exception {
99  
100         final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
101         final ArtifactStub first = newWarArtifact("test", "test-webapp");
102         project.addArtifact(first);
103 
104         final List<Overlay> overlays = new ArrayList<>();
105         overlays.add(new Overlay("test", "test-webapp-2"));
106 
107         try {
108             final Overlay currentProjectOverlay = Overlay.createInstance();
109             new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay);
110             fail("Should have failed to validate an unknown overlay");
111         } catch (InvalidOverlayConfigurationException e) {
112             // OK
113         }
114     }
115 
116     public void testCustomCurrentProject() throws Exception {
117 
118         final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
119         final ArtifactStub first = newWarArtifact("test", "test-webapp");
120         final ArtifactStub second = newWarArtifact("test", "test-webapp-2");
121         project.addArtifact(first);
122         project.addArtifact(second);
123 
124         final List<Overlay> overlays = new ArrayList<>();
125         overlays.add(new DefaultOverlay(first));
126         final Overlay currentProjectOverlay = Overlay.createInstance();
127         overlays.add(currentProjectOverlay);
128 
129         try {
130             OverlayManager manager =
131                     new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay);
132             assertNotNull(manager.getOverlays());
133             assertEquals(3, manager.getOverlays().size());
134             assertEquals(overlays.get(0), manager.getOverlays().get(0));
135             assertEquals(currentProjectOverlay, manager.getOverlays().get(1));
136             assertEquals(new DefaultOverlay(second), manager.getOverlays().get(2));
137 
138         } catch (InvalidOverlayConfigurationException e) {
139             e.printStackTrace();
140             fail("Should not have failed to validate a valid overlay config " + e.getMessage());
141         }
142     }
143 
144     public void testOverlaysWithSameArtifactAndGroupId() throws Exception {
145 
146         final MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
147         final ArtifactStub first = newWarArtifact("test", "test-webapp");
148         final ArtifactStub second = newWarArtifact("test", "test-webapp", "my-classifier");
149 
150         project.addArtifact(first);
151         project.addArtifact(second);
152 
153         final List<Overlay> overlays = new ArrayList<>();
154         overlays.add(new DefaultOverlay(first));
155         overlays.add(new DefaultOverlay(second));
156 
157         try {
158             final Overlay currentProjectOverlay = Overlay.createInstance();
159             OverlayManager manager =
160                     new OverlayManager(overlays, project, DEFAULT_INCLUDES, DEFAULT_EXCLUDES, currentProjectOverlay);
161             assertNotNull(manager.getOverlays());
162             assertEquals(3, manager.getOverlays().size());
163             assertEquals(currentProjectOverlay, manager.getOverlays().get(0));
164             assertEquals(overlays.get(0), manager.getOverlays().get(1));
165             assertEquals(overlays.get(1), manager.getOverlays().get(2));
166 
167         } catch (InvalidOverlayConfigurationException e) {
168             e.printStackTrace();
169             fail("Should not have failed to validate a valid overlay config " + e.getMessage());
170         }
171     }
172 
173     protected ArtifactStub newWarArtifact(String groupId, String artifactId, String classifier) {
174         final WarArtifactStub a = new WarArtifactStub(getBasedir());
175         a.setGroupId(groupId);
176         a.setArtifactId(artifactId);
177         if (classifier != null) {
178             a.setClassifier(classifier);
179         }
180         return a;
181     }
182 
183     protected ArtifactStub newWarArtifact(String groupId, String artifactId) {
184         return newWarArtifact(groupId, artifactId, null);
185     }
186 }