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 org.eclipse.aether.DefaultRepositorySystemSession;
22 import org.eclipse.aether.artifact.Artifact;
23 import org.eclipse.aether.artifact.DefaultArtifact;
24 import org.eclipse.aether.internal.test.util.TestUtils;
25 import org.eclipse.aether.metadata.DefaultMetadata;
26 import org.eclipse.aether.metadata.Metadata;
27 import org.eclipse.aether.repository.RemoteRepository;
28 import org.junit.jupiter.api.Test;
29
30 import static org.junit.jupiter.api.Assertions.*;
31
32
33
34
35 public class DefaultLocalPathPrefixComposerFactoryTest {
36 private final Artifact releaseArtifact = new DefaultArtifact("org.group:artifact:1.0");
37
38 private final Artifact snapshotArtifact = new DefaultArtifact("org.group:artifact:1.0-20220228.180000-1");
39
40 private final Metadata releaseMetadata = new DefaultMetadata(
41 "org.group", "artifact", "1.0", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT);
42
43 private final Metadata snapshotMetadata = new DefaultMetadata(
44 "org.group", "artifact", "1.0-SNAPSHOT", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT);
45
46 private final Metadata gaMetadata = new DefaultMetadata(
47 "org.group", "artifact", null, "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT);
48
49 private final Metadata gMetadata =
50 new DefaultMetadata("org.group", null, null, "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT);
51
52 private final RemoteRepository repository =
53 new RemoteRepository.Builder("my-repo", "default", "https://repo.maven.apache.org/maven2/").build();
54
55 @Test
56 void defaultConfigNoSplitAllNulls() {
57 DefaultRepositorySystemSession session = TestUtils.newSession();
58
59 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory();
60 LocalPathPrefixComposer composer = factory.createComposer(session);
61 assertNotNull(composer);
62
63 String prefix;
64 prefix = composer.getPathPrefixForLocalArtifact(releaseArtifact);
65 assertNull(prefix);
66
67 prefix = composer.getPathPrefixForLocalMetadata(releaseMetadata);
68 assertNull(prefix);
69
70 prefix = composer.getPathPrefixForRemoteArtifact(releaseArtifact, repository);
71 assertNull(prefix);
72
73 prefix = composer.getPathPrefixForRemoteMetadata(releaseMetadata, repository);
74 assertNull(prefix);
75 }
76
77 @Test
78 void splitEnabled() {
79 DefaultRepositorySystemSession session = TestUtils.newSession();
80 session.setConfigProperty("aether.enhancedLocalRepository.split", Boolean.TRUE.toString());
81
82 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory();
83 LocalPathPrefixComposer composer = factory.createComposer(session);
84 assertNotNull(composer);
85
86 String prefix;
87 prefix = composer.getPathPrefixForLocalArtifact(releaseArtifact);
88 assertNotNull(prefix);
89 assertEquals("installed", prefix);
90
91 prefix = composer.getPathPrefixForLocalMetadata(releaseMetadata);
92 assertNotNull(prefix);
93 assertEquals("installed", prefix);
94
95 prefix = composer.getPathPrefixForRemoteArtifact(releaseArtifact, repository);
96 assertNotNull(prefix);
97 assertEquals("cached", prefix);
98
99 prefix = composer.getPathPrefixForRemoteMetadata(releaseMetadata, repository);
100 assertNotNull(prefix);
101 assertEquals("cached", prefix);
102 }
103
104 @Test
105 void saneConfig() {
106 DefaultRepositorySystemSession session = TestUtils.newSession();
107 session.setConfigProperty("aether.enhancedLocalRepository.split", Boolean.TRUE.toString());
108 session.setConfigProperty("aether.enhancedLocalRepository.splitLocal", Boolean.TRUE.toString());
109 session.setConfigProperty("aether.enhancedLocalRepository.splitRemoteRepository", Boolean.TRUE.toString());
110
111 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory();
112 LocalPathPrefixComposer composer = factory.createComposer(session);
113 assertNotNull(composer);
114
115 String prefix;
116 prefix = composer.getPathPrefixForLocalArtifact(releaseArtifact);
117 assertNotNull(prefix);
118 assertEquals("installed/releases", prefix);
119
120 prefix = composer.getPathPrefixForLocalArtifact(snapshotArtifact);
121 assertNotNull(prefix);
122 assertEquals("installed/snapshots", prefix);
123
124 prefix = composer.getPathPrefixForLocalMetadata(releaseMetadata);
125 assertNotNull(prefix);
126 assertEquals("installed/releases", prefix);
127
128 prefix = composer.getPathPrefixForLocalMetadata(snapshotMetadata);
129 assertNotNull(prefix);
130 assertEquals("installed/snapshots", prefix);
131
132 prefix = composer.getPathPrefixForLocalMetadata(gaMetadata);
133 assertNotNull(prefix);
134 assertEquals("installed/releases", prefix);
135
136 prefix = composer.getPathPrefixForLocalMetadata(gMetadata);
137 assertNotNull(prefix);
138 assertEquals("installed/releases", prefix);
139
140 prefix = composer.getPathPrefixForRemoteArtifact(releaseArtifact, repository);
141 assertNotNull(prefix);
142 assertEquals("cached/my-repo", prefix);
143
144 prefix = composer.getPathPrefixForRemoteArtifact(snapshotArtifact, repository);
145 assertNotNull(prefix);
146 assertEquals("cached/my-repo", prefix);
147
148 prefix = composer.getPathPrefixForRemoteMetadata(releaseMetadata, repository);
149 assertNotNull(prefix);
150 assertEquals("cached/my-repo", prefix);
151
152 prefix = composer.getPathPrefixForRemoteMetadata(snapshotMetadata, repository);
153 assertNotNull(prefix);
154 assertEquals("cached/my-repo", prefix);
155
156 prefix = composer.getPathPrefixForRemoteMetadata(gaMetadata, repository);
157 assertNotNull(prefix);
158 assertEquals("cached/my-repo", prefix);
159
160 prefix = composer.getPathPrefixForRemoteMetadata(gMetadata, repository);
161 assertNotNull(prefix);
162 assertEquals("cached/my-repo", prefix);
163 }
164
165 @Test
166 void fullConfig() {
167 DefaultRepositorySystemSession session = TestUtils.newSession();
168 session.setConfigProperty("aether.enhancedLocalRepository.split", Boolean.TRUE.toString());
169 session.setConfigProperty("aether.enhancedLocalRepository.splitLocal", Boolean.TRUE.toString());
170 session.setConfigProperty("aether.enhancedLocalRepository.splitRemote", Boolean.TRUE.toString());
171 session.setConfigProperty("aether.enhancedLocalRepository.splitRemoteRepository", Boolean.TRUE.toString());
172
173 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory();
174 LocalPathPrefixComposer composer = factory.createComposer(session);
175 assertNotNull(composer);
176
177 String prefix;
178 prefix = composer.getPathPrefixForLocalArtifact(releaseArtifact);
179 assertNotNull(prefix);
180 assertEquals("installed/releases", prefix);
181
182 prefix = composer.getPathPrefixForLocalArtifact(snapshotArtifact);
183 assertNotNull(prefix);
184 assertEquals("installed/snapshots", prefix);
185
186 prefix = composer.getPathPrefixForLocalMetadata(releaseMetadata);
187 assertNotNull(prefix);
188 assertEquals("installed/releases", prefix);
189
190 prefix = composer.getPathPrefixForLocalMetadata(snapshotMetadata);
191 assertNotNull(prefix);
192 assertEquals("installed/snapshots", prefix);
193
194 prefix = composer.getPathPrefixForLocalMetadata(gaMetadata);
195 assertNotNull(prefix);
196 assertEquals("installed/releases", prefix);
197
198 prefix = composer.getPathPrefixForLocalMetadata(gMetadata);
199 assertNotNull(prefix);
200 assertEquals("installed/releases", prefix);
201
202 prefix = composer.getPathPrefixForRemoteArtifact(releaseArtifact, repository);
203 assertNotNull(prefix);
204 assertEquals("cached/my-repo/releases", prefix);
205
206 prefix = composer.getPathPrefixForRemoteArtifact(snapshotArtifact, repository);
207 assertNotNull(prefix);
208 assertEquals("cached/my-repo/snapshots", prefix);
209
210 prefix = composer.getPathPrefixForRemoteMetadata(releaseMetadata, repository);
211 assertNotNull(prefix);
212 assertEquals("cached/my-repo/releases", prefix);
213
214 prefix = composer.getPathPrefixForRemoteMetadata(snapshotMetadata, repository);
215 assertNotNull(prefix);
216 assertEquals("cached/my-repo/snapshots", prefix);
217
218 prefix = composer.getPathPrefixForRemoteMetadata(gaMetadata, repository);
219 assertNotNull(prefix);
220 assertEquals("cached/my-repo/releases", prefix);
221
222 prefix = composer.getPathPrefixForRemoteMetadata(gMetadata, repository);
223 assertNotNull(prefix);
224 assertEquals("cached/my-repo/releases", prefix);
225 }
226 }