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.dependency.utils.markers;
20  
21  import java.io.File;
22  import java.util.ArrayList;
23  import java.util.List;
24  
25  import org.apache.maven.artifact.Artifact;
26  import org.apache.maven.artifact.DefaultArtifact;
27  import org.apache.maven.plugin.MojoExecutionException;
28  import org.apache.maven.plugins.dependency.fromConfiguration.ArtifactItem;
29  import org.apache.maven.plugins.dependency.testUtils.stubs.StubUnpackFileMarkerHandler;
30  import org.junit.jupiter.api.BeforeEach;
31  import org.junit.jupiter.api.Test;
32  import org.junit.jupiter.api.io.TempDir;
33  
34  import static org.junit.jupiter.api.Assertions.assertFalse;
35  import static org.junit.jupiter.api.Assertions.assertSame;
36  import static org.junit.jupiter.api.Assertions.assertTrue;
37  import static org.junit.jupiter.api.Assertions.fail;
38  import static org.junit.jupiter.api.AssertionsKt.assertNull;
39  
40  class TestUnpackMarkerFileHandler {
41      private List<ArtifactItem> artifactItems = new ArrayList<>();
42  
43      @TempDir
44      private File outputFolder;
45  
46      @BeforeEach
47      void setUp() {
48          ArtifactItem artifactItem = new ArtifactItem(new DefaultArtifact("test", "test", "1", null, "jar", "", null));
49          artifactItems.add(artifactItem);
50  
51          artifactItem = new ArtifactItem(new DefaultArtifact("test2", "test2", "2", null, "jar", "", null));
52          artifactItem.setIncludes("**/*.xml");
53          artifactItems.add(artifactItem);
54  
55          artifactItem = new ArtifactItem(new DefaultArtifact("test3", "test3", "3", null, "jar", "", null));
56          artifactItem.setExcludes("**/*.class");
57          artifactItems.add(artifactItem);
58  
59          artifactItem = new ArtifactItem(new DefaultArtifact("test4", "test4", "4", null, "jar", "", null));
60          artifactItem.setIncludes("**/*.xml");
61          artifactItem.setExcludes("**/*.class");
62          artifactItems.add(artifactItem);
63      }
64  
65      /**
66       * Assert that default functionality still exists
67       *
68       * @throws MojoExecutionException in case of an error.
69       */
70      @Test
71      void setMarker() throws Exception {
72          UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(artifactItems.get(0), this.outputFolder);
73          assertFalse(handler.isMarkerSet());
74          handler.setMarker();
75          assertTrue(handler.isMarkerSet());
76          handler.clearMarker();
77          assertFalse(handler.isMarkerSet());
78  
79          handler.setMarker();
80          assertTrue(handler.isMarkerSet());
81          handler.setMarker();
82          assertTrue(handler.isMarkerSet());
83  
84          handler.clearMarker();
85          assertFalse(handler.isMarkerSet());
86          handler.clearMarker();
87          assertFalse(handler.isMarkerSet());
88      }
89  
90      @Test
91      void markerFile() throws Exception {
92          UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(artifactItems.get(0), this.outputFolder);
93  
94          File handle = handler.getMarkerFile();
95          assertFalse(handle.exists());
96          assertFalse(handler.isMarkerSet());
97  
98          handler.setMarker();
99          assertTrue(handler.isMarkerSet());
100         assertTrue(handle.exists());
101 
102         handle.delete();
103         assertFalse(handler.isMarkerSet());
104 
105         handle.createNewFile();
106         assertTrue(handler.isMarkerSet());
107 
108         handler.clearMarker();
109         assertFalse(handle.exists());
110     }
111 
112     @Test
113     void markerTimeStamp() throws Exception {
114         File theFile = new File(outputFolder, "theFile.jar");
115         theFile.createNewFile();
116         ArtifactItem theArtifactItem = artifactItems.get(0);
117         Artifact theArtifact = theArtifactItem.getArtifact();
118         theArtifact.setFile(theFile);
119         UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(theArtifactItem, this.outputFolder);
120         assertFalse(handler.isMarkerSet());
121         // if the marker is not set, assume it is infinately older than the
122         // artifact.
123         assertTrue(handler.isMarkerOlder(theArtifact));
124         handler.setMarker();
125         assertFalse(handler.isMarkerOlder(theArtifact));
126 
127         assertTrue(theFile.setLastModified(theFile.lastModified() + 60000));
128         assertTrue(handler.isMarkerOlder(theArtifact));
129 
130         theFile.delete();
131         handler.clearMarker();
132         assertFalse(handler.isMarkerSet());
133     }
134 
135     @Test
136     void markerFileException() {
137         // this stub wraps the file with an object to throw exceptions
138         StubUnpackFileMarkerHandler handler = new StubUnpackFileMarkerHandler(artifactItems.get(0), this.outputFolder);
139         try {
140             handler.setMarker();
141             fail("Expected an Exception here");
142         } catch (MojoExecutionException e) {
143 
144         }
145     }
146 
147     @Test
148     void getterSetter() {
149         UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(null, null);
150         assertNull(handler.getArtifactItem());
151         assertNull(handler.getArtifact());
152         handler.setArtifactItem(artifactItems.get(0));
153         assertSame(artifactItems.get(0), handler.getArtifactItem());
154         assertSame(artifactItems.get(0).getArtifact(), handler.getArtifact());
155 
156         assertNull(handler.getMarkerFilesDirectory());
157         handler.setMarkerFilesDirectory(outputFolder);
158         assertSame(outputFolder, handler.getMarkerFilesDirectory());
159     }
160 
161     @Test
162     void nullParent() throws Exception {
163         // the parent isn't set so this will create the marker in the local
164         // folder. We must clear the
165         // marker to avoid leaving test droppings in root.
166         UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(null, null);
167         handler.setArtifactItem(artifactItems.get(0));
168         handler.setMarker();
169         assertTrue(handler.isMarkerSet());
170         handler.clearMarker();
171         assertFalse(handler.isMarkerSet());
172     }
173 
174     @Test
175     void includesMarker() throws Exception {
176         UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(artifactItems.get(1), outputFolder);
177         File handle = handler.getMarkerFile();
178         assertFalse(handle.exists());
179         assertFalse(handler.isMarkerSet());
180 
181         handler.setMarker();
182         assertTrue(handler.isMarkerSet());
183         assertTrue(handle.exists());
184         String hashCode = "" + ("**/*.xml".hashCode());
185         assertTrue(handle.getName().contains(hashCode));
186 
187         handle.delete();
188         assertFalse(handler.isMarkerSet());
189 
190         handle.createNewFile();
191         assertTrue(handler.isMarkerSet());
192 
193         handler.clearMarker();
194         assertFalse(handle.exists());
195     }
196 
197     @Test
198     void excludesMarker() throws Exception {
199         UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(artifactItems.get(2), outputFolder);
200         File handle = handler.getMarkerFile();
201         assertFalse(handle.exists());
202         assertFalse(handler.isMarkerSet());
203 
204         handler.setMarker();
205         assertTrue(handler.isMarkerSet());
206         assertTrue(handle.exists());
207         String hashCode = "" + ("**/*.class".hashCode());
208         assertTrue(handle.getName().contains(hashCode));
209 
210         handle.delete();
211         assertFalse(handler.isMarkerSet());
212 
213         handle.createNewFile();
214         assertTrue(handler.isMarkerSet());
215 
216         handler.clearMarker();
217         assertFalse(handle.exists());
218     }
219 
220     @Test
221     void includesExcludesMarker() throws Exception {
222         UnpackFileMarkerHandler handler = new UnpackFileMarkerHandler(artifactItems.get(3), outputFolder);
223         File handle = handler.getMarkerFile();
224         assertFalse(handle.exists());
225         assertFalse(handler.isMarkerSet());
226 
227         handler.setMarker();
228         assertTrue(handler.isMarkerSet());
229         assertTrue(handle.exists());
230         String hashCode = "" + (0 + "**/*.class".hashCode() + "**/*.xml".hashCode());
231         assertTrue(handle.getName().contains(hashCode));
232 
233         handle.delete();
234         assertFalse(handler.isMarkerSet());
235 
236         handle.createNewFile();
237         assertTrue(handler.isMarkerSet());
238 
239         handler.clearMarker();
240         assertFalse(handle.exists());
241     }
242 }