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