]> source.dussan.org Git - archiva.git/blob
5a53f84d175af177fa9ce238016a8db8dfac22cf
[archiva.git] /
1 package org.apache.archiva.metadata.repository.storage.maven2;
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 org.apache.archiva.model.ArtifactReference;
23 import org.apache.archiva.repository.layout.LayoutException;
24 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.springframework.test.context.ContextConfiguration;
28
29 import static org.junit.Assert.*;
30
31 /**
32  * AbstractLegacyRepositoryContentTestCase
33  */
34 @RunWith ( ArchivaSpringJUnit4ClassRunner.class )
35 @ContextConfiguration ( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
36 public abstract class AbstractLegacyRepositoryContentTestCase
37     extends AbstractRepositoryLayerTestCase
38 {
39     @Test
40     public void testBadPathArtifactIdMissingA()
41     {
42         assertBadPath( "groupId/jars/-1.0.jar", "artifactId is missing" );
43     }
44
45     @Test
46     public void testBadPathArtifactIdMissingB()
47     {
48         assertBadPath( "groupId/jars/1.0.jar", "artifactId is missing" );
49     }
50
51     @Test
52     public void testBadPathMissingType()
53     {
54         assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
55     }
56
57     @Test
58     public void testBadPathTooShort()
59     {
60         // NEW
61         assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
62     }
63
64     @Test
65     public void testBadPathWrongPackageExtension()
66     {
67         assertBadPath( "org.apache.maven.test/jars/artifactId-1.0.war", "wrong package extension" );
68     }
69
70     /**
71      * [MRM-432] Oddball version spec.
72      * Example of an oddball / unusual version spec.
73      *
74      * @throws org.apache.archiva.repository.layout.LayoutException
75      *
76      */
77     @Test
78     public void testGoodButOddVersionSpecGanymedSsh2()
79         throws LayoutException
80     {
81         String groupId = "ch.ethz.ganymed";
82         String artifactId = "ganymed-ssh2";
83         String version = "build210";
84         String type = "jar";
85         String path = "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar";
86
87         assertLayout( path, groupId, artifactId, version, null, type );
88     }
89
90     /**
91      * [MRM-432] Oddball version spec.
92      * Example of an oddball / unusual version spec.
93      *
94      * @throws org.apache.archiva.repository.layout.LayoutException
95      *
96      */
97     @Test
98     public void testGoodButOddVersionSpecJavaxComm()
99         throws LayoutException
100     {
101         String groupId = "javax";
102         String artifactId = "comm";
103         String version = "3.0-u1";
104         String type = "jar";
105         String path = "javax/jars/comm-3.0-u1.jar";
106
107         assertLayout( path, groupId, artifactId, version, null, type );
108     }
109
110     /**
111      * [MRM-432] Oddball version spec.
112      * Example of an oddball / unusual version spec.
113      *
114      * @throws org.apache.archiva.repository.layout.LayoutException
115      *
116      */
117     @Test
118     public void testGoodButOddVersionSpecJavaxPersistence()
119         throws LayoutException
120     {
121         String groupId = "javax.persistence";
122         String artifactId = "ejb";
123         String version = "3.0-public_review";
124         String type = "jar";
125         String path = "javax.persistence/jars/ejb-3.0-public_review.jar";
126
127         /*
128          * The version id of "public_review" can cause problems. is it part of
129          * the version spec? or the classifier?
130          */
131
132         assertLayout( path, groupId, artifactId, version, null, type );
133     }
134
135     @Test
136     public void testGoodCommonsLang()
137         throws LayoutException
138     {
139         String groupId = "commons-lang";
140         String artifactId = "commons-lang";
141         String version = "2.1";
142         String type = "jar";
143         String path = "commons-lang/jars/commons-lang-2.1.jar";
144
145         assertLayout( path, groupId, artifactId, version, null, type );
146     }
147
148     @Test
149     public void testGoodDerby()
150         throws LayoutException
151     {
152         String groupId = "org.apache.derby";
153         String artifactId = "derby";
154         String version = "10.2.2.0";
155         String type = "jar";
156         String path = "org.apache.derby/jars/derby-10.2.2.0.jar";
157
158         assertLayout( path, groupId, artifactId, version, null, type );
159     }
160
161     /**
162      * Test the ejb-client type spec.
163      * Type specs are not a 1 to 1 map to the extension.
164      * This tests that effect.
165      * @throws org.apache.archiva.repository.layout.LayoutException
166      */
167     /* TODO: Re-enabled in the future.
168     public void testGoodFooEjbClient()
169         throws LayoutException
170     {
171         String groupId = "com.foo";
172         String artifactId = "foo-client";
173         String version = "1.0";
174         String type = "ejb"; // oddball type-spec (should result in jar extension)
175         String path = "com.foo/ejbs/foo-client-1.0.jar";
176
177         assertLayout( path, groupId, artifactId, version, classifier, type );
178     }
179     */
180
181     /**
182      * Test the classifier.
183      *
184      * @throws org.apache.archiva.repository.layout.LayoutException
185      *
186      */
187     @Test
188     public void testGoodFooLibJavadoc()
189         throws LayoutException
190     {
191         String groupId = "com.foo.lib";
192         String artifactId = "foo-lib";
193         String version = "2.1-alpha-1";
194         String type = "javadoc";
195         String classifier = "javadoc";
196         String path = "com.foo.lib/javadoc.jars/foo-lib-2.1-alpha-1-javadoc.jar";
197
198         assertLayout( path, groupId, artifactId, version, classifier, type );
199     }
200
201     /**
202      * Test the classifier, and java-source type spec.
203      *
204      * @throws org.apache.archiva.repository.layout.LayoutException
205      *
206      */
207     @Test
208     public void testGoodFooLibSources()
209         throws LayoutException
210     {
211         String groupId = "com.foo.lib";
212         String artifactId = "foo-lib";
213         String version = "2.1-alpha-1";
214         String type = "java-source"; // oddball type-spec (should result in jar extension)
215         String classifier = "sources";
216         String path = "com.foo.lib/java-sources/foo-lib-2.1-alpha-1-sources.jar";
217
218         assertLayout( path, groupId, artifactId, version, classifier, type );
219     }
220
221     @Test
222     public void testGoodFooTool()
223         throws LayoutException
224     {
225         String groupId = "com.foo";
226         String artifactId = "foo-tool";
227         String version = "1.0";
228         String type = "jar";
229         String path = "com.foo/jars/foo-tool-1.0.jar";
230
231         assertLayout( path, groupId, artifactId, version, null, type );
232     }
233
234     @Test
235     public void testGoodGeronimoEjbSpec()
236         throws LayoutException
237     {
238         String groupId = "org.apache.geronimo.specs";
239         String artifactId = "geronimo-ejb_2.1_spec";
240         String version = "1.0.1";
241         String type = "jar";
242         String path = "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar";
243
244         assertLayout( path, groupId, artifactId, version, null, type );
245     }
246
247     @Test
248     public void testGoodLdapClientsPom()
249         throws LayoutException
250     {
251         String groupId = "directory-clients";
252         String artifactId = "ldap-clients";
253         String version = "0.9.1-SNAPSHOT";
254         String type = "pom";
255         String path = "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom";
256
257         assertLayout( path, groupId, artifactId, version, null, type );
258     }
259
260     /**
261      * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
262      *
263      * @throws org.apache.archiva.repository.layout.LayoutException
264      *
265      */
266     @Test
267     public void testGoodSnapshotMavenTest()
268         throws LayoutException
269     {
270         String groupId = "org.apache.archiva.test";
271         String artifactId = "redonkulous";
272         String version = "3.1-beta-1-20050831.101112-42";
273         String type = "jar";
274         String path = "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar";
275
276         assertLayout( path, groupId, artifactId, version, null, type );
277     }
278
279     /**
280      * [MRM-519] version identifiers within filename cause misidentification of version.
281      * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
282      */
283     @Test
284     public void testGoodVersionKeywordInArtifactId()
285         throws LayoutException
286     {
287         String groupId = "maven";
288         String artifactId = "maven-test-plugin";
289         String version = "1.8.2";
290         String type = "pom";
291
292         String path = "maven/poms/maven-test-plugin-1.8.2.pom";
293
294         assertLayout( path, groupId, artifactId, version, null, type );
295     }
296
297     /**
298      * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
299      * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
300      */
301     @Test
302     public void testGoodDetectPluginMavenTest()
303         throws LayoutException
304     {
305         String groupId = "maven";
306         String artifactId = "maven-test-plugin";
307         String version = "1.8.2";
308         String type = "maven-one-plugin";
309         String path = "maven/plugins/maven-test-plugin-1.8.2.jar";
310
311         assertLayout( path, groupId, artifactId, version, null, type );
312     }
313
314     /**
315      * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
316      */
317     @Test
318     public void testGoodDetectPluginAvalonMeta()
319         throws LayoutException
320     {
321         String groupId = "avalon-meta";
322         String artifactId = "avalon-meta-plugin";
323         String version = "1.1";
324         String type = "maven-one-plugin";
325         String path = "avalon-meta/plugins/avalon-meta-plugin-1.1.jar";
326
327         assertLayout( path, groupId, artifactId, version, null, type );
328     }
329
330     /**
331      * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
332      */
333     @Test
334     public void testGoodDetectPluginCactusMaven()
335         throws LayoutException
336     {
337         String groupId = "cactus";
338         String artifactId = "cactus-maven";
339         String version = "1.7dev-20040815";
340         String type = "maven-one-plugin";
341         String path = "cactus/plugins/cactus-maven-1.7dev-20040815.jar";
342
343         assertLayout( path, groupId, artifactId, version, null, type );
344     }
345
346     /**
347      * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
348      */
349     @Test
350     public void testGoodDetectPluginGeronimoPackaging()
351         throws LayoutException
352     {
353         String groupId = "geronimo";
354         String artifactId = "geronimo-packaging-plugin";
355         String version = "1.0.1";
356         String type = "maven-one-plugin";
357         String path = "geronimo/plugins/geronimo-packaging-plugin-1.0.1.jar";
358
359         assertLayout( path, groupId, artifactId, version, null, type );
360     }
361
362     /**
363      * [MRM-768] Artifact type "maven-plugin" does not distinguish maven1 and maven2 plugins.
364      * This produces conflicts when m2 plugins are stored in legacy-layout repository
365      */
366     @Test
367     public void testMaven1Maven2PluginTypeDistinc()
368         throws Exception
369     {
370         String groupId = "com.sun.tools.xjc.maven2";
371         String artifactId = "maven-jaxb-plugin";
372         String version = "1.1";
373         String type = "maven-plugin";
374         String path = "com.sun.tools.xjc.maven2/maven-plugins/maven-jaxb-plugin-1.1.jar";
375
376         assertLayout( path, groupId, artifactId, version, null, type );
377     }
378
379     /**
380      * Perform a roundtrip through the layout routines to determine success.
381      *
382      * @param classifier TODO
383      */
384     private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
385                                String type )
386         throws LayoutException
387     {
388         ArtifactReference expectedArtifact = createArtifact( groupId, artifactId, version, classifier, type );
389
390         // --- Artifact Tests.
391         // Artifact to Path
392         assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( expectedArtifact ) );
393
394         // --- Artifact Reference Tests
395
396         // Path to Artifact Reference.
397         ArtifactReference testReference = toArtifactReference( path );
398         assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
399
400         // And back again, using test Reference from previous step.
401         assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( testReference ) );
402     }
403
404     private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
405                                           String version, String classifier, String type )
406     {
407         String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + type;
408
409         assertNotNull( expectedId + " - Should not be null.", actualReference );
410
411         assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
412         assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
413         assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
414         assertEquals( expectedId + " - classifier", classifier, actualReference.getClassifier() );
415         assertEquals( expectedId + " - Type", type, actualReference.getType() );
416     }
417
418     protected ArtifactReference createArtifact( String groupId, String artifactId, String version, String classifier,
419                                                 String type )
420     {
421         ArtifactReference artifact = new ArtifactReference();
422         artifact.setGroupId( groupId );
423         artifact.setArtifactId( artifactId );
424         artifact.setVersion( version );
425         artifact.setClassifier( classifier );
426         artifact.setType( type );
427         assertNotNull( artifact );
428         return artifact;
429     }
430
431     private void assertBadPath( String path, String reason )
432     {
433         try
434         {
435             toArtifactReference( path );
436             fail(
437                 "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
438         }
439         catch ( LayoutException e )
440         {
441             /* expected path */
442         }
443     }
444
445
446     protected abstract ArtifactReference toArtifactReference( String path )
447         throws LayoutException;
448
449     protected abstract String toPath( ArtifactReference reference );
450
451 }