1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 }