]> source.dussan.org Git - archiva.git/blob
f557092d30e7a3686b6b892e5d9abc79d251dada
[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.apache.commons.lang.StringUtils;
26 import org.junit.Test;
27
28 import static org.junit.Assert.*;
29
30 /**
31  * AbstractDefaultRepositoryContentTestCase 
32  *
33  * @version $Id$
34  */
35 public abstract class AbstractDefaultRepositoryContentTestCase
36     extends AbstractRepositoryLayerTestCase
37 {
38     @Test
39     public void testBadPathMissingType()
40     {
41         assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
42     }
43
44     @Test
45     public void testBadPathReleaseInSnapshotDir()
46     {
47         assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", "non snapshot artifact inside of a snapshot dir" );
48     }
49
50     @Test
51     public void testBadPathTimestampedSnapshotNotInSnapshotDir()
52     {
53         assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar",
54                        "Timestamped Snapshot artifact not inside of an Snapshot dir" );
55     }
56
57     @Test
58     public void testBadPathTooShort()
59     {
60         assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
61     }
62
63     @Test
64     public void testBadPathVersionMismatchA()
65     {
66         assertBadPath( "invalid/invalid/1.0/invalid-2.0.jar", "version mismatch between path and artifact" );
67     }
68
69     @Test
70     public void testBadPathVersionMismatchB()
71     {
72         assertBadPath( "invalid/invalid/1.0/invalid-1.0b.jar", "version mismatch between path and artifact" );
73     }
74
75     @Test
76     public void testBadPathWrongArtifactId()
77     {
78         assertBadPath( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar",
79                        "wrong artifact id" );
80     }
81
82     /** 
83      * [MRM-432] Oddball version spec.
84      * Example of an oddball / unusual version spec.
85      * @throws LayoutException 
86      */
87     @Test
88     public void testGoodButOddVersionSpecGanymedSsh2()
89         throws LayoutException
90     {
91         String groupId = "ch.ethz.ganymed";
92         String artifactId = "ganymed-ssh2";
93         String version = "build210";
94         String classifier = null;
95         String type = "jar";
96         String path = "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar";
97
98         assertLayout( path, groupId, artifactId, version, classifier, type );
99     }
100
101     /** 
102      * [MRM-432] Oddball version spec.
103      * Example of an oddball / unusual version spec.
104      * @throws LayoutException 
105      */
106     @Test
107     public void testGoodButOddVersionSpecJavaxComm()
108         throws LayoutException
109     {
110         String groupId = "javax";
111         String artifactId = "comm";
112         String version = "3.0-u1";
113         String classifier = null;
114         String type = "jar";
115         String path = "javax/comm/3.0-u1/comm-3.0-u1.jar";
116
117         assertLayout( path, groupId, artifactId, version, classifier, type );
118     }
119
120     /**
121      * Test the ejb-client type spec.
122      * Type specs are not a 1 to 1 map to the extension. 
123      * This tests that effect.
124      * @throws LayoutException 
125      */
126     /* TODO: Re-enabled in the future. 
127     public void testGoodFooEjbClient()
128         throws LayoutException
129     {
130         String groupId = "com.foo";
131         String artifactId = "foo-client";
132         String version = "1.0";
133         String classifier = null;
134         String type = "ejb-client"; // oddball type-spec (should result in jar extension)
135         String path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
136
137         assertLayout( path, groupId, artifactId, version, classifier, type );
138     }
139     */
140
141     /** 
142      * [MRM-432] Oddball version spec.
143      * Example of an oddball / unusual version spec.
144      * @throws LayoutException 
145      */
146     @Test
147     public void testGoodButOddVersionSpecJavaxPersistence()
148         throws LayoutException
149     {
150         String groupId = "javax.persistence";
151         String artifactId = "ejb";
152         String version = "3.0-public_review";
153         String classifier = null;
154         String type = "jar";
155         String path = "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar";
156
157         /* 
158          * The version id of "public_review" can cause problems. is it part of
159          * the version spec? or the classifier?
160          * Since the path spec below shows it in the path, then it is really
161          * part of the version spec. 
162          */
163
164         assertLayout( path, groupId, artifactId, version, classifier, type );
165     }
166
167     @Test
168     public void testGoodComFooTool()
169         throws LayoutException
170     {
171         String groupId = "com.foo";
172         String artifactId = "foo-tool";
173         String version = "1.0";
174         String classifier = null;
175         String type = "jar";
176         String path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
177
178         assertLayout( path, groupId, artifactId, version, classifier, type );
179     }
180
181     @Test
182     public void testGoodCommonsLang()
183         throws LayoutException
184     {
185         String groupId = "commons-lang";
186         String artifactId = "commons-lang";
187         String version = "2.1";
188         String classifier = null;
189         String type = "jar";
190         String path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
191
192         assertLayout( path, groupId, artifactId, version, classifier, type );
193     }
194
195     /**
196      * [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
197      */
198     @Test
199     public void testGoodDashedArtifactId()
200         throws LayoutException
201     {
202         String groupId = "test.maven-arch";
203         String artifactId = "test-arch";
204         String version = "2.0.3-SNAPSHOT";
205         String classifier = null;
206         String type = "pom";
207         String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
208
209         assertLayout( path, groupId, artifactId, version, classifier, type );
210     }
211
212     /**
213      * It may seem odd, but this is a valid artifact.
214      */
215     @Test
216     public void testGoodDotNotationArtifactId()
217         throws LayoutException
218     {
219         String groupId = "com.company.department";
220         String artifactId = "com.company.department";
221         String version = "0.2";
222         String classifier = null;
223         String type = "pom";
224         String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
225
226         assertLayout( path, groupId, artifactId, version, classifier, type );
227     }
228
229     /**
230      * It may seem odd, but this is a valid artifact.
231      */
232     @Test
233     public void testGoodDotNotationSameGroupIdAndArtifactId()
234         throws LayoutException
235     {
236         String groupId = "com.company.department";
237         String artifactId = "com.company.department.project";
238         String version = "0.3";
239         String classifier = null;
240         String type = "pom";
241         String path = "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
242
243         assertLayout( path, groupId, artifactId, version, classifier, type );
244     }
245
246     /**
247      * Test the classifier, and java-source type spec.
248      * @throws LayoutException 
249      */
250     @Test
251     public void testGoodFooLibSources()
252         throws LayoutException
253     {
254         String groupId = "com.foo.lib";
255         String artifactId = "foo-lib";
256         String version = "2.1-alpha-1";
257         String classifier = "sources";
258         String type = "java-source"; // oddball type-spec (should result in jar extension)
259         String path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
260
261         assertLayout( path, groupId, artifactId, version, classifier, type );
262     }
263
264     /**
265      * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
266      * @throws LayoutException 
267      */
268     @Test
269     public void testGoodSnapshotMavenTest()
270         throws LayoutException
271     {
272         String groupId = "org.apache.archiva.test";
273         String artifactId = "redonkulous";
274         String version = "3.1-beta-1-20050831.101112-42";
275         String classifier = null;
276         String type = "jar";
277         String path = "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar";
278
279         assertLayout( path, groupId, artifactId, version, classifier, type );
280     }
281
282     /**
283      * [MRM-519] version identifiers within filename cause misidentification of version.
284      * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
285      */
286     @Test
287     public void testGoodVersionKeywordInArtifactId()
288         throws LayoutException
289     {
290         String groupId = "maven";
291         String artifactId = "maven-test-plugin";
292         String version = "1.8.2";
293         String classifier = null;
294         String type = "pom";
295         String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
296
297         assertLayout( path, groupId, artifactId, version, classifier, type );
298     }
299     
300     /**
301      * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
302      * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
303      */
304     @Test
305     public void testGoodDetectMavenTestPlugin()
306         throws LayoutException
307     {
308         String groupId = "maven";
309         String artifactId = "maven-test-plugin";
310         String version = "1.8.2";
311         String classifier = null;
312         String type = "maven-plugin";
313         String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.jar";
314
315         assertLayout( path, groupId, artifactId, version, classifier, type );
316     }
317
318     /**
319      * [MRM-562] Artifact type "maven-plugin" is not detected correctly in .toArtifactReference() methods.
320      */
321     @Test
322     public void testGoodDetectCoberturaMavenPlugin()
323         throws LayoutException
324     {
325         String groupId = "org.codehaus.mojo";
326         String artifactId = "cobertura-maven-plugin";
327         String version = "2.1";
328         String classifier = null;
329         String type = "maven-plugin";
330         String path = "org/codehaus/mojo/cobertura-maven-plugin/2.1/cobertura-maven-plugin-2.1.jar";
331
332         assertLayout( path, groupId, artifactId, version, classifier, type );
333     }
334
335     @Test
336     public void testToArtifactOnEmptyPath()
337     {
338         try
339         {
340             toArtifactReference( "" );
341             fail( "Should have failed due to empty path." );
342         }
343         catch ( LayoutException e )
344         {
345             /* expected path */
346         }
347     }
348
349     @Test
350     public void testToArtifactOnNullPath()
351     {
352         try
353         {
354             toArtifactReference( null );
355             fail( "Should have failed due to null path." );
356         }
357         catch ( LayoutException e )
358         {
359             /* expected path */
360         }
361     }
362
363     @Test
364     public void testToArtifactReferenceOnEmptyPath()
365     {
366         try
367         {
368             toArtifactReference( "" );
369             fail( "Should have failed due to empty path." );
370         }
371         catch ( LayoutException e )
372         {
373             /* expected path */
374         }
375     }
376
377     @Test
378     public void testToArtifactReferenceOnNullPath()
379     {
380         try
381         {
382             toArtifactReference( null );
383             fail( "Should have failed due to null path." );
384         }
385         catch ( LayoutException e )
386         {
387             /* expected path */
388         }
389     }
390
391     @Test
392     public void testToPathOnNullArtifactReference()
393
394     {
395         try
396         {
397             ArtifactReference reference = null;
398             toPath( reference );
399             fail( "Should have failed due to null artifact reference." );
400         }
401         catch ( IllegalArgumentException e )
402         {
403             /* expected path */
404         }
405     }
406
407     private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
408                                           String version, String classifier, String type )
409     {
410         String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + classifier
411             + ":" + type;
412
413         assertNotNull( expectedId + " - Should not be null.", actualReference );
414
415         assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
416         assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
417         if ( StringUtils.isNotBlank( classifier ) )
418         {
419             assertEquals( expectedId + " - Classifier", classifier, actualReference.getClassifier() );
420         }
421         assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
422         assertEquals( expectedId + " - Type", type, actualReference.getType() );
423     }
424
425     private void assertBadPath( String path, String reason )
426     {
427         try
428         {
429             toArtifactReference( path );
430             fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
431         }
432         catch ( LayoutException e )
433         {
434             /* expected path */
435         }
436     }
437
438     /**
439      * Perform a roundtrip through the layout routines to determine success.
440      */
441     private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
442                                String type )
443         throws LayoutException
444     {
445         ArtifactReference expectedArtifact = createArtifact( groupId, artifactId, version, classifier, type );
446
447         // --- Artifact Tests.
448
449         // Artifact to Path 
450         assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( expectedArtifact ) );
451
452         // --- Artifact Reference Tests
453
454         // Path to Artifact Reference.
455         ArtifactReference testReference = toArtifactReference( path );
456         assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
457
458         // And back again, using test Reference from previous step.
459         assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( testReference ) );
460     }
461
462     private ArtifactReference createArtifact( String groupId, String artifactId, String version, String classifier,
463                                               String type )
464     {
465         ArtifactReference artifact = new ArtifactReference();
466         artifact.setGroupId( groupId );
467         artifact.setArtifactId( artifactId );
468         artifact.setVersion( version );
469         artifact.setClassifier( classifier );
470         artifact.setType( type );
471         assertNotNull( artifact );
472         return artifact;
473     }
474
475     protected abstract ArtifactReference toArtifactReference( String path )
476         throws LayoutException;
477
478     protected abstract String toPath( ArtifactReference reference );
479 }