]> source.dussan.org Git - archiva.git/blob
0b4919f9a33be8fc8d318f986eb253d30c58e47f
[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
27 import java.io.File;
28 import java.net.MalformedURLException;
29 import java.util.Collections;
30 import java.util.Comparator;
31 import java.util.Iterator;
32 import java.util.List;
33
34 /**
35  * Test the default artifact discoverer.
36  *
37  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
38  * @version $Id$
39  * @todo test location of poms, checksums
40  */
41 public class DefaultArtifactDiscovererTest
42     extends PlexusTestCase
43 {
44     private ArtifactDiscoverer discoverer;
45
46     private ArtifactFactory factory;
47
48     private ArtifactRepository repository;
49
50     protected void setUp()
51         throws Exception
52     {
53         super.setUp();
54
55         discoverer = (ArtifactDiscoverer) lookup( ArtifactDiscoverer.ROLE,
56                                                   "org.apache.maven.repository.discovery.DefaultArtifactDiscoverer" );
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     private Artifact createArtifact( String groupId, String artifactId, String version )
408     {
409         return factory.createArtifact( groupId, artifactId, version, null, "jar" );
410     }
411
412     private Artifact createArtifact( String groupId, String artifactId, String version, String type )
413     {
414         return factory.createArtifact( groupId, artifactId, version, null, type );
415     }
416
417     private Artifact createArtifact( String groupId, String artifactId, String version, String type, String classifier )
418     {
419         return factory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier );
420     }
421
422 }