View Javadoc
1   package org.eclipse.aether.internal.impl;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   * 
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   * 
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.*;
23  
24  import java.io.File;
25  import java.io.IOException;
26  import java.net.URI;
27  import java.util.Arrays;
28  import java.util.Collection;
29  import java.util.Collections;
30  
31  import org.eclipse.aether.RepositorySystemSession;
32  import org.eclipse.aether.artifact.Artifact;
33  import org.eclipse.aether.artifact.DefaultArtifact;
34  import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManager;
35  import org.eclipse.aether.internal.test.util.TestFileUtils;
36  import org.eclipse.aether.internal.test.util.TestUtils;
37  import org.eclipse.aether.metadata.DefaultMetadata;
38  import org.eclipse.aether.metadata.Metadata;
39  import org.eclipse.aether.metadata.Metadata.Nature;
40  import org.eclipse.aether.repository.LocalArtifactRegistration;
41  import org.eclipse.aether.repository.LocalArtifactRequest;
42  import org.eclipse.aether.repository.LocalArtifactResult;
43  import org.eclipse.aether.repository.LocalMetadataRequest;
44  import org.eclipse.aether.repository.LocalMetadataResult;
45  import org.eclipse.aether.repository.RemoteRepository;
46  import org.junit.After;
47  import org.junit.Before;
48  import org.junit.Test;
49  
50  public class EnhancedLocalRepositoryManagerTest
51  {
52  
53      private Artifact artifact;
54  
55      private Artifact snapshot;
56  
57      private File basedir;
58  
59      private EnhancedLocalRepositoryManager manager;
60  
61      private File artifactFile;
62  
63      private RemoteRepository repository;
64  
65      private String testContext = "project/compile";
66  
67      private TrackingFileManager trackingFileManager;
68  
69      private RepositorySystemSession session;
70  
71      private Metadata metadata;
72  
73      private Metadata noVerMetadata;
74  
75      @Before
76      public void setup()
77          throws Exception
78      {
79          String url = TestFileUtils.createTempDir( "enhanced-remote-repo" ).toURI().toURL().toString();
80          repository =
81              new RemoteRepository.Builder( "enhanced-remote-repo", "default", url ).setRepositoryManager( true ).build();
82  
83          artifact =
84              new DefaultArtifact( "gid", "aid", "", "jar", "1-test", Collections.<String, String> emptyMap(),
85                                   TestFileUtils.createTempFile( "artifact" ) );
86  
87          snapshot =
88              new DefaultArtifact( "gid", "aid", "", "jar", "1.0-20120710.231549-9",
89                                   Collections.<String, String> emptyMap(), TestFileUtils.createTempFile( "artifact" ) );
90  
91          metadata =
92              new DefaultMetadata( "gid", "aid", "1-test", "maven-metadata.xml", Nature.RELEASE,
93                                   TestFileUtils.createTempFile( "metadata" ) );
94  
95          noVerMetadata =
96              new DefaultMetadata( "gid", "aid", null, "maven-metadata.xml", Nature.RELEASE,
97                                   TestFileUtils.createTempFile( "metadata" ) );
98  
99          basedir = TestFileUtils.createTempDir( "enhanced-repo" );
100         session = TestUtils.newSession();
101         trackingFileManager = new DefaultTrackingFileManager();
102         manager = new EnhancedLocalRepositoryManager( basedir, session, trackingFileManager );
103 
104         artifactFile = new File( basedir, manager.getPathForLocalArtifact( artifact ) );
105     }
106 
107     @After
108     public void tearDown()
109         throws Exception
110     {
111         TestFileUtils.deleteFile( basedir );
112         TestFileUtils.deleteFile( new File( new URI( repository.getUrl() ) ) );
113 
114         session = null;
115         manager = null;
116         repository = null;
117         artifact = null;
118     }
119 
120     private long addLocalArtifact( Artifact artifact )
121         throws IOException
122     {
123         manager.add( session, new LocalArtifactRegistration( artifact ) );
124         String path = manager.getPathForLocalArtifact( artifact );
125 
126         return copy( artifact, path );
127     }
128 
129     private long addRemoteArtifact( Artifact artifact )
130         throws IOException
131     {
132         Collection<String> contexts = Arrays.asList( testContext );
133         manager.add( session, new LocalArtifactRegistration( artifact, repository, contexts ) );
134         String path = manager.getPathForRemoteArtifact( artifact, repository, testContext );
135         return copy( artifact, path );
136     }
137 
138     private long copy( Metadata metadata, String path )
139         throws IOException
140     {
141         if ( metadata.getFile() == null )
142         {
143             return -1L;
144         }
145         return TestFileUtils.copyFile( metadata.getFile(), new File( basedir, path ) );
146     }
147 
148     private long copy( Artifact artifact, String path )
149         throws IOException
150     {
151         if ( artifact.getFile() == null )
152         {
153             return -1L;
154         }
155         File artifactFile = new File( basedir, path );
156         return TestFileUtils.copyFile( artifact.getFile(), artifactFile );
157     }
158 
159     @Test
160     public void testGetPathForLocalArtifact()
161     {
162         Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" );
163         assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() );
164         assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact( artifact ) );
165 
166         artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-20110329.221805-4" );
167         assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() );
168         assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact( artifact ) );
169     }
170 
171     @Test
172     public void testGetPathForRemoteArtifact()
173     {
174         RemoteRepository remoteRepo = new RemoteRepository.Builder( "repo", "default", "ram:/void" ).build();
175 
176         Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" );
177         assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() );
178         assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar",
179                       manager.getPathForRemoteArtifact( artifact, remoteRepo, "" ) );
180 
181         artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-20110329.221805-4" );
182         assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() );
183         assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-20110329.221805-4.jar",
184                       manager.getPathForRemoteArtifact( artifact, remoteRepo, "" ) );
185     }
186 
187     @Test
188     public void testFindLocalArtifact()
189         throws Exception
190     {
191         addLocalArtifact( artifact );
192 
193         LocalArtifactRequest request = new LocalArtifactRequest( artifact, null, null );
194         LocalArtifactResult result = manager.find( session, request );
195         assertTrue( result.isAvailable() );
196         assertNull( result.getRepository() );
197 
198         snapshot = snapshot.setVersion( snapshot.getBaseVersion() );
199         addLocalArtifact( snapshot );
200 
201         request = new LocalArtifactRequest( snapshot, null, null );
202         result = manager.find( session, request );
203         assertTrue( result.isAvailable() );
204         assertNull( result.getRepository() );
205     }
206 
207     @Test
208     public void testFindRemoteArtifact()
209         throws Exception
210     {
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()
228         throws Exception
229     {
230         addRemoteArtifact( artifact );
231 
232         LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), "different" );
233         LocalArtifactResult result = manager.find( session, request );
234         assertFalse( result.isAvailable() );
235     }
236 
237     @Test
238     public void testDoNotFindNullFile()
239         throws Exception
240     {
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()
251         throws Exception
252     {
253         addLocalArtifact( artifact );
254         assertTrue( "could not delete artifact file", artifactFile.delete() );
255 
256         LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext );
257         LocalArtifactResult result = manager.find( session, request );
258         assertFalse( result.isAvailable() );
259     }
260 
261     @Test
262     public void testFindUntrackedFile()
263         throws Exception
264     {
265         copy( artifact, manager.getPathForLocalArtifact( artifact ) );
266 
267         LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext );
268         LocalArtifactResult result = manager.find( session, request );
269         assertTrue( result.isAvailable() );
270     }
271 
272     private long addMetadata( Metadata metadata, RemoteRepository repo )
273         throws IOException
274     {
275         String path;
276         if ( repo == null )
277         {
278             path = manager.getPathForLocalMetadata( metadata );
279         }
280         else
281         {
282             path = manager.getPathForRemoteMetadata( metadata, repo, testContext );
283         }
284         System.err.println( path );
285 
286         return copy( metadata, path );
287     }
288 
289     @Test
290     public void testFindLocalMetadata()
291         throws Exception
292     {
293         addMetadata( metadata, null );
294 
295         LocalMetadataRequest request = new LocalMetadataRequest( metadata, null, testContext );
296         LocalMetadataResult result = manager.find( session, request );
297 
298         assertNotNull( result.getFile() );
299     }
300 
301     @Test
302     public void testFindLocalMetadataNoVersion()
303         throws Exception
304     {
305         addMetadata( noVerMetadata, null );
306 
307         LocalMetadataRequest request = new LocalMetadataRequest( noVerMetadata, null, testContext );
308         LocalMetadataResult result = manager.find( session, request );
309 
310         assertNotNull( result.getFile() );
311     }
312 
313     @Test
314     public void testDoNotFindRemoteMetadataDifferentContext()
315         throws Exception
316     {
317         addMetadata( noVerMetadata, repository );
318         addMetadata( metadata, repository );
319 
320         LocalMetadataRequest request = new LocalMetadataRequest( noVerMetadata, repository, "different" );
321         LocalMetadataResult result = manager.find( session, request );
322         assertNull( result.getFile() );
323 
324         request = new LocalMetadataRequest( metadata, repository, "different" );
325         result = manager.find( session, request );
326         assertNull( result.getFile() );
327     }
328 
329     @Test
330     public void testFindArtifactUsesTimestampedVersion()
331         throws Exception
332     {
333         Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" );
334         File file = new File( basedir, manager.getPathForLocalArtifact( artifact ) );
335         TestFileUtils.writeString( file, "test" );
336         addLocalArtifact( artifact );
337 
338         artifact = artifact.setVersion( "1.0-20110329.221805-4" );
339         LocalArtifactRequest request = new LocalArtifactRequest();
340         request.setArtifact( artifact );
341         LocalArtifactResult result = manager.find( session, request );
342         assertNull( result.toString(), result.getFile() );
343         assertFalse( result.toString(), result.isAvailable() );
344     }
345 
346 }