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.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 }