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.repository.legacy;
20  
21  import javax.inject.Inject;
22  
23  import java.io.File;
24  
25  import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
26  import org.apache.maven.artifact.Artifact;
27  import org.apache.maven.artifact.factory.ArtifactFactory;
28  import org.apache.maven.artifact.repository.ArtifactRepository;
29  import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
30  import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
31  import org.codehaus.plexus.logging.Logger;
32  import org.codehaus.plexus.logging.console.ConsoleLogger;
33  import org.junit.jupiter.api.BeforeEach;
34  import org.junit.jupiter.api.Test;
35  
36  import static org.junit.jupiter.api.Assertions.assertEquals;
37  import static org.junit.jupiter.api.Assertions.assertFalse;
38  import static org.junit.jupiter.api.Assertions.assertNotNull;
39  import static org.junit.jupiter.api.Assertions.assertNull;
40  import static org.junit.jupiter.api.Assertions.assertTrue;
41  
42  @Deprecated
43  class DefaultUpdateCheckManagerTest extends AbstractArtifactComponentTestCase {
44  
45      @Inject
46      private ArtifactFactory artifactFactory;
47  
48      DefaultUpdateCheckManager updateCheckManager;
49  
50      @Override
51      protected String component() {
52          return "updateCheckManager";
53      }
54  
55      @BeforeEach
56      @Override
57      public void setUp() throws Exception {
58          super.setUp();
59  
60          updateCheckManager = new DefaultUpdateCheckManager(new ConsoleLogger(Logger.LEVEL_DEBUG, "test"));
61      }
62  
63      @Test
64      void testArtifact() throws Exception {
65          ArtifactRepository remoteRepository = remoteRepository();
66  
67          ArtifactRepository localRepository = localRepository();
68  
69          Artifact a = createArtifact("a", "0.0.1-SNAPSHOT");
70          File file = new File(localRepository.getBasedir(), localRepository.pathOf(a));
71          file.delete();
72          a.setFile(file);
73  
74          File touchFile = updateCheckManager.getTouchfile(a);
75          touchFile.delete();
76  
77          assertTrue(updateCheckManager.isUpdateRequired(a, remoteRepository));
78  
79          file.getParentFile().mkdirs();
80          file.createNewFile();
81          updateCheckManager.touch(a, remoteRepository, null);
82  
83          assertFalse(updateCheckManager.isUpdateRequired(a, remoteRepository));
84  
85          assertNull(
86                  updateCheckManager.readLastUpdated(touchFile, updateCheckManager.getRepositoryKey(remoteRepository)));
87  
88          assertFalse(updateCheckManager.getTouchfile(a).exists());
89      }
90  
91      @Test
92      void testMissingArtifact() throws Exception {
93          ArtifactRepository remoteRepository = remoteRepository();
94  
95          ArtifactRepository localRepository = localRepository();
96  
97          Artifact a = createArtifact("a", "0.0.1-SNAPSHOT");
98          File file = new File(localRepository.getBasedir(), localRepository.pathOf(a));
99          file.delete();
100         a.setFile(file);
101 
102         File touchFile = updateCheckManager.getTouchfile(a);
103         touchFile.delete();
104 
105         assertTrue(updateCheckManager.isUpdateRequired(a, remoteRepository));
106 
107         updateCheckManager.touch(a, remoteRepository, null);
108 
109         assertFalse(updateCheckManager.isUpdateRequired(a, remoteRepository));
110 
111         assertFalse(file.exists());
112         assertNotNull(
113                 updateCheckManager.readLastUpdated(touchFile, updateCheckManager.getRepositoryKey(remoteRepository)));
114     }
115 
116     @Test
117     void testPom() throws Exception {
118         ArtifactRepository remoteRepository = remoteRepository();
119 
120         ArtifactRepository localRepository = localRepository();
121 
122         Artifact a = createArtifact("a", "0.0.1", "pom");
123         File file = new File(localRepository.getBasedir(), localRepository.pathOf(a));
124         file.delete();
125         a.setFile(file);
126 
127         File touchFile = updateCheckManager.getTouchfile(a);
128         touchFile.delete();
129 
130         assertTrue(updateCheckManager.isUpdateRequired(a, remoteRepository));
131 
132         file.getParentFile().mkdirs();
133         file.createNewFile();
134         updateCheckManager.touch(a, remoteRepository, null);
135 
136         assertFalse(updateCheckManager.isUpdateRequired(a, remoteRepository));
137 
138         assertNull(
139                 updateCheckManager.readLastUpdated(touchFile, updateCheckManager.getRepositoryKey(remoteRepository)));
140 
141         assertFalse(updateCheckManager.getTouchfile(a).exists());
142     }
143 
144     @Test
145     void testMissingPom() throws Exception {
146         ArtifactRepository remoteRepository = remoteRepository();
147 
148         ArtifactRepository localRepository = localRepository();
149 
150         Artifact a = createArtifact("a", "0.0.1", "pom");
151         File file = new File(localRepository.getBasedir(), localRepository.pathOf(a));
152         file.delete();
153         a.setFile(file);
154 
155         File touchFile = updateCheckManager.getTouchfile(a);
156         touchFile.delete();
157 
158         assertTrue(updateCheckManager.isUpdateRequired(a, remoteRepository));
159 
160         updateCheckManager.touch(a, remoteRepository, null);
161 
162         assertFalse(updateCheckManager.isUpdateRequired(a, remoteRepository));
163 
164         assertFalse(file.exists());
165         assertNotNull(
166                 updateCheckManager.readLastUpdated(touchFile, updateCheckManager.getRepositoryKey(remoteRepository)));
167     }
168 
169     @Test
170     void testMetadata() throws Exception {
171         ArtifactRepository remoteRepository = remoteRepository();
172 
173         ArtifactRepository localRepository = localRepository();
174 
175         Artifact a = createRemoteArtifact("a", "0.0.1-SNAPSHOT");
176         RepositoryMetadata metadata = new ArtifactRepositoryMetadata(a);
177 
178         File file = new File(
179                 localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata(metadata, localRepository));
180         file.delete();
181 
182         File touchFile = updateCheckManager.getTouchfile(metadata, file);
183         touchFile.delete();
184 
185         assertTrue(updateCheckManager.isUpdateRequired(metadata, remoteRepository, file));
186 
187         file.getParentFile().mkdirs();
188         file.createNewFile();
189         updateCheckManager.touch(metadata, remoteRepository, file);
190 
191         assertFalse(updateCheckManager.isUpdateRequired(metadata, remoteRepository, file));
192 
193         assertNotNull(updateCheckManager.readLastUpdated(
194                 touchFile, updateCheckManager.getMetadataKey(remoteRepository, file)));
195     }
196 
197     @Test
198     void testMissingMetadata() throws Exception {
199         ArtifactRepository remoteRepository = remoteRepository();
200 
201         ArtifactRepository localRepository = localRepository();
202 
203         Artifact a = createRemoteArtifact("a", "0.0.1-SNAPSHOT");
204         RepositoryMetadata metadata = new ArtifactRepositoryMetadata(a);
205 
206         File file = new File(
207                 localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata(metadata, localRepository));
208         file.delete();
209 
210         File touchFile = updateCheckManager.getTouchfile(metadata, file);
211         touchFile.delete();
212 
213         assertTrue(updateCheckManager.isUpdateRequired(metadata, remoteRepository, file));
214 
215         updateCheckManager.touch(metadata, remoteRepository, file);
216 
217         assertFalse(updateCheckManager.isUpdateRequired(metadata, remoteRepository, file));
218 
219         assertNotNull(updateCheckManager.readLastUpdated(
220                 touchFile, updateCheckManager.getMetadataKey(remoteRepository, file)));
221     }
222 
223     @Test
224     void testArtifactTouchFileName() throws Exception {
225         ArtifactRepository localRepository = localRepository();
226 
227         Artifact a = artifactFactory.createArtifactWithClassifier("groupId", "a", "0.0.1-SNAPSHOT", "jar", null);
228         File file = new File(localRepository.getBasedir(), localRepository.pathOf(a));
229         a.setFile(file);
230 
231         assertEquals(
232                 "a-0.0.1-SNAPSHOT.jar.lastUpdated",
233                 updateCheckManager.getTouchfile(a).getName());
234 
235         a = artifactFactory.createArtifactWithClassifier("groupId", "a", "0.0.1-SNAPSHOT", "jar", "classifier");
236         file = new File(localRepository.getBasedir(), localRepository.pathOf(a));
237         a.setFile(file);
238 
239         assertEquals(
240                 "a-0.0.1-SNAPSHOT-classifier.jar.lastUpdated",
241                 updateCheckManager.getTouchfile(a).getName());
242     }
243 }