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.markers.DefaultFileMarkerHandler;
34  import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
35  
36  /**
37   * @author brianf
38   */
39  public class TestMarkerFileFilter 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 void testMarkerFile() throws ArtifactFilterException {
64  
65          MarkerFileFilter filter = new MarkerFileFilter(true, true, false, new DefaultFileMarkerHandler(outputFolder));
66          Set<Artifact> result = filter.filter(artifacts);
67          assertEquals(2, result.size());
68  
69          filter.setOverWriteReleases(false);
70          filter.setOverWriteSnapshots(false);
71          result = filter.filter(artifacts);
72          assertEquals(2, result.size());
73      }
74  
75      public void testMarkerSnapshots() throws ArtifactFilterException, MojoExecutionException, IOException {
76  
77          DefaultFileMarkerHandler handler = new DefaultFileMarkerHandler(fact.getSnapshotArtifact(), outputFolder);
78          handler.setMarker();
79  
80          MarkerFileFilter filter = new MarkerFileFilter(true, false, false, new DefaultFileMarkerHandler(outputFolder));
81          Set<Artifact> result = filter.filter(artifacts);
82          assertEquals(1, result.size());
83  
84          filter.setOverWriteSnapshots(true);
85          result = filter.filter(artifacts);
86          assertEquals(2, result.size());
87          assertTrue(handler.clearMarker());
88          FileUtils.deleteDirectory(outputFolder);
89          assertFalse(outputFolder.exists());
90      }
91  
92      public void testMarkerRelease() throws IOException, ArtifactFilterException, MojoExecutionException {
93          DefaultFileMarkerHandler handler = new DefaultFileMarkerHandler(fact.getReleaseArtifact(), outputFolder);
94          handler.setMarker();
95  
96          MarkerFileFilter filter = new MarkerFileFilter(false, false, false, new DefaultFileMarkerHandler(outputFolder));
97          Set<Artifact> result = filter.filter(artifacts);
98          assertEquals(1, result.size());
99  
100         filter.setOverWriteReleases(true);
101         result = filter.filter(artifacts);
102         assertEquals(2, result.size());
103 
104         assertTrue(handler.clearMarker());
105         FileUtils.deleteDirectory(outputFolder);
106         assertFalse(outputFolder.exists());
107     }
108 
109     public void testMarkerTimestamp() throws IOException, MojoExecutionException, ArtifactFilterException {
110         // filter includes release artifact because no marker present
111         // filter includes snapshot artifact because it is newer than marker
112         DependencyArtifactStubFactory fileFact = new DependencyArtifactStubFactory(outputFolder, true);
113         Artifact snap = fileFact.getSnapshotArtifact();
114         Artifact release = fileFact.getReleaseArtifact();
115         Set<Artifact> tempArtifacts = new HashSet<>();
116         tempArtifacts.add(snap);
117         tempArtifacts.add(release);
118         DefaultFileMarkerHandler handler = new DefaultFileMarkerHandler(snap, outputFolder);
119         handler.setMarker();
120         assertTrue(snap.getFile().setLastModified(snap.getFile().lastModified() + 1500));
121         MarkerFileFilter filter = new MarkerFileFilter(false, false, true, new DefaultFileMarkerHandler(outputFolder));
122         Set<Artifact> result = filter.filter(tempArtifacts);
123         assertEquals(2, result.size());
124 
125         // update marker; filter won't include snapshot because timestamps equal
126         handler.setMarker();
127         result = filter.filter(tempArtifacts);
128         assertEquals(1, result.size());
129 
130         // filter won't include snapshot because it is older than marker
131         assertTrue(snap.getFile().setLastModified(snap.getFile().lastModified() - 10000));
132 
133         result = filter.filter(tempArtifacts);
134         assertEquals(1, result.size());
135 
136         assertTrue(handler.clearMarker());
137         assertFalse(handler.isMarkerSet());
138         snap.getFile().delete();
139         release.getFile().delete();
140         FileUtils.deleteDirectory(outputFolder);
141         assertFalse(outputFolder.exists());
142     }
143 
144     public void testGettersSetters() {
145         MarkerFileFilter filter = new MarkerFileFilter(true, false, true, new DefaultFileMarkerHandler(outputFolder));
146         assertTrue(filter.isOverWriteReleases());
147         assertFalse(filter.isOverWriteSnapshots());
148         assertTrue(filter.isOverWriteIfNewer());
149 
150         filter.setOverWriteReleases(false);
151         filter.setOverWriteSnapshots(true);
152         filter.setOverWriteIfNewer(false);
153 
154         assertFalse(filter.isOverWriteReleases());
155         assertTrue(filter.isOverWriteSnapshots());
156         assertFalse(filter.isOverWriteIfNewer());
157     }
158 }