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