1 package org.eclipse.aether.internal.impl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }