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.eclipse.aether.internal.impl;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.net.URI;
24  import java.util.Arrays;
25  import java.util.Collection;
26  import java.util.Collections;
27  
28  import org.eclipse.aether.DefaultRepositorySystemSession;
29  import org.eclipse.aether.artifact.Artifact;
30  import org.eclipse.aether.artifact.DefaultArtifact;
31  import org.eclipse.aether.internal.test.util.TestFileUtils;
32  import org.eclipse.aether.internal.test.util.TestUtils;
33  import org.eclipse.aether.metadata.DefaultMetadata;
34  import org.eclipse.aether.metadata.Metadata;
35  import org.eclipse.aether.metadata.Metadata.Nature;
36  import org.eclipse.aether.repository.LocalArtifactRegistration;
37  import org.eclipse.aether.repository.LocalArtifactRequest;
38  import org.eclipse.aether.repository.LocalArtifactResult;
39  import org.eclipse.aether.repository.LocalMetadataRequest;
40  import org.eclipse.aether.repository.LocalMetadataResult;
41  import org.eclipse.aether.repository.RemoteRepository;
42  import org.junit.After;
43  import org.junit.Before;
44  import org.junit.Test;
45  
46  import static org.junit.Assert.assertEquals;
47  import static org.junit.Assert.assertFalse;
48  import static org.junit.Assert.assertNotNull;
49  import static org.junit.Assert.assertNull;
50  import static org.junit.Assert.assertTrue;
51  
52  public class EnhancedLocalRepositoryManagerTest {
53  
54      private Artifact artifact;
55  
56      private Artifact snapshot;
57  
58      protected File basedir;
59  
60      protected EnhancedLocalRepositoryManager manager;
61  
62      private File artifactFile;
63  
64      private RemoteRepository repository;
65  
66      private String testContext = "project/compile";
67  
68      protected TrackingFileManager trackingFileManager;
69  
70      protected DefaultRepositorySystemSession session;
71  
72      private Metadata metadata;
73  
74      private Metadata noVerMetadata;
75  
76      @Before
77      public void setup() throws Exception {
78          String url = TestFileUtils.createTempDir("enhanced-remote-repo")
79                  .toURI()
80                  .toURL()
81                  .toString();
82          repository = new RemoteRepository.Builder("enhanced-remote-repo", "default", url)
83                  .setRepositoryManager(true)
84                  .build();
85  
86          artifact = new DefaultArtifact(
87                  "gid",
88                  "aid",
89                  "",
90                  "jar",
91                  "1-test",
92                  Collections.<String, String>emptyMap(),
93                  TestFileUtils.createTempFile("artifact"));
94  
95          snapshot = new DefaultArtifact(
96                  "gid",
97                  "aid",
98                  "",
99                  "jar",
100                 "1.0-20120710.231549-9",
101                 Collections.<String, String>emptyMap(),
102                 TestFileUtils.createTempFile("artifact"));
103 
104         metadata = new DefaultMetadata(
105                 "gid", "aid", "1-test", "maven-metadata.xml", Nature.RELEASE, TestFileUtils.createTempFile("metadata"));
106 
107         noVerMetadata = new DefaultMetadata(
108                 "gid", "aid", null, "maven-metadata.xml", Nature.RELEASE, TestFileUtils.createTempFile("metadata"));
109 
110         basedir = TestFileUtils.createTempDir("enhanced-repo");
111         session = TestUtils.newSession();
112         trackingFileManager = new DefaultTrackingFileManager();
113         manager = getManager();
114 
115         artifactFile = new File(basedir, manager.getPathForLocalArtifact(artifact));
116     }
117 
118     protected EnhancedLocalRepositoryManager getManager() {
119         return new EnhancedLocalRepositoryManager(
120                 basedir,
121                 new DefaultLocalPathComposer(),
122                 "_remote.repositories",
123                 trackingFileManager,
124                 new DefaultLocalPathPrefixComposerFactory().createComposer(session));
125     }
126 
127     @After
128     public void tearDown() throws Exception {
129         TestFileUtils.deleteFile(basedir);
130         TestFileUtils.deleteFile(new File(new URI(repository.getUrl())));
131 
132         session = null;
133         manager = null;
134         repository = null;
135         artifact = null;
136     }
137 
138     private long addLocalArtifact(Artifact artifact) throws IOException {
139         manager.add(session, new LocalArtifactRegistration(artifact));
140         String path = manager.getPathForLocalArtifact(artifact);
141 
142         return copy(artifact, path);
143     }
144 
145     private long addRemoteArtifact(Artifact artifact) throws IOException {
146         Collection<String> contexts = Arrays.asList(testContext);
147         manager.add(session, new LocalArtifactRegistration(artifact, repository, contexts));
148         String path = manager.getPathForRemoteArtifact(artifact, repository, testContext);
149         return copy(artifact, path);
150     }
151 
152     private long copy(Metadata metadata, String path) throws IOException {
153         if (metadata.getFile() == null) {
154             return -1L;
155         }
156         return TestFileUtils.copyFile(metadata.getFile(), new File(basedir, path));
157     }
158 
159     private long copy(Artifact artifact, String path) throws IOException {
160         if (artifact.getFile() == null) {
161             return -1L;
162         }
163         File artifactFile = new File(basedir, path);
164         return TestFileUtils.copyFile(artifact.getFile(), artifactFile);
165     }
166 
167     @Test
168     public void testGetPathForLocalArtifact() {
169         Artifact artifact = new DefaultArtifact("g.i.d:a.i.d:1.0-SNAPSHOT");
170         assertEquals("1.0-SNAPSHOT", artifact.getBaseVersion());
171         assertEquals("g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact(artifact));
172 
173         artifact = new DefaultArtifact("g.i.d:a.i.d:1.0-20110329.221805-4");
174         assertEquals("1.0-SNAPSHOT", artifact.getBaseVersion());
175         assertEquals("g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact(artifact));
176     }
177 
178     @Test
179     public void testGetPathForRemoteArtifact() {
180         RemoteRepository remoteRepo = new RemoteRepository.Builder("repo", "default", "ram:/void").build();
181 
182         Artifact artifact = new DefaultArtifact("g.i.d:a.i.d:1.0-SNAPSHOT");
183         assertEquals("1.0-SNAPSHOT", artifact.getBaseVersion());
184         assertEquals(
185                 "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar",
186                 manager.getPathForRemoteArtifact(artifact, remoteRepo, ""));
187 
188         artifact = new DefaultArtifact("g.i.d:a.i.d:1.0-20110329.221805-4");
189         assertEquals("1.0-SNAPSHOT", artifact.getBaseVersion());
190         assertEquals(
191                 "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-20110329.221805-4.jar",
192                 manager.getPathForRemoteArtifact(artifact, remoteRepo, ""));
193     }
194 
195     @Test
196     public void testFindLocalArtifact() throws Exception {
197         addLocalArtifact(artifact);
198 
199         LocalArtifactRequest request = new LocalArtifactRequest(artifact, null, null);
200         LocalArtifactResult result = manager.find(session, request);
201         assertTrue(result.isAvailable());
202         assertNull(result.getRepository());
203 
204         snapshot = snapshot.setVersion(snapshot.getBaseVersion());
205         addLocalArtifact(snapshot);
206 
207         request = new LocalArtifactRequest(snapshot, null, null);
208         result = manager.find(session, request);
209         assertTrue(result.isAvailable());
210         assertNull(result.getRepository());
211     }
212 
213     @Test
214     public void testFindRemoteArtifact() throws Exception {
215         addRemoteArtifact(artifact);
216 
217         LocalArtifactRequest request = new LocalArtifactRequest(artifact, Arrays.asList(repository), testContext);
218         LocalArtifactResult result = manager.find(session, request);
219         assertTrue(result.isAvailable());
220         assertEquals(repository, result.getRepository());
221 
222         addRemoteArtifact(snapshot);
223 
224         request = new LocalArtifactRequest(snapshot, Arrays.asList(repository), testContext);
225         result = manager.find(session, request);
226         assertTrue(result.isAvailable());
227         assertEquals(repository, result.getRepository());
228     }
229 
230     @Test
231     public void testDoNotFindDifferentContext() throws Exception {
232         addRemoteArtifact(artifact);
233 
234         LocalArtifactRequest request = new LocalArtifactRequest(artifact, Arrays.asList(repository), "different");
235         LocalArtifactResult result = manager.find(session, request);
236         assertFalse(result.isAvailable());
237     }
238 
239     @Test
240     public void testDoNotFindNullFile() throws Exception {
241         artifact = artifact.setFile(null);
242         addLocalArtifact(artifact);
243 
244         LocalArtifactRequest request = new LocalArtifactRequest(artifact, Arrays.asList(repository), testContext);
245         LocalArtifactResult result = manager.find(session, request);
246         assertFalse(result.isAvailable());
247     }
248 
249     @Test
250     public void testDoNotFindDeletedFile() throws Exception {
251         addLocalArtifact(artifact);
252         assertTrue("could not delete artifact file", artifactFile.delete());
253 
254         LocalArtifactRequest request = new LocalArtifactRequest(artifact, Arrays.asList(repository), testContext);
255         LocalArtifactResult result = manager.find(session, request);
256         assertFalse(result.isAvailable());
257     }
258 
259     @Test
260     public void testFindUntrackedFile() throws Exception {
261         copy(artifact, manager.getPathForLocalArtifact(artifact));
262 
263         LocalArtifactRequest request = new LocalArtifactRequest(artifact, Arrays.asList(repository), testContext);
264         LocalArtifactResult result = manager.find(session, request);
265         assertTrue(result.isAvailable());
266     }
267 
268     private long addMetadata(Metadata metadata, RemoteRepository repo) throws IOException {
269         String path;
270         if (repo == null) {
271             path = manager.getPathForLocalMetadata(metadata);
272         } else {
273             path = manager.getPathForRemoteMetadata(metadata, repo, testContext);
274         }
275         System.err.println(path);
276 
277         return copy(metadata, path);
278     }
279 
280     @Test
281     public void testFindLocalMetadata() throws Exception {
282         addMetadata(metadata, null);
283 
284         LocalMetadataRequest request = new LocalMetadataRequest(metadata, null, testContext);
285         LocalMetadataResult result = manager.find(session, request);
286 
287         assertNotNull(result.getFile());
288     }
289 
290     @Test
291     public void testFindLocalMetadataNoVersion() throws Exception {
292         addMetadata(noVerMetadata, null);
293 
294         LocalMetadataRequest request = new LocalMetadataRequest(noVerMetadata, null, testContext);
295         LocalMetadataResult result = manager.find(session, request);
296 
297         assertNotNull(result.getFile());
298     }
299 
300     @Test
301     public void testDoNotFindRemoteMetadataDifferentContext() throws Exception {
302         addMetadata(noVerMetadata, repository);
303         addMetadata(metadata, repository);
304 
305         LocalMetadataRequest request = new LocalMetadataRequest(noVerMetadata, repository, "different");
306         LocalMetadataResult result = manager.find(session, request);
307         assertNull(result.getFile());
308 
309         request = new LocalMetadataRequest(metadata, repository, "different");
310         result = manager.find(session, request);
311         assertNull(result.getFile());
312     }
313 
314     @Test
315     public void testFindArtifactUsesTimestampedVersion() throws Exception {
316         Artifact artifact = new DefaultArtifact("g.i.d:a.i.d:1.0-SNAPSHOT");
317         File file = new File(basedir, manager.getPathForLocalArtifact(artifact));
318         TestFileUtils.writeString(file, "test");
319         addLocalArtifact(artifact);
320 
321         artifact = artifact.setVersion("1.0-20110329.221805-4");
322         LocalArtifactRequest request = new LocalArtifactRequest();
323         request.setArtifact(artifact);
324         LocalArtifactResult result = manager.find(session, request);
325         assertNull(result.toString(), result.getFile());
326         assertFalse(result.toString(), result.isAvailable());
327     }
328 }