]> source.dussan.org Git - archiva.git/blob
27111ac1eae9419b6c8c42c727097840a712eb41
[archiva.git] /
1 package org.apache.maven.archiva.consumers;
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.commons.lang.StringUtils;
23 import org.apache.maven.archiva.common.utils.BaseFile;
24 import org.apache.maven.archiva.model.ArchivaRepository;
25 import org.apache.maven.artifact.Artifact;
26
27 import java.util.ArrayList;
28 import java.util.Collection;
29 import java.util.Iterator;
30 import java.util.List;
31
32 /**
33  * GenericArtifactConsumerTest 
34  *
35  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
36  * @version $Id$
37  */
38 public class GenericArtifactConsumerTest
39     extends AbstractGenericConsumerTestCase
40 {
41     private MockArtifactConsumer getMockArtifactConsumer()
42         throws Exception
43     {
44         return (MockArtifactConsumer) consumerFactory.createConsumer( "mock-artifact" );
45     }
46
47     public void testScanLegacy()
48         throws Exception
49     {
50         ArchivaRepository repository = getLegacyRepository();
51         List consumers = new ArrayList();
52
53         MockArtifactConsumer mockConsumer = getMockArtifactConsumer();
54         mockConsumer.init( repository );
55
56         consumers.add( mockConsumer );
57
58         List files = getLegacyLayoutArtifactPaths();
59         for ( Iterator it = files.iterator(); it.hasNext(); )
60         {
61             String path = (String) it.next();
62             try
63             {
64                 mockConsumer.processFile( new BaseFile( repository.getRepositoryURL().getPath(), path ) );
65             }
66             catch ( ConsumerException e )
67             {
68                 mockConsumer.getProblemsTracker().addProblem( e );
69             }
70         }
71
72         assertNotNull( consumers );
73
74         FileProblemsTracker tracker = mockConsumer.getProblemsTracker();
75
76         assertTracker( tracker, 16 );
77
78         assertHasFailureMessage( "Path does not match a legacy repository path for an artifact",
79                                  "invalid/invalid-1.0.jar", tracker );
80         assertHasFailureMessage( "Path filename version is empty", "invalid/jars/invalid.jar", tracker );
81         assertHasFailureMessage( "Path does not match a legacy repository path for an artifact",
82                                  "invalid/jars/1.0/invalid-1.0.jar", tracker );
83
84         assertEquals( 10, mockConsumer.getArtifactMap().size() );
85     }
86
87     public void testScanDefault()
88         throws Exception
89     {
90         ArchivaRepository repository = getDefaultRepository();
91         List consumers = new ArrayList();
92
93         MockArtifactConsumer mockConsumer = getMockArtifactConsumer();
94         mockConsumer.init( repository );
95
96         consumers.add( mockConsumer );
97
98         List files = getDefaultLayoutArtifactPaths();
99         for ( Iterator it = files.iterator(); it.hasNext(); )
100         {
101             String path = (String) it.next();
102             try
103             {
104                 mockConsumer.processFile( new BaseFile( repository.getRepositoryURL().getPath(), path ) );
105             }
106             catch ( ConsumerException e )
107             {
108                 mockConsumer.getProblemsTracker().addProblem( e );
109             }
110         }
111
112         // Test gathered information from Mock consumer.
113
114         assertNotNull( consumers );
115
116         FileProblemsTracker tracker = mockConsumer.getProblemsTracker();
117
118         assertTracker( tracker, 21 );
119
120         assertHasFailureMessage( "Failed to create a snapshot artifact: invalid:invalid:jar:1.0:runtime",
121                                  "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", tracker );
122         assertHasFailureMessage( "Path is too short to build an artifact from.", "invalid/invalid-1.0.jar", tracker );
123         assertHasFailureMessage( "Built artifact version does not match path version",
124                                  "invalid/invalid/1.0/invalid-2.0.jar", tracker );
125
126         assertEquals( 25, mockConsumer.getArtifactMap().size() );
127
128         // Test for known include artifacts
129
130         Collection artifacts = mockConsumer.getArtifactMap().values();
131         assertHasArtifact( "org.apache.maven", "testing", "1.0", "jar", null, artifacts );
132         assertHasArtifact( "org.apache.maven", "some-ejb", "1.0", "jar", "client", artifacts );
133         assertHasArtifact( "org.apache.maven", "testing", "1.0", "java-source", "sources", artifacts );
134         assertHasArtifact( "org.apache.maven", "testing", "1.0", "java-source", "test-sources", artifacts );
135         assertHasArtifact( "org.apache.maven", "testing", "1.0", "distribution-zip", null, artifacts );
136         assertHasArtifact( "org.apache.maven", "testing", "1.0", "distribution-tgz", null, artifacts );
137         assertHasArtifact( "javax.sql", "jdbc", "2.0", "jar", null, artifacts );
138         assertHasArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", null, artifacts );
139         assertHasArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", "javadoc", artifacts );
140
141         // Test for known excluded files and dirs to validate exclusions.
142
143         Iterator it = mockConsumer.getArtifactMap().values().iterator();
144         while ( it.hasNext() )
145         {
146             Artifact a = (Artifact) it.next();
147             assertTrue( "Artifact " + a + " should have it's .getFile() set.", a.getFile() != null );
148             assertTrue( "Artifact " + a + " should have it's .getRepository() set.", a.getRepository() != null );
149             assertTrue( "Artifact " + a + " should have non-null repository url.", a.getRepository().getUrl() != null );
150             assertFalse( "Check not CVS", a.getFile().getPath().indexOf( "CVS" ) >= 0 );
151             assertFalse( "Check not .svn", a.getFile().getPath().indexOf( ".svn" ) >= 0 );
152         }
153     }
154
155     private void dumpProblems( FileProblemsTracker tracker )
156     {
157         int problemNum = 0;
158         System.out.println( "-- ProblemTracker dump -------------------------" );
159         for ( Iterator itPaths = tracker.getPaths().iterator(); itPaths.hasNext(); )
160         {
161             String path = (String) itPaths.next();
162             System.out.println( " [" + problemNum + "]: " + path );
163
164             int messageNum = 0;
165             for ( Iterator itProblems = tracker.getProblems( path ).iterator(); itProblems.hasNext(); )
166             {
167                 String message = (String) itProblems.next();
168                 System.out.println( "    [" + messageNum + "]: " + message );
169                 messageNum++;
170             }
171
172             problemNum++;
173         }
174     }
175
176     private void assertTracker( FileProblemsTracker tracker, int expectedProblemCount )
177     {
178         assertNotNull( "ProblemsTracker should not be null.", tracker );
179
180         int actualProblemCount = tracker.getProblemCount();
181         if ( expectedProblemCount != actualProblemCount )
182         {
183             dumpProblems( tracker );
184             fail( "Problem count (across all paths) expected:<" + expectedProblemCount + ">, actual:<"
185                 + actualProblemCount + ">" );
186         }
187     }
188
189     private void assertHasFailureMessage( String message, String path, FileProblemsTracker tracker )
190     {
191         if ( !tracker.hasProblems( path ) )
192         {
193             fail( "There are no messages for expected path [" + path + "]" );
194         }
195
196         assertTrue( "Unable to find message [" + message + "] in path [" + path + "]", tracker.getProblems( path )
197             .contains( message ) );
198     }
199
200     private void assertHasArtifact( String groupId, String artifactId, String version, String type, String classifier,
201                                     Collection collection )
202     {
203         for ( Iterator it = collection.iterator(); it.hasNext(); )
204         {
205             Artifact artifact = (Artifact) it.next();
206             if ( StringUtils.equals( groupId, artifact.getGroupId() )
207                 && StringUtils.equals( artifactId, artifact.getArtifactId() )
208                 && StringUtils.equals( version, artifact.getVersion() )
209                 && StringUtils.equals( type, artifact.getType() )
210                 && StringUtils.equals( classifier, artifact.getClassifier() ) )
211             {
212                 // Found it!
213                 return;
214             }
215         }
216
217         fail( "Was unable to find artifact " + groupId + ":" + artifactId + ":" + version + ":" + type + ":"
218             + classifier );
219     }
220 }