View Javadoc
1   package org.eclipse.aether.internal.impl;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.*;
23  
24  import java.net.URI;
25  import java.util.List;
26  import java.util.Locale;
27  
28  import org.eclipse.aether.DefaultRepositorySystemSession;
29  import org.eclipse.aether.artifact.DefaultArtifact;
30  import org.eclipse.aether.internal.test.util.TestUtils;
31  import org.eclipse.aether.metadata.DefaultMetadata;
32  import org.eclipse.aether.metadata.Metadata;
33  import org.eclipse.aether.repository.RemoteRepository;
34  import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
35  import org.eclipse.aether.spi.connector.layout.RepositoryLayout.Checksum;
36  import org.eclipse.aether.transfer.NoRepositoryLayoutException;
37  import org.junit.Before;
38  import org.junit.Test;
39  
40  public class Maven2RepositoryLayoutFactoryTest
41  {
42  
43      private DefaultRepositorySystemSession session;
44  
45      private Maven2RepositoryLayoutFactory factory;
46  
47      private RepositoryLayout layout;
48  
49      private RemoteRepository newRepo( String type )
50      {
51          return new RemoteRepository.Builder( "test", type, "classpath:/nil" ).build();
52      }
53  
54      private void assertChecksum( Checksum actual, String expectedUri, String expectedAlgo )
55      {
56          assertEquals( expectedUri, actual.getLocation().toString() );
57          assertEquals( expectedAlgo, actual.getAlgorithm() );
58      }
59  
60      private void assertChecksums( List<Checksum> actual, String baseUri, String... algos )
61      {
62          assertEquals( algos.length, actual.size() );
63          for ( int i = 0; i < algos.length; i++ )
64          {
65              String uri = baseUri + '.' + algos[i].replace( "-", "" ).toLowerCase( Locale.ENGLISH );
66              assertChecksum( actual.get( i ), uri, algos[i] );
67          }
68      }
69  
70      @Before
71      public void setUp()
72          throws Exception
73      {
74          session = TestUtils.newSession();
75          factory = new Maven2RepositoryLayoutFactory();
76          layout = factory.newInstance( session, newRepo( "default" ) );
77      }
78  
79      @Test( expected = NoRepositoryLayoutException.class )
80      public void testBadLayout()
81          throws Exception
82      {
83          factory.newInstance( session, newRepo( "DEFAULT" ) );
84      }
85  
86      @Test
87      public void testArtifactLocation_Release()
88      {
89          DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
90          URI uri = layout.getLocation( artifact, false );
91          assertEquals( "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext", uri.toString() );
92          uri = layout.getLocation( artifact, true );
93          assertEquals( "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext", uri.toString() );
94      }
95  
96      @Test
97      public void testArtifactLocation_Snapshot()
98      {
99          DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0-20110329.221805-4" );
100         URI uri = layout.getLocation( artifact, false );
101         assertEquals( "g/i/d/a-i.d/1.0-SNAPSHOT/a-i.d-1.0-20110329.221805-4-cls.ext", uri.toString() );
102         uri = layout.getLocation( artifact, true );
103         assertEquals( "g/i/d/a-i.d/1.0-SNAPSHOT/a-i.d-1.0-20110329.221805-4-cls.ext", uri.toString() );
104     }
105 
106     @Test
107     public void testMetadataLocation_RootLevel()
108     {
109         DefaultMetadata metadata = new DefaultMetadata( "archetype-catalog.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
110         URI uri = layout.getLocation( metadata, false );
111         assertEquals( "archetype-catalog.xml", uri.toString() );
112         uri = layout.getLocation( metadata, true );
113         assertEquals( "archetype-catalog.xml", uri.toString() );
114     }
115 
116     @Test
117     public void testMetadataLocation_GroupLevel()
118     {
119         DefaultMetadata metadata =
120             new DefaultMetadata( "org.apache.maven.plugins", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
121         URI uri = layout.getLocation( metadata, false );
122         assertEquals( "org/apache/maven/plugins/maven-metadata.xml", uri.toString() );
123         uri = layout.getLocation( metadata, true );
124         assertEquals( "org/apache/maven/plugins/maven-metadata.xml", uri.toString() );
125     }
126 
127     @Test
128     public void testMetadataLocation_ArtifactLevel()
129     {
130         DefaultMetadata metadata =
131             new DefaultMetadata( "org.apache.maven.plugins", "maven-jar-plugin", "maven-metadata.xml",
132                                  Metadata.Nature.RELEASE_OR_SNAPSHOT );
133         URI uri = layout.getLocation( metadata, false );
134         assertEquals( "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml", uri.toString() );
135         uri = layout.getLocation( metadata, true );
136         assertEquals( "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml", uri.toString() );
137     }
138 
139     @Test
140     public void testMetadataLocation_VersionLevel()
141     {
142         DefaultMetadata metadata =
143             new DefaultMetadata( "org.apache.maven.plugins", "maven-jar-plugin", "1.0-SNAPSHOT", "maven-metadata.xml",
144                                  Metadata.Nature.RELEASE_OR_SNAPSHOT );
145         URI uri = layout.getLocation( metadata, false );
146         assertEquals( "org/apache/maven/plugins/maven-jar-plugin/1.0-SNAPSHOT/maven-metadata.xml", uri.toString() );
147         uri = layout.getLocation( metadata, true );
148         assertEquals( "org/apache/maven/plugins/maven-jar-plugin/1.0-SNAPSHOT/maven-metadata.xml", uri.toString() );
149     }
150 
151     @Test
152     public void testArtifactChecksums_Download()
153     {
154         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
155         URI uri = layout.getLocation( artifact, false );
156         List<Checksum> checksums = layout.getChecksums( artifact, false, uri );
157         assertEquals( 2, checksums.size() );
158         assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
159         assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
160     }
161 
162     @Test
163     public void testArtifactChecksums_DownloadWithCustomAlgorithms() throws NoRepositoryLayoutException
164     {
165         session.setConfigProperty( Maven2RepositoryLayoutFactory.CONFIG_PROP_CHECKSUMS_ALGORITHMS, "SHA-256,SHA-1");
166         layout = factory.newInstance( session, newRepo( "default" ) );
167         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
168         URI uri = layout.getLocation( artifact, false );
169         List<Checksum> checksums = layout.getChecksums( artifact, false, uri );
170         assertEquals( 2, checksums.size() );
171         assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha256", "SHA-256" );
172         assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
173     }
174 
175     @Test
176     public void testArtifactChecksums_Upload()
177     {
178         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
179         URI uri = layout.getLocation( artifact, true );
180         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
181         assertEquals( 2, checksums.size() );
182         assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
183         assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
184     }
185 
186     @Test
187     public void testArtifactChecksums_UploadWithCustomAlgorithms() throws NoRepositoryLayoutException
188     {
189         session.setConfigProperty( Maven2RepositoryLayoutFactory.CONFIG_PROP_CHECKSUMS_ALGORITHMS, "SHA-512,MD5" );
190         layout = factory.newInstance( session, newRepo( "default" ) );
191         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
192         URI uri = layout.getLocation( artifact, true );
193         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
194         assertEquals( 2, checksums.size() );
195         assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha512", "SHA-512" );
196         assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
197     }
198 
199     @Test
200     public void testMetadataChecksums_Download()
201     {
202         DefaultMetadata metadata =
203             new DefaultMetadata( "org.apache.maven.plugins", "maven-jar-plugin", "maven-metadata.xml",
204                                  Metadata.Nature.RELEASE_OR_SNAPSHOT );
205         URI uri = layout.getLocation( metadata, false );
206         List<Checksum> checksums = layout.getChecksums( metadata, false, uri );
207         assertEquals( 2, checksums.size() );
208         assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
209                         "SHA-1" );
210         assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
211     }
212 
213     @Test
214     public void testMetadataChecksums_Upload()
215     {
216         DefaultMetadata metadata =
217             new DefaultMetadata( "org.apache.maven.plugins", "maven-jar-plugin", "maven-metadata.xml",
218                                  Metadata.Nature.RELEASE_OR_SNAPSHOT );
219         URI uri = layout.getLocation( metadata, true );
220         List<Checksum> checksums = layout.getChecksums( metadata, true, uri );
221         assertEquals( 2, checksums.size() );
222         assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
223                         "SHA-1" );
224         assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
225     }
226 
227     @Test
228     public void testSignatureChecksums_Download()
229     {
230         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" );
231         URI uri = layout.getLocation( artifact, false );
232         List<Checksum> checksums = layout.getChecksums( artifact, false, uri );
233         assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" );
234 
235         artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
236         uri = layout.getLocation( artifact, false );
237         checksums = layout.getChecksums( artifact, false, uri );
238         assertEquals( 0, checksums.size() );
239     }
240 
241     @Test
242     public void testSignatureChecksums_Upload()
243     {
244         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" );
245         URI uri = layout.getLocation( artifact, true );
246         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
247         assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" );
248 
249         artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
250         uri = layout.getLocation( artifact, true );
251         checksums = layout.getChecksums( artifact, true, uri );
252         assertEquals( 0, checksums.size() );
253     }
254 
255     @Test
256     public void testSignatureChecksums_Force()
257         throws Exception
258     {
259         session.setConfigProperty( Maven2RepositoryLayoutFactory.CONFIG_PROP_SIGNATURE_CHECKSUMS, "true" );
260         layout = factory.newInstance( session, newRepo( "default" ) );
261         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
262         URI uri = layout.getLocation( artifact, true );
263         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
264         assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.jar.asc", "SHA-1", "MD5" );
265     }
266 
267 }