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