001package org.eclipse.aether.internal.impl;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 * 
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 * 
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import static org.junit.Assert.*;
023
024import java.net.URI;
025import java.util.List;
026import java.util.Locale;
027
028import org.eclipse.aether.DefaultRepositorySystemSession;
029import org.eclipse.aether.artifact.DefaultArtifact;
030import org.eclipse.aether.internal.test.util.TestUtils;
031import org.eclipse.aether.metadata.DefaultMetadata;
032import org.eclipse.aether.metadata.Metadata;
033import org.eclipse.aether.repository.RemoteRepository;
034import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
035import org.eclipse.aether.spi.connector.layout.RepositoryLayout.Checksum;
036import org.eclipse.aether.transfer.NoRepositoryLayoutException;
037import org.junit.Before;
038import org.junit.Test;
039
040public class Maven2RepositoryLayoutFactoryTest
041{
042
043    private DefaultRepositorySystemSession session;
044
045    private Maven2RepositoryLayoutFactory factory;
046
047    private RepositoryLayout layout;
048
049    private RemoteRepository newRepo( String type )
050    {
051        return new RemoteRepository.Builder( "test", type, "classpath:/nil" ).build();
052    }
053
054    private void assertChecksum( Checksum actual, String expectedUri, String expectedAlgo )
055    {
056        assertEquals( expectedUri, actual.getLocation().toString() );
057        assertEquals( expectedAlgo, actual.getAlgorithm() );
058    }
059
060    private void assertChecksums( List<Checksum> actual, String baseUri, String... algos )
061    {
062        assertEquals( algos.length, actual.size() );
063        for ( int i = 0; i < algos.length; i++ )
064        {
065            String uri = baseUri + '.' + algos[i].replace( "-", "" ).toLowerCase( Locale.ENGLISH );
066            assertChecksum( actual.get( i ), uri, algos[i] );
067        }
068    }
069
070    @Before
071    public void setUp()
072        throws Exception
073    {
074        session = TestUtils.newSession();
075        factory = new Maven2RepositoryLayoutFactory();
076        layout = factory.newInstance( session, newRepo( "default" ) );
077    }
078
079    @Test( expected = NoRepositoryLayoutException.class )
080    public void testBadLayout()
081        throws Exception
082    {
083        factory.newInstance( session, newRepo( "DEFAULT" ) );
084    }
085
086    @Test
087    public void testArtifactLocation_Release()
088    {
089        DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
090        URI uri = layout.getLocation( artifact, false );
091        assertEquals( "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext", uri.toString() );
092        uri = layout.getLocation( artifact, true );
093        assertEquals( "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext", uri.toString() );
094    }
095
096    @Test
097    public void testArtifactLocation_Snapshot()
098    {
099        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_Upload()
164    {
165        DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
166        URI uri = layout.getLocation( artifact, true );
167        List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
168        assertEquals( 2, checksums.size() );
169        assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
170        assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
171    }
172
173    @Test
174    public void testMetadataChecksums_Download()
175    {
176        DefaultMetadata metadata =
177            new DefaultMetadata( "org.apache.maven.plugins", "maven-jar-plugin", "maven-metadata.xml",
178                                 Metadata.Nature.RELEASE_OR_SNAPSHOT );
179        URI uri = layout.getLocation( metadata, false );
180        List<Checksum> checksums = layout.getChecksums( metadata, false, uri );
181        assertEquals( 2, checksums.size() );
182        assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
183                        "SHA-1" );
184        assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
185    }
186
187    @Test
188    public void testMetadataChecksums_Upload()
189    {
190        DefaultMetadata metadata =
191            new DefaultMetadata( "org.apache.maven.plugins", "maven-jar-plugin", "maven-metadata.xml",
192                                 Metadata.Nature.RELEASE_OR_SNAPSHOT );
193        URI uri = layout.getLocation( metadata, true );
194        List<Checksum> checksums = layout.getChecksums( metadata, true, uri );
195        assertEquals( 2, checksums.size() );
196        assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
197                        "SHA-1" );
198        assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
199    }
200
201    @Test
202    public void testSignatureChecksums_Download()
203    {
204        DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" );
205        URI uri = layout.getLocation( artifact, false );
206        List<Checksum> checksums = layout.getChecksums( artifact, false, uri );
207        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" );
208
209        artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
210        uri = layout.getLocation( artifact, false );
211        checksums = layout.getChecksums( artifact, false, uri );
212        assertEquals( 0, checksums.size() );
213    }
214
215    @Test
216    public void testSignatureChecksums_Upload()
217    {
218        DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" );
219        URI uri = layout.getLocation( artifact, true );
220        List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
221        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" );
222
223        artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
224        uri = layout.getLocation( artifact, true );
225        checksums = layout.getChecksums( artifact, true, uri );
226        assertEquals( 0, checksums.size() );
227    }
228
229    @Test
230    public void testSignatureChecksums_Force()
231        throws Exception
232    {
233        session.setConfigProperty( Maven2RepositoryLayoutFactory.CONFIG_PROP_SIGNATURE_CHECKSUMS, "true" );
234        layout = factory.newInstance( session, newRepo( "default" ) );
235        DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
236        URI uri = layout.getLocation( artifact, true );
237        List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
238        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.jar.asc", "SHA-1", "MD5" );
239    }
240
241}