]> source.dussan.org Git - archiva.git/blob
f4ea7c0a77926d5a52f7e8e51c10fc4a08c1f7ee
[archiva.git] /
1 package org.apache.maven.archiva.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.codehaus.plexus.component.repository.exception.ComponentLookupException;
21
22 import java.io.File;
23 import java.net.MalformedURLException;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.HashMap;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.Map;
30
31 /**
32  * Test the default artifact discoverer.
33  *
34  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
35  * @version $Id$
36  * @todo test location of poms, checksums
37  */
38 public class DefaultArtifactDiscovererTest
39     extends AbstractArtifactDiscovererTest
40 {
41
42     protected String getLayout()
43     {
44         return "default";
45     }
46
47     protected File getRepositoryFile()
48     {
49         return getTestFile( "src/test/repository" );
50     }
51
52     public void testDefaultExcludes()
53         throws DiscovererException
54     {
55         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
56         assertNotNull( "Check artifacts not null", artifacts );
57         boolean found = false;
58         for ( Iterator i = discoverer.getExcludedPathsIterator(); i.hasNext() && !found; )
59         {
60             DiscovererPath dPath = (DiscovererPath) i.next();
61
62             String path = dPath.getPath();
63
64             boolean b = path.indexOf( ".svn" ) >= 0;
65             if ( b )
66             {
67                 found = true;
68                 assertEquals( "Check comment", "Artifact was in the specified list of exclusions", dPath.getComment() );
69             }
70         }
71         assertTrue( "Check exclusion was found", found );
72
73         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
74         {
75             Artifact a = (Artifact) i.next();
76             assertFalse( "Check not .svn", a.getFile().getPath().indexOf( ".svn" ) >= 0 );
77         }
78     }
79
80     public void testStandardExcludes()
81         throws DiscovererException
82     {
83         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
84         assertNotNull( "Check artifacts not null", artifacts );
85         boolean found = false;
86         for ( Iterator i = discoverer.getExcludedPathsIterator(); i.hasNext() && !found; )
87         {
88             DiscovererPath dPath = (DiscovererPath) i.next();
89
90             String path = dPath.getPath();
91
92             if ( "KEYS".equals( path ) )
93             {
94                 found = true;
95                 assertEquals( "Check comment", "Artifact was in the specified list of exclusions", dPath.getComment() );
96             }
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         throws DiscovererException
109     {
110         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, "javax/**", false );
111         assertNotNull( "Check artifacts not null", artifacts );
112         boolean found = false;
113         for ( Iterator i = discoverer.getExcludedPathsIterator(); i.hasNext() && !found; )
114         {
115             DiscovererPath dPath = (DiscovererPath) i.next();
116
117             String path = dPath.getPath();
118
119             if ( "javax/sql/jdbc/2.0/jdbc-2.0.jar".equals( path.replace( '\\', '/' ) ) )
120             {
121                 found = true;
122                 assertEquals( "Check comment is about blacklisting", "Artifact was in the specified list of exclusions",
123                               dPath.getComment() );
124             }
125         }
126         assertTrue( "Check exclusion was found", found );
127
128         assertFalse( "Check jdbc not included", artifacts.contains( createArtifact( "javax.sql", "jdbc", "2.0" ) ) );
129     }
130
131     public void testKickoutWithShortPath()
132         throws DiscovererException
133     {
134         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
135         assertNotNull( "Check artifacts not null", artifacts );
136         boolean found = false;
137         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
138         {
139             DiscovererPath dPath = (DiscovererPath) i.next();
140
141             String path = dPath.getPath();
142
143             if ( "invalid/invalid-1.0.jar".equals( path.replace( '\\', '/' ) ) )
144             {
145                 found = true;
146                 assertEquals( "Check reason for kickout", "Path is too short to build an artifact from",
147                               dPath.getComment() );
148
149             }
150         }
151         assertTrue( "Check kickout was found", found );
152
153         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
154         {
155             Artifact a = (Artifact) i.next();
156             assertFalse( "Check not invalid-1.0.jar", "invalid-1.0.jar".equals( a.getFile().getName() ) );
157         }
158     }
159
160     public void testKickoutWithWrongArtifactId()
161         throws DiscovererException
162     {
163         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
164         assertNotNull( "Check artifacts not null", artifacts );
165         boolean found = false;
166         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
167         {
168             DiscovererPath dPath = (DiscovererPath) i.next();
169
170             String path = dPath.getPath();
171
172             if ( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar".equals(
173                 path.replace( '\\', '/' ) ) )
174             {
175                 found = true;
176                 assertEquals( "Check reason for kickout", "Path filename does not correspond to an artifact",
177                               dPath.getComment() );
178             }
179         }
180         assertTrue( "Check kickout was found", found );
181
182         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
183         {
184             Artifact a = (Artifact) i.next();
185             assertFalse( "Check not wrong jar",
186                          "wrong-artifactId-1.0-20050611.112233-1.jar".equals( a.getFile().getName() ) );
187         }
188     }
189
190     public void testKickoutWithNoType()
191         throws DiscovererException
192     {
193         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
194         assertNotNull( "Check artifacts not null", artifacts );
195         boolean found = false;
196         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
197         {
198             DiscovererPath dPath = (DiscovererPath) i.next();
199
200             String path = dPath.getPath();
201
202             if ( "invalid/invalid/1/invalid-1".equals( path.replace( '\\', '/' ) ) )
203             {
204                 found = true;
205                 assertEquals( "Check reason for kickout", "Path filename does not have an extension",
206                               dPath.getComment() );
207             }
208         }
209         assertTrue( "Check kickout was found", found );
210
211         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
212         {
213             Artifact a = (Artifact) i.next();
214             assertFalse( "Check not 'invalid-1'", "invalid-1".equals( a.getFile().getName() ) );
215         }
216     }
217
218     public void testKickoutWithWrongVersion()
219         throws DiscovererException
220     {
221         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
222         assertNotNull( "Check artifacts not null", artifacts );
223         boolean found = false;
224         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
225         {
226             DiscovererPath dPath = (DiscovererPath) i.next();
227
228             String path = dPath.getPath();
229
230             if ( "invalid/invalid/1.0/invalid-2.0.jar".equals( path.replace( '\\', '/' ) ) )
231             {
232                 found = true;
233                 assertEquals( "Check reason for kickout", "Built artifact version does not match path version",
234                               dPath.getComment() );
235             }
236         }
237         assertTrue( "Check kickout was found", found );
238
239         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
240         {
241             Artifact a = (Artifact) i.next();
242             assertFalse( "Check not 'invalid-2.0.jar'", "invalid-2.0.jar".equals( a.getFile().getName() ) );
243         }
244     }
245
246     public void testKickoutWithLongerVersion()
247         throws DiscovererException
248     {
249         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
250         assertNotNull( "Check artifacts not null", artifacts );
251         boolean found = false;
252         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
253         {
254             DiscovererPath dPath = (DiscovererPath) i.next();
255
256             String path = dPath.getPath();
257
258             if ( "invalid/invalid/1.0/invalid-1.0b.jar".equals( path.replace( '\\', '/' ) ) )
259             {
260                 found = true;
261                 assertEquals( "Check reason for kickout", "Path version does not corresspond to an artifact version",
262                               dPath.getComment() );
263             }
264         }
265         assertTrue( "Check kickout was found", found );
266
267         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
268         {
269             Artifact a = (Artifact) i.next();
270             assertFalse( "Check not 'invalid-1.0b.jar'", "invalid-1.0b.jar".equals( a.getFile().getName() ) );
271         }
272     }
273
274     public void testKickoutWithWrongSnapshotVersion()
275         throws DiscovererException
276     {
277         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
278         assertNotNull( "Check artifacts not null", artifacts );
279         boolean found = false;
280         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
281         {
282             DiscovererPath dPath = (DiscovererPath) i.next();
283
284             String path = dPath.getPath();
285
286             if ( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar".equals( path.replace( '\\', '/' ) ) )
287             {
288                 found = true;
289                 assertEquals( "Check reason for kickout",
290                               "Failed to create a snapshot artifact: invalid:invalid:jar:1.0:runtime",
291                               dPath.getComment() );
292             }
293         }
294         assertTrue( "Check kickout was found", found );
295
296         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
297         {
298             Artifact a = (Artifact) i.next();
299             assertFalse( "Check not 'invalid-1.0.jar'", "invalid-1.0.jar".equals( a.getFile().getName() ) );
300         }
301     }
302
303     public void testKickoutWithSnapshotBaseVersion()
304         throws DiscovererException
305     {
306         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
307         assertNotNull( "Check artifacts not null", artifacts );
308         boolean found = false;
309         for ( Iterator i = discoverer.getKickedOutPathsIterator(); i.hasNext() && !found; )
310         {
311             DiscovererPath dPath = (DiscovererPath) i.next();
312
313             String path = dPath.getPath();
314
315             if ( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar".equals(
316                 path.replace( '\\', '/' ) ) )
317             {
318                 found = true;
319                 assertEquals( "Check reason for kickout",
320                               "Built snapshot artifact base version does not match path version: invalid:invalid:jar:1.0-SNAPSHOT:runtime; should have been version: 1.0-20050611.123456-1",
321                               dPath.getComment() );
322             }
323         }
324         assertTrue( "Check kickout was found", found );
325
326         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
327         {
328             Artifact a = (Artifact) i.next();
329             assertFalse( "Check not 'invalid-1.0-20050611-123456-1.jar'",
330                          "invalid-1.0-20050611.123456-1.jar".equals( a.getFile().getName() ) );
331         }
332     }
333
334     public void testInclusion()
335         throws DiscovererException
336     {
337         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
338         assertNotNull( "Check artifacts not null", artifacts );
339
340         assertTrue( "Check normal included",
341                     artifacts.contains( createArtifact( "org.apache.maven", "testing", "1.0" ) ) );
342     }
343
344     public void testArtifactWithClassifier()
345         throws DiscovererException
346     {
347         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
348         assertNotNull( "Check artifacts not null", artifacts );
349
350         assertTrue( "Check normal included",
351                     artifacts.contains( createArtifact( "org.apache.maven", "some-ejb", "1.0", "jar", "client" ) ) );
352     }
353
354     public void testJavaSourcesInclusion()
355         throws DiscovererException
356     {
357         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
358         assertNotNull( "Check artifacts not null", artifacts );
359
360         assertTrue( "Check normal included", artifacts.contains(
361             createArtifact( "org.apache.maven", "testing", "1.0", "java-source", "sources" ) ) );
362     }
363
364     public void testDistributionInclusion()
365         throws DiscovererException
366     {
367         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
368         assertNotNull( "Check artifacts not null", artifacts );
369
370         assertTrue( "Check zip included",
371                     artifacts.contains( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-zip" ) ) );
372
373         assertTrue( "Check tar.gz included",
374                     artifacts.contains( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-tgz" ) ) );
375     }
376
377     public void testSnapshotInclusion()
378         throws DiscovererException
379     {
380         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
381         assertNotNull( "Check artifacts not null", artifacts );
382
383         assertTrue( "Check normal included", artifacts.contains( createArtifact( "javax.sql", "jdbc", "2.0" ) ) );
384         assertTrue( "Check snapshot included",
385                     artifacts.contains( createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1" ) ) );
386     }
387
388     public void testSnapshotInclusionWithClassifier()
389         throws DiscovererException
390     {
391         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
392         assertNotNull( "Check artifacts not null", artifacts );
393
394         assertTrue( "Check snapshot included", artifacts.contains(
395             createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", "javadoc" ) ) );
396     }
397
398     public void testSnapshotExclusion()
399         throws DiscovererException
400     {
401         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
402         assertNotNull( "Check artifacts not null", artifacts );
403
404         assertTrue( "Check normal included", artifacts.contains( createArtifact( "javax.sql", "jdbc", "2.0" ) ) );
405         assertFalse( "Check snapshot included",
406                      artifacts.contains( createArtifact( "org.apache.maven", "test", "1.0-SNAPSHOT" ) ) );
407     }
408
409     public void testFileSet()
410         throws DiscovererException
411     {
412         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
413         assertNotNull( "Check artifacts not null", artifacts );
414
415         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
416         {
417             Artifact artifact = (Artifact) i.next();
418             assertNotNull( "Check file is set", artifact.getFile() );
419         }
420     }
421
422     public void testRepositorySet()
423         throws MalformedURLException, DiscovererException
424     {
425         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
426         assertNotNull( "Check artifacts not null", artifacts );
427
428         String url = repository.getUrl();
429         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
430         {
431             Artifact artifact = (Artifact) i.next();
432             assertNotNull( "Check repository set", artifact.getRepository() );
433             assertEquals( "Check repository url is correct", url, artifact.getRepository().getUrl() );
434         }
435     }
436
437     public void testStandalonePoms()
438         throws DiscovererException
439     {
440         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, false );
441
442         // cull down to actual artifacts (only standalone poms will have type = pom)
443         Map keyedArtifacts = new HashMap();
444         for ( Iterator i = artifacts.iterator(); i.hasNext(); )
445         {
446             Artifact a = (Artifact) i.next();
447             String key = a.getGroupId() + ":" + a.getArtifactId() + ":" + a.getVersion();
448             if ( !"pom".equals( a.getType() ) || !keyedArtifacts.containsKey( key ) )
449             {
450                 keyedArtifacts.put( key, a );
451             }
452         }
453
454         List models = new ArrayList();
455
456         for ( Iterator i = keyedArtifacts.values().iterator(); i.hasNext(); )
457         {
458             Artifact a = (Artifact) i.next();
459
460             if ( "pom".equals( a.getType() ) )
461             {
462                 models.add( a );
463             }
464         }
465
466         assertEquals( 4, models.size() );
467
468         // Define order we expect
469         Collections.sort( models );
470
471         Iterator itr = models.iterator();
472         Artifact model = (Artifact) itr.next();
473         assertEquals( "org.apache.maven", model.getGroupId() );
474         assertEquals( "B", model.getArtifactId() );
475         assertEquals( "1.0", model.getVersion() );
476         model = (Artifact) itr.next();
477         assertEquals( "org.apache.maven", model.getGroupId() );
478         assertEquals( "B", model.getArtifactId() );
479         assertEquals( "2.0", model.getVersion() );
480         model = (Artifact) itr.next();
481         assertEquals( "org.apache.maven", model.getGroupId() );
482         assertEquals( "discovery", model.getArtifactId() );
483         assertEquals( "1.0", model.getVersion() );
484         model = (Artifact) itr.next();
485         assertEquals( "org.apache.testgroup", model.getGroupId() );
486         assertEquals( "discovery", model.getArtifactId() );
487         assertEquals( "1.0", model.getVersion() );
488     }
489
490     public void testShortPath()
491         throws ComponentLookupException
492     {
493         try
494         {
495             discoverer.buildArtifact( "invalid/invalid-1.0.jar" );
496
497             fail( "Artifact should be null for short paths" );
498         }
499         catch ( DiscovererException e )
500         {
501             // excellent
502         }
503     }
504
505     public void testWrongArtifactId()
506         throws ComponentLookupException
507     {
508
509         try
510         {
511             discoverer.buildArtifact( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar" );
512
513             fail( "Artifact should be null for wrong ArtifactId" );
514         }
515         catch ( DiscovererException e )
516         {
517             // excellent
518         }
519     }
520
521     public void testNoType()
522         throws ComponentLookupException
523     {
524         try
525         {
526             discoverer.buildArtifact( "invalid/invalid/1/invalid-1" );
527
528             fail( "Artifact should be null for no type" );
529         }
530         catch ( DiscovererException e )
531         {
532             // excellent
533         }
534     }
535
536     public void testWrongVersion()
537         throws ComponentLookupException
538     {
539         try
540         {
541             discoverer.buildArtifact( "invalid/invalid/1.0/invalid-2.0.jar" );
542
543             fail( "Artifact should be null for wrong version" );
544         }
545         catch ( DiscovererException e )
546         {
547             // excellent
548         }
549     }
550
551     public void testLongVersion()
552         throws ComponentLookupException
553     {
554         try
555         {
556             discoverer.buildArtifact( "invalid/invalid/1.0/invalid-1.0b.jar" );
557
558             fail( "Artifact should be null for long version" );
559         }
560         catch ( DiscovererException e )
561         {
562             // excellent
563         }
564     }
565
566     public void testWrongSnapshotVersion()
567         throws ComponentLookupException
568     {
569         try
570         {
571             discoverer.buildArtifact( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar" );
572
573             fail( "Artifact should be null for wrong snapshot version" );
574         }
575         catch ( DiscovererException e )
576         {
577             // excellent
578         }
579     }
580
581     public void testSnapshotBaseVersion()
582         throws ComponentLookupException
583     {
584         try
585         {
586             discoverer.buildArtifact( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
587
588             fail( "Artifact should be null for snapshot base version" );
589         }
590         catch ( DiscovererException e )
591         {
592             // excellent
593         }
594     }
595
596     public void testPathWithClassifier()
597         throws ComponentLookupException, DiscovererException
598     {
599         String testPath = "org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar";
600
601         Artifact artifact = discoverer.buildArtifact( testPath );
602
603         assertEquals( createArtifact( "org.apache.maven", "some-ejb", "1.0", "jar", "client" ), artifact );
604     }
605
606     public void testWithJavaSourceInclusion()
607         throws ComponentLookupException, DiscovererException
608     {
609         String testPath = "org/apache/maven/testing/1.0/testing-1.0-sources.jar";
610
611         Artifact artifact = discoverer.buildArtifact( testPath );
612
613         assertEquals( createArtifact( "org.apache.maven", "testing", "1.0", "java-source", "sources" ), artifact );
614     }
615
616     public void testDistributionArtifacts()
617         throws ComponentLookupException, DiscovererException
618     {
619         String testPath = "org/apache/maven/testing/1.0/testing-1.0.tar.gz";
620
621         Artifact artifact = discoverer.buildArtifact( testPath );
622
623         assertEquals( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-tgz" ), artifact );
624
625         testPath = "org/apache/maven/testing/1.0/testing-1.0.zip";
626
627         artifact = discoverer.buildArtifact( testPath );
628
629         assertEquals( createArtifact( "org.apache.maven", "testing", "1.0", "distribution-zip" ), artifact );
630     }
631
632     public void testSnapshot()
633         throws ComponentLookupException, DiscovererException
634     {
635         String testPath = "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.jar";
636
637         Artifact artifact = discoverer.buildArtifact( testPath );
638
639         assertEquals( createArtifact( "org.apache.maven", "test", "1.0-SNAPSHOT" ), artifact );
640
641         testPath = "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar";
642
643         artifact = discoverer.buildArtifact( testPath );
644
645         assertEquals( createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1" ), artifact );
646     }
647
648     public void testNormal()
649         throws ComponentLookupException, DiscovererException
650     {
651         String testPath = "javax/sql/jdbc/2.0/jdbc-2.0.jar";
652
653         Artifact artifact = discoverer.buildArtifact( testPath );
654
655         assertEquals( createArtifact( "javax.sql", "jdbc", "2.0" ), artifact );
656     }
657
658     public void testSnapshotWithClassifier()
659         throws ComponentLookupException, DiscovererException
660     {
661         String testPath = "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar";
662
663         Artifact artifact = discoverer.buildArtifact( testPath );
664
665         assertEquals( createArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", "javadoc" ),
666                       artifact );
667     }
668 }