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