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(DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_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(DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT, Boolean.TRUE.toString());
108         session.setConfigProperty(
109                 DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT_LOCAL, Boolean.TRUE.toString());
110         session.setConfigProperty(
111                 DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT_REMOTE_REPOSITORY, 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     void fullConfig() {
169         DefaultRepositorySystemSession session = TestUtils.newSession();
170         session.setConfigProperty(DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT, Boolean.TRUE.toString());
171         session.setConfigProperty(
172                 DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT_LOCAL, Boolean.TRUE.toString());
173         session.setConfigProperty(
174                 DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT_REMOTE, Boolean.TRUE.toString());
175         session.setConfigProperty(
176                 DefaultLocalPathPrefixComposerFactory.CONFIG_PROP_SPLIT_REMOTE_REPOSITORY, Boolean.TRUE.toString());
177 
178         LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory();
179         LocalPathPrefixComposer composer = factory.createComposer(session);
180         assertNotNull(composer);
181 
182         String prefix;
183         prefix = composer.getPathPrefixForLocalArtifact(releaseArtifact);
184         assertNotNull(prefix);
185         assertEquals("installed/releases", prefix);
186 
187         prefix = composer.getPathPrefixForLocalArtifact(snapshotArtifact);
188         assertNotNull(prefix);
189         assertEquals("installed/snapshots", prefix);
190 
191         prefix = composer.getPathPrefixForLocalMetadata(releaseMetadata);
192         assertNotNull(prefix);
193         assertEquals("installed/releases", prefix);
194 
195         prefix = composer.getPathPrefixForLocalMetadata(snapshotMetadata);
196         assertNotNull(prefix);
197         assertEquals("installed/snapshots", prefix);
198 
199         prefix = composer.getPathPrefixForLocalMetadata(gaMetadata);
200         assertNotNull(prefix);
201         assertEquals("installed/releases", prefix);
202 
203         prefix = composer.getPathPrefixForLocalMetadata(gMetadata);
204         assertNotNull(prefix);
205         assertEquals("installed/releases", prefix);
206 
207         prefix = composer.getPathPrefixForRemoteArtifact(releaseArtifact, repository);
208         assertNotNull(prefix);
209         assertEquals("cached/my-repo/releases", prefix);
210 
211         prefix = composer.getPathPrefixForRemoteArtifact(snapshotArtifact, repository);
212         assertNotNull(prefix);
213         assertEquals("cached/my-repo/snapshots", prefix);
214 
215         prefix = composer.getPathPrefixForRemoteMetadata(releaseMetadata, repository);
216         assertNotNull(prefix);
217         assertEquals("cached/my-repo/releases", prefix);
218 
219         prefix = composer.getPathPrefixForRemoteMetadata(snapshotMetadata, repository);
220         assertNotNull(prefix);
221         assertEquals("cached/my-repo/snapshots", prefix);
222 
223         prefix = composer.getPathPrefixForRemoteMetadata(gaMetadata, repository);
224         assertNotNull(prefix);
225         assertEquals("cached/my-repo/releases", prefix);
226 
227         prefix = composer.getPathPrefixForRemoteMetadata(gMetadata, repository);
228         assertNotNull(prefix);
229         assertEquals("cached/my-repo/releases", prefix);
230     }
231 }