View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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   * UT for {@link DefaultLocalPathPrefixComposerFactory}.
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 }