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.filters;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.util.HashSet;
24  import java.util.Set;
25  
26  import junit.framework.TestCase;
27  import org.apache.commons.io.FileUtils;
28  import org.apache.maven.artifact.Artifact;
29  import org.apache.maven.plugin.MojoExecutionException;
30  import org.apache.maven.plugin.logging.Log;
31  import org.apache.maven.plugin.testing.SilentLog;
32  import org.apache.maven.plugins.dependency.testUtils.DependencyArtifactStubFactory;
33  import org.apache.maven.plugins.dependency.utils.DependencyUtil;
34  import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
35  
36  /**
37   * @author brianf
38   */
39  public class TestDestFileFilter extends TestCase {
40      Set<Artifact> artifacts = new HashSet<>();
41  
42      Log log = new SilentLog();
43  
44      File outputFolder;
45  
46      DependencyArtifactStubFactory fact;
47  
48      protected void setUp() throws Exception {
49          super.setUp();
50  
51          outputFolder = new File("target/markers/");
52          FileUtils.deleteDirectory(outputFolder);
53          assertFalse(outputFolder.exists());
54  
55          this.fact = new DependencyArtifactStubFactory(outputFolder, false);
56          artifacts = fact.getReleaseAndSnapshotArtifacts();
57      }
58  
59      protected void tearDown() throws IOException {
60          FileUtils.deleteDirectory(outputFolder);
61      }
62  
63      public File createFile(Artifact artifact) throws IOException {
64          return createFile(artifact, false, false, false);
65      }
66  
67      public File createFile(
68              Artifact artifact,
69              boolean useSubDirectoryPerArtifact,
70              boolean useSubDirectoryPerType,
71              boolean removeVersion)
72              throws IOException {
73          return createFile(artifact, useSubDirectoryPerArtifact, useSubDirectoryPerType, removeVersion, false);
74      }
75  
76      public File createFile(
77              Artifact artifact,
78              boolean useSubDirectoryPerArtifact,
79              boolean useSubDirectoryPerType,
80              boolean removeVersion,
81              boolean removeClassifier)
82              throws IOException {
83          File destFolder = DependencyUtil.getFormattedOutputDirectory(
84                  false, useSubDirectoryPerType, useSubDirectoryPerArtifact, false, false, false, outputFolder, artifact);
85          File destFile = new File(
86                  destFolder,
87                  DependencyUtil.getFormattedFileName(artifact, removeVersion, false, false, removeClassifier));
88  
89          destFile.getParentFile().mkdirs();
90          assertTrue(destFile.createNewFile());
91          return destFile;
92      }
93  
94      public void testDestFileRelease() throws IOException, ArtifactFilterException {
95          DestFileFilter filter = new DestFileFilter(outputFolder);
96          Artifact artifact = fact.getReleaseArtifact();
97  
98          assertTrue(filter.isArtifactIncluded(artifact));
99          createFile(artifact);
100         assertFalse(filter.isArtifactIncluded(artifact));
101 
102         filter.setOverWriteReleases(true);
103         assertTrue(filter.isArtifactIncluded(artifact));
104     }
105 
106     public void testDestFileSnapshot() throws IOException, ArtifactFilterException {
107         DestFileFilter filter = new DestFileFilter(outputFolder);
108         Artifact artifact = fact.getSnapshotArtifact();
109 
110         assertTrue(filter.isArtifactIncluded(artifact));
111         createFile(artifact);
112         assertFalse(filter.isArtifactIncluded(artifact));
113 
114         filter.setOverWriteSnapshots(true);
115         assertTrue(filter.isArtifactIncluded(artifact));
116     }
117 
118     public void testDestFileStripVersion() throws IOException, ArtifactFilterException {
119         DestFileFilter filter = new DestFileFilter(outputFolder);
120         Artifact artifact = fact.getSnapshotArtifact();
121         filter.setRemoveVersion(true);
122 
123         assertTrue(filter.isArtifactIncluded(artifact));
124         createFile(artifact, false, false, true);
125         assertFalse(filter.isArtifactIncluded(artifact));
126 
127         filter.setOverWriteSnapshots(true);
128         assertTrue(filter.isArtifactIncluded(artifact));
129     }
130 
131     public void testDestFileStripClassifier() throws IOException, ArtifactFilterException {
132         DestFileFilter filter = new DestFileFilter(outputFolder);
133         Artifact artifact = fact.getSnapshotArtifact();
134         filter.setRemoveClassifier(true);
135 
136         assertTrue(filter.isArtifactIncluded(artifact));
137         createFile(artifact, false, false, false, true);
138         assertFalse(filter.isArtifactIncluded(artifact));
139 
140         filter.setOverWriteSnapshots(true);
141         assertTrue(filter.isArtifactIncluded(artifact));
142     }
143 
144     public void testDestFileSubPerArtifact() throws IOException, ArtifactFilterException {
145         DestFileFilter filter = new DestFileFilter(outputFolder);
146         Artifact artifact = fact.getSnapshotArtifact();
147         filter.setUseSubDirectoryPerArtifact(true);
148 
149         assertTrue(filter.isArtifactIncluded(artifact));
150         createFile(artifact, true, false, false);
151         assertFalse(filter.isArtifactIncluded(artifact));
152 
153         filter.setOverWriteSnapshots(true);
154         assertTrue(filter.isArtifactIncluded(artifact));
155     }
156 
157     public void testDestFileSubPerType() throws MojoExecutionException, IOException, ArtifactFilterException {
158         DestFileFilter filter = new DestFileFilter(outputFolder);
159         Artifact artifact = fact.getSnapshotArtifact();
160         filter.setUseSubDirectoryPerType(true);
161 
162         assertTrue(filter.isArtifactIncluded(artifact));
163         createFile(artifact, false, true, false);
164         assertFalse(filter.isArtifactIncluded(artifact));
165 
166         filter.setOverWriteSnapshots(true);
167         assertTrue(filter.isArtifactIncluded(artifact));
168     }
169 
170     public void testDestFileOverwriteIfNewer() throws MojoExecutionException, IOException, ArtifactFilterException {
171         DestFileFilter filter = new DestFileFilter(outputFolder);
172 
173         fact.setCreateFiles(true);
174         Artifact artifact = fact.getSnapshotArtifact();
175         File artifactFile = artifact.getFile();
176         assertTrue(artifactFile.setLastModified(artifactFile.lastModified()));
177         filter.setOverWriteIfNewer(true);
178 
179         // should pass because the file doesn't exist yet.
180         assertTrue(filter.isArtifactIncluded(artifact));
181 
182         // create the file in the destination
183         File destFile = createFile(artifact, false, false, false);
184 
185         // set the last modified timestamp to be older than the source
186         assertTrue(destFile.setLastModified(artifactFile.lastModified() - 1000));
187         assertTrue(filter.isArtifactIncluded(artifact));
188 
189         // now set the last modified timestamp to be newer than the source
190         assertTrue(destFile.setLastModified(artifactFile.lastModified() + 1000));
191 
192         assertFalse(filter.isArtifactIncluded(artifact));
193     }
194 
195     public void testGettersSetters() {
196         DestFileFilter filter = new DestFileFilter(null);
197         assertNull(filter.getOutputFileDirectory());
198         filter.setOutputFileDirectory(outputFolder);
199         assertSame(outputFolder, filter.getOutputFileDirectory());
200 
201         filter.setOverWriteIfNewer(true);
202         assertTrue(filter.isOverWriteIfNewer());
203         filter.setOverWriteIfNewer(false);
204         assertFalse(filter.isOverWriteIfNewer());
205 
206         filter.setOverWriteReleases(true);
207         assertTrue(filter.isOverWriteReleases());
208         filter.setOverWriteReleases(false);
209         assertFalse(filter.isOverWriteReleases());
210 
211         filter.setOverWriteSnapshots(true);
212         assertTrue(filter.isOverWriteSnapshots());
213         filter.setOverWriteSnapshots(false);
214         assertFalse(filter.isOverWriteSnapshots());
215 
216         filter.setUseSubDirectoryPerArtifact(true);
217         assertTrue(filter.isUseSubDirectoryPerArtifact());
218         filter.setUseSubDirectoryPerArtifact(false);
219         assertFalse(filter.isUseSubDirectoryPerArtifact());
220 
221         filter.setUseSubDirectoryPerType(true);
222         assertTrue(filter.isUseSubDirectoryPerType());
223         filter.setUseSubDirectoryPerType(false);
224         assertFalse(filter.isUseSubDirectoryPerType());
225 
226         filter.setRemoveVersion(true);
227         assertTrue(filter.isRemoveVersion());
228         filter.setRemoveVersion(false);
229         assertFalse(filter.isRemoveVersion());
230     }
231 }