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.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   * UT for {@link DefaultLocalPathPrefixComposerFactory}.
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 }