1 package org.eclipse.aether.internal.impl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }