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