]> source.dussan.org Git - archiva.git/blob
ea37a7b239871df09c1361816237df129e3c620c
[archiva.git] /
1 package org.apache.maven.repository.discovery;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.apache.maven.artifact.Artifact;
20 import org.apache.maven.artifact.factory.ArtifactFactory;
21 import org.apache.maven.artifact.repository.ArtifactRepository;
22 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
23 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
24 import org.apache.maven.model.Model;
25 import org.codehaus.plexus.PlexusTestCase;
26 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
27
28 import java.io.File;
29 import java.net.MalformedURLException;
30 import java.util.Collections;
31 import java.util.Comparator;
32 import java.util.Iterator;
33 import java.util.List;
34
35 /**
36  * Test the default artifact discoverer.
37  *
38  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
39  * @version $Id$
40  * @todo test location of poms, checksums
41  */
42 public class DefaultArtifactDiscovererTest
43     extends PlexusTestCase
44 {
45     private ArtifactDiscoverer discoverer;
46
47     private ArtifactFactory factory;
48
49     private ArtifactRepository repository;
50
51     protected void setUp()
52         throws Exception
53     {
54         super.setUp();
55
56         discoverer = (ArtifactDiscoverer) lookup( ArtifactDiscoverer.ROLE, "default" );
57
58         factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
59
60         File basedir = getTestFile( "src/test/repository" );
61         ArtifactRepositoryFactory factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
62
63         ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
64         repository = factory.createArtifactRepository( "discoveryRepo", "file://" + basedir, layout, null, null );
65     }
66
67     public void testDefaultExcludes()
68     {
69         List artifacts = discoverer.discoverArtifacts( repository, null, false );
70         assertNotNull( "Check artifacts not null", artifacts );
71         boolean found = false;
72         for ( Iterator i = discoverer.getExcludedPathsIterator(); i.hasNext() && !found; )
73         {
74             String path = (String) i.next();
75
76             found = path.indexOf( ".svn" ) >= 0;
77         }
78         assertTrue( "Check exclusion was found", found );
79
80         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
81         {
82             Artifact a = (Artifact) i.next();
83             assertFalse( "Check not .svn", a.getFile().getPath().indexOf( ".svn" ) >= 0 );
84         }
85     }
86
87     public void testStandardExcludes()
88     {
89         List artifacts = discoverer.discoverArtifacts( repository, null, false );
90         assertNotNull( "Check artifacts not null", artifacts );
91         boolean found = false;
92         for ( Iterator i = discoverer.getExcludedPathsIterator(); i.hasNext() && !found; )
93         {
94             String path = (String) i.next();
95
96             found = "KEYS".equals( path );
97         }
98         assertTrue( "Check exclusion was found", found );
99
100         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
101         {
102             Artifact a = (Artifact) i.next();
103             assertFalse( "Check not KEYS", "KEYS".equals( a.getFile().getName() ) );
104         }
105     }
106
107     public void testBlacklistedExclude()
108     {
109         List artifacts = discoverer.discoverArtifacts( repository, "javax/**", false );
110         assertNotNull( "Check artifacts not null", artifacts );
111         boolean found = false;
112         for ( Iterator i = discoverer.getExcludedPathsIterator(); i.hasNext() && !found; )
113         {
114             String path = (String) i.next();
115
116             found = "javax/sql/jdbc/2.0/jdbc-2.0.jar".equals( path.replace( '\\', '/' ) );
117         }
118         assertTrue( "Check exclusion was found", found );
119
120         assertFalse( "Check jdbc not included", artifacts.contains( createArtifact( "javax.sql", "jdbc", "2.0" ) ) );
121     }
122
123     public void testKickoutWithShortPath()
124     {
125         List artifacts = discoverer.discoverArtifacts( repository, null, false );
126         assertNotNull( "Check artifacts not null", artifacts );
127         boolean found = false;
128         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
129         {
130             String path = (String) i.next();
131
132             found = "invalid/invalid-1.0.jar".equals( path.replace( '\\', '/' ) );
133         }
134         assertTrue( "Check kickout was found", found );
135
136         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
137         {
138             Artifact a = (Artifact) i.next();
139             assertFalse( "Check not invalid-1.0.jar", "invalid-1.0.jar".equals( a.getFile().getName() ) );
140         }
141     }
142
143     public void testKickoutWithWrongArtifactId()
144     {
145         List artifacts = discoverer.discoverArtifacts( repository, null, false );
146         assertNotNull( "Check artifacts not null", artifacts );
147         boolean found = false;
148         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
149         {
150             String path = (String) i.next();
151
152             found = "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar".equals(
153                 path.replace( '\\', '/' ) );
154         }
155         assertTrue( "Check kickout was found", found );
156
157         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
158         {
159             Artifact a = (Artifact) i.next();
160             assertFalse( "Check not wrong jar",
161                          "wrong-artifactId-1.0-20050611.112233-1.jar".equals( a.getFile().getName() ) );
162         }
163     }
164
165     public void testKickoutWithNoType()
166     {
167         List artifacts = discoverer.discoverArtifacts( repository, null, false );
168         assertNotNull( "Check artifacts not null", artifacts );
169         boolean found = false;
170         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
171         {
172             String path = (String) i.next();
173
174             found = "invalid/invalid/1/invalid-1".equals( path.replace( '\\', '/' ) );
175         }
176         assertTrue( "Check kickout was found", found );
177
178         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
179         {
180             Artifact a = (Artifact) i.next();
181             assertFalse( "Check not 'invalid-1'", "invalid-1".equals( a.getFile().getName() ) );
182         }
183     }
184
185     public void testKickoutWithWrongVersion()
186     {
187         List artifacts = discoverer.discoverArtifacts( repository, null, false );
188         assertNotNull( "Check artifacts not null", artifacts );
189         boolean found = false;
190         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
191         {
192             String path = (String) i.next();
193
194             found = "invalid/invalid/1.0/invalid-2.0.jar".equals( path.replace( '\\', '/' ) );
195         }
196         assertTrue( "Check kickout was found", found );
197
198         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
199         {
200             Artifact a = (Artifact) i.next();
201             assertFalse( "Check not 'invalid-2.0.jar'", "invalid-2.0.jar".equals( a.getFile().getName() ) );
202         }
203     }
204
205     public void testKickoutWithLongerVersion()
206     {
207         List artifacts = discoverer.discoverArtifacts( repository, null, false );
208         assertNotNull( "Check artifacts not null", artifacts );
209         boolean found = false;
210         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
211         {
212             String path = (String) i.next();
213
214             found = "invalid/invalid/1.0/invalid-1.0b.jar".equals( path.replace( '\\', '/' ) );
215         }
216         assertTrue( "Check kickout was found", found );
217
218         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
219         {
220             Artifact a = (Artifact) i.next();
221             assertFalse( "Check not 'invalid-1.0b.jar'", "invalid-1.0b.jar".equals( a.getFile().getName() ) );
222         }
223     }
224
225     public void testKickoutWithWrongSnapshotVersion()
226     {
227         List artifacts = discoverer.discoverArtifacts( repository, null, false );
228         assertNotNull( "Check artifacts not null", artifacts );
229         boolean found = false;
230         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
231         {
232             String path = (String) i.next();
233
234             found = "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar".equals( path.replace( '\\', '/' ) );
235         }
236         assertTrue( "Check kickout was found", found );
237
238         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
239         {
240             Artifact a = (Artifact) i.next();
241             assertFalse( "Check not 'invalid-1.0.jar'", "invalid-1.0.jar".equals( a.getFile().getName() ) );
242         }
243     }
244
245     public void testKickoutWithSnapshotBaseVersion()
246     {
247         List artifacts = discoverer.discoverArtifacts( repository, null, false );
248         assertNotNull( "Check artifacts not null", artifacts );
249         boolean found = false;
250         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
251         {
252             String path = (String) i.next();
253
254             found = "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar".equals(
255                 path.replace( '\\', '/' ) );
256         }
257         assertTrue( "Check kickout was found", found );
258
259         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
260         {
261             Artifact a = (Artifact) i.next();
262             assertFalse( "Check not 'invalid-1.0-20050611-123456-1.jar'",
263                          "invalid-1.0-20050611.123456-1.jar".equals( a.getFile().getName() ) );
264         }
265     }
266
267     public void testInclusion()
268     {
269         List artifacts = discoverer.discoverArtifacts( repository, null, true );
270         assertNotNull( "Check artifacts not null", artifacts );
271
272         assertTrue( "Check normal included",
273                     artifacts.contains( createArtifact( "org.apache.maven", "testing", "1.0" ) ) );
274     }
275
276     public void testArtifactWithClassifier()
277     {
278         List artifacts = discoverer.discoverArtifacts( repository, null, true );
279         assertNotNull( "Check artifacts not null", artifacts );
280
281         assertTrue( "Check normal included",
282                     artifacts.contains( createArtifact( "org.apache.maven", "some-ejb", "1.0", "jar", "client" ) ) );
283     }
284
285     public void testJavaSourcesInclusion()
286     {
287         List artifacts = discoverer.discoverArtifacts( repository, null, true );
288         assertNotNull( "Check artifacts not null", artifacts );
289
290         assertTrue( "Check normal included", artifacts.contains(
291             createArtifact( "org.apache.maven", "testing", "1.0", "java-source", "sources" ) ) );
292     }
293
294     public void testDistributionInclusion()
295     {
296         List artifacts = discoverer.discoverArtifacts( repository, null, true );
297         assertNotNull( "Check artifacts not null", artifacts );
298
299         assertTrue( "Check zip included",
300                     artifacts.contains( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-zip" ) ) );
301
302         assertTrue( "Check tar.gz included",
303                     artifacts.contains( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-tgz" ) ) );
304     }
305
306     public void testSnapshotInclusion()
307     {
308         List artifacts = discoverer.discoverArtifacts( repository, null, true );
309         assertNotNull( "Check artifacts not null", artifacts );
310
311         assertTrue( "Check normal included", artifacts.contains( createArtifact( "javax.sql", "jdbc", "2.0" ) ) );
312         assertTrue( "Check snapshot included",
313                     artifacts.contains( createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1" ) ) );
314     }
315
316     public void testSnapshotInclusionWithClassifier()
317     {
318         List artifacts = discoverer.discoverArtifacts( repository, null, true );
319         assertNotNull( "Check artifacts not null", artifacts );
320
321         assertTrue( "Check snapshot included", artifacts.contains(
322             createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", "javadoc" ) ) );
323     }
324
325     public void testSnapshotExclusion()
326     {
327         List artifacts = discoverer.discoverArtifacts( repository, null, false );
328         assertNotNull( "Check artifacts not null", artifacts );
329
330         assertTrue( "Check normal included", artifacts.contains( createArtifact( "javax.sql", "jdbc", "2.0" ) ) );
331         assertFalse( "Check snapshot included",
332                      artifacts.contains( createArtifact( "org.apache.maven", "test", "1.0-SNAPSHOT" ) ) );
333     }
334
335     public void testFileSet()
336     {
337         List artifacts = discoverer.discoverArtifacts( repository, null, true );
338         assertNotNull( "Check artifacts not null", artifacts );
339
340         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
341         {
342             Artifact artifact = (Artifact) i.next();
343             assertNotNull( "Check file is set", artifact.getFile() );
344         }
345     }
346
347     public void testRepositorySet()
348         throws MalformedURLException
349     {
350         List artifacts = discoverer.discoverArtifacts( repository, null, true );
351         assertNotNull( "Check artifacts not null", artifacts );
352
353         String url = repository.getUrl();
354         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
355         {
356             Artifact artifact = (Artifact) i.next();
357             assertNotNull( "Check repository set", artifact.getRepository() );
358             assertEquals( "Check repository url is correct", url, artifact.getRepository().getUrl() );
359         }
360     }
361
362     public void testStandalonePoms()
363     {
364         List models = discoverer.discoverStandalonePoms( repository, null, false );
365         assertEquals( 4, models.size() );
366
367         // Define order we expect
368         Collections.sort( models, new Comparator()
369         {
370             public int compare( Object o1, Object o2 )
371             {
372                 Model m1 = (Model) o1;
373                 Model m2 = (Model) o2;
374
375                 int result = m1.getGroupId().compareTo( m2.getGroupId() );
376                 if ( result == 0 )
377                 {
378                     result = m1.getArtifactId().compareTo( m2.getArtifactId() );
379                 }
380                 if ( result == 0 )
381                 {
382                     result = m1.getVersion().compareTo( m2.getVersion() );
383                 }
384                 return result;
385             }
386         } );
387
388         Iterator itr = models.iterator();
389         Model model = (Model) itr.next();
390         assertEquals( "org.apache.maven", model.getGroupId() );
391         assertEquals( "B", model.getArtifactId() );
392         assertEquals( "1.0", model.getVersion() );
393         model = (Model) itr.next();
394         assertEquals( "org.apache.maven", model.getGroupId() );
395         assertEquals( "B", model.getArtifactId() );
396         assertEquals( "2.0", model.getVersion() );
397         model = (Model) itr.next();
398         assertEquals( "org.apache.maven", model.getGroupId() );
399         assertEquals( "discovery", model.getArtifactId() );
400         assertEquals( "1.0", model.getVersion() );
401         model = (Model) itr.next();
402         assertEquals( "org.apache.testgroup", model.getGroupId() );
403         assertEquals( "discovery", model.getArtifactId() );
404         assertEquals( "1.0", model.getVersion() );
405     }
406
407     public void testShortPath()
408         throws ComponentLookupException
409     {
410         String testPath = "invalid/invalid-1.0.jar";
411
412         Artifact artifact = getArtifactFromPath( testPath );
413
414         assertNull( "Artifact should be null for short paths", artifact );
415     }
416
417     public void testWrongArtifactId()
418         throws ComponentLookupException
419     {
420         String testPath = "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar";
421
422         Artifact artifact = getArtifactFromPath( testPath );
423
424         assertNull( "Artifact should be null for wrong ArtifactId", artifact );
425     }
426
427     public void testNoType()
428         throws ComponentLookupException
429     {
430         String testPath = "invalid/invalid/1/invalid-1";
431
432         Artifact artifact = getArtifactFromPath( testPath );
433
434         assertNull( "Artifact should be null for no type", artifact );
435     }
436
437     public void testWrongVersion()
438         throws ComponentLookupException
439     {
440         String testPath = "invalid/invalid/1.0/invalid-2.0.jar";
441
442         Artifact artifact = getArtifactFromPath( testPath );
443
444         assertNull( "Artifact should be null for wrong version", artifact );
445     }
446
447     public void testLongVersion()
448         throws ComponentLookupException
449     {
450         String testPath = "invalid/invalid/1.0/invalid-1.0b.jar";
451
452         Artifact artifact = getArtifactFromPath( testPath );
453
454         assertNull( "Artifact should be null for long version", artifact );
455     }
456
457     public void testWrongSnapshotVersion()
458         throws ComponentLookupException
459     {
460         String testPath = "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar";
461
462         Artifact artifact = getArtifactFromPath( testPath );
463
464         assertNull( "Artifact should be null for wrong snapshot version", artifact );
465     }
466
467     public void testSnapshotBaseVersion()
468         throws ComponentLookupException
469     {
470         String testPath = "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar";
471
472         Artifact artifact = getArtifactFromPath( testPath );
473
474         assertNull( "Artifact should be null for snapshot base version", artifact );
475     }
476
477     public void testPathWithClassifier()
478         throws ComponentLookupException
479     {
480         String testPath = "org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar";
481
482         Artifact artifact = getArtifactFromPath( testPath );
483
484         assertNotNull( "Artifact path with classifier error", artifact );
485
486         assertEquals( createArtifact( "org.apache.maven", "some-ejb", "1.0", "jar", "client" ), artifact );
487     }
488
489     public void testWithJavaSourceInclusion()
490         throws ComponentLookupException
491     {
492         String testPath = "org/apache/maven/testing/1.0/testing-1.0-sources.jar";
493
494         Artifact artifact = getArtifactFromPath( testPath );
495
496         assertNotNull( "Artifact path with java source inclusion error", artifact );
497
498         assertEquals( createArtifact( "org.apache.maven", "testing", "1.0", "java-source", "sources" ), artifact );
499     }
500
501     public void testDistributionArtifacts()
502         throws ComponentLookupException
503     {
504         String testPath = "org/apache/maven/testing/1.0/testing-1.0.tar.gz";
505
506         Artifact artifact = getArtifactFromPath( testPath );
507
508         assertNotNull( "tar.gz distribution artifact error", artifact );
509
510         assertEquals( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-tgz" ), artifact );
511
512         testPath = "org/apache/maven/testing/1.0/testing-1.0.zip";
513
514         artifact = getArtifactFromPath( testPath );
515
516         assertNotNull( "zip distribution artifact error", artifact );
517
518         assertEquals( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-zip" ), artifact );
519     }
520
521     public void testSnapshot()
522         throws ComponentLookupException
523     {
524         String testPath = "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.jar";
525
526         Artifact artifact = getArtifactFromPath( testPath );
527
528         assertNotNull( "Artifact path with invalid snapshot error", artifact );
529
530         assertEquals( createArtifact( "org.apache.maven", "test", "1.0-SNAPSHOT" ), artifact );
531
532         testPath = "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar";
533
534         artifact = getArtifactFromPath( testPath );
535
536         assertNotNull( "Artifact path with snapshot error", artifact );
537
538         assertEquals( createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1" ), artifact );
539     }
540
541     public void testNormal()
542         throws ComponentLookupException
543     {
544         String testPath = "javax/sql/jdbc/2.0/jdbc-2.0.jar";
545
546         Artifact artifact = getArtifactFromPath( testPath );
547
548         assertNotNull( "Normal artifact path error", artifact );
549
550         assertEquals( createArtifact( "javax.sql", "jdbc", "2.0" ), artifact );
551     }
552
553     public void testSnapshotWithClassifier()
554         throws ComponentLookupException
555     {
556         String testPath = "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar";
557
558         Artifact artifact = getArtifactFromPath( testPath );
559
560         assertNotNull( "Artifact path with snapshot and classifier error", artifact );
561
562         assertEquals( createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", "javadoc" ),
563                       artifact );
564     }
565
566     private Artifact getArtifactFromPath( String path )
567     {
568         return discoverer.buildArtifact( path );
569     }
570
571     private Artifact createArtifact( String groupId, String artifactId, String version )
572     {
573         return factory.createArtifact( groupId, artifactId, version, null, "jar" );
574     }
575
576     private Artifact createArtifact( String groupId, String artifactId, String version, String type )
577     {
578         return factory.createArtifact( groupId, artifactId, version, null, type );
579     }
580
581     private Artifact createArtifact( String groupId, String artifactId, String version, String type, String classifier )
582     {
583         return factory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier );
584     }
585
586 }