View Javadoc

1   package org.apache.maven.continuum.project.builder.maven;
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 java.io.File;
23  import java.net.URL;
24  import java.util.HashMap;
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.apache.maven.continuum.AbstractContinuumTest;
29  import org.apache.maven.continuum.builddefinition.BuildDefinitionService;
30  import org.apache.maven.continuum.execution.ContinuumBuildExecutorConstants;
31  import org.apache.maven.continuum.model.project.BuildDefinition;
32  import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
33  import org.apache.maven.continuum.model.project.Project;
34  import org.apache.maven.continuum.model.project.ProjectDependency;
35  import org.apache.maven.continuum.model.project.ProjectGroup;
36  import org.apache.maven.continuum.model.project.ProjectNotifier;
37  import org.apache.maven.continuum.project.builder.ContinuumProjectBuilder;
38  import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
39  import org.codehaus.plexus.util.StringUtils;
40  import org.slf4j.Logger;
41  import org.slf4j.LoggerFactory;
42  
43  /**
44   * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
45   * @version $Id: MavenTwoContinuumProjectBuilderTest.java 767796 2009-04-23 05:08:19Z evenisse $
46   */
47  public class MavenTwoContinuumProjectBuilderTest
48      extends AbstractContinuumTest
49  {
50      private static final Logger logger = LoggerFactory.getLogger( MavenTwoContinuumProjectBuilderTest.class );
51  
52      public void testGetEmailAddressWhenTypeIsSetToEmail()
53          throws Exception
54      {
55          ContinuumProjectBuilder projectBuilder =
56              (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE, MavenTwoContinuumProjectBuilder.ID );
57  
58          File pom = getTestFile( "src/test/repository/maven-builder-helper-1.xml" );
59  
60          ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( pom.toURL(), null, null );
61  
62          assertNotNull( result.getErrors() );
63  
64          assertEquals( 0, result.getErrors().size() );
65  
66          assertNotNull( result.getProjects() );
67  
68          assertEquals( 1, result.getProjects().size() );
69  
70          Project project = result.getProjects().get( 0 );
71  
72          assertNotNull( project );
73  
74          assertNotNull( project.getNotifiers() );
75  
76          assertEquals( 1, project.getNotifiers().size() );
77  
78          ProjectNotifier notifier = (ProjectNotifier) project.getNotifiers().get( 0 );
79  
80          assertEquals( "mail", notifier.getType() );
81  
82          assertEquals( "foo@bar", notifier.getConfiguration().get( "address" ) );
83  
84          ProjectGroup pg = result.getProjectGroups().get( 0 );
85  
86          assertNotNull( pg );
87  
88          assertNotNull( pg.getNotifiers() );
89  
90          assertEquals( 0, pg.getNotifiers().size() );
91      }
92  
93      public void testGetEmailAddressWhenTypeIsntSet()
94          throws Exception
95      {
96          ContinuumProjectBuilder projectBuilder =
97              (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE, MavenTwoContinuumProjectBuilder.ID );
98  
99          File pom = getTestFile( "src/test/repository/maven-builder-helper-2.xml" );
100 
101         ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( pom.toURL(), null, null );
102 
103         assertNotNull( result.getErrors() );
104 
105         assertEquals( 0, result.getErrors().size() );
106 
107         assertNotNull( result.getProjects() );
108 
109         assertEquals( 1, result.getProjects().size() );
110 
111         Project project = result.getProjects().get( 0 );
112 
113         assertNotNull( project );
114 
115         assertNotNull( project.getNotifiers() );
116 
117         assertEquals( 1, project.getNotifiers().size() );
118 
119         ProjectNotifier notifier = (ProjectNotifier) project.getNotifiers().get( 0 );
120 
121         assertEquals( "mail", notifier.getType() );
122 
123         assertEquals( "foo@bar", notifier.getConfiguration().get( "address" ) );
124 
125         ProjectGroup pg = result.getProjectGroups().get( 0 );
126 
127         assertNotNull( pg );
128 
129         assertNotNull( pg.getNotifiers() );
130 
131         assertEquals( 0, pg.getNotifiers().size() );
132     }
133 
134     public void testGetScmUrlWithParams()
135         throws Exception
136     {
137         ContinuumProjectBuilder projectBuilder =
138             (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE, MavenTwoContinuumProjectBuilder.ID );
139 
140         File pom = getTestFile( "src/test/repository/maven-builder-helper-3.xml" );
141 
142         ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( pom.toURL(), null, null );
143 
144         assertNotNull( result.getErrors() );
145 
146         assertEquals( 0, result.getErrors().size() );
147 
148         assertNotNull( result.getProjects() );
149 
150         assertEquals( 1, result.getProjects().size() );
151 
152         ProjectGroup pg = result.getProjectGroups().get( 0 );
153 
154         assertNotNull( pg );
155 
156         String username = System.getProperty( "user.name" );
157 
158         String scmUrl = "scm:cvs:ext:${user.name}@company.org:/home/company/cvs:project/foo";
159 
160         Project project = result.getProjects().get( 0 );
161 
162         scmUrl = StringUtils.replace( scmUrl, "${user.name}", username );
163 
164         assertEquals( scmUrl, project.getScmUrl() );
165     }
166 
167     public void testCreateProjectsWithModules()
168         throws Exception
169     {
170         ContinuumProjectBuilder projectBuilder =
171             (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE, MavenTwoContinuumProjectBuilder.ID );
172 
173         URL url = getClass().getClassLoader().getResource( "projects/continuum/pom.xml" );
174 
175         ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( url, null, null );
176 
177         assertNotNull( result );
178 
179         // ----------------------------------------------------------------------
180         // Assert the warnings
181         // ----------------------------------------------------------------------
182 
183         assertNotNull( result.getErrors() );
184 
185         assertEquals( 1, result.getErrors().size() );
186 
187         assertEquals( ContinuumProjectBuildingResult.ERROR_POM_NOT_FOUND, result.getErrors().get( 0 ) );
188 
189         // ----------------------------------------------------------------------
190         // Assert the project group built
191         // ----------------------------------------------------------------------
192 
193         assertNotNull( result.getProjectGroups() );
194 
195         assertEquals( 1, result.getProjectGroups().size() );
196 
197         ProjectGroup projectGroup = result.getProjectGroups().iterator().next();
198 
199         assertEquals( "projectGroup.groupId", "org.apache.maven.continuum", projectGroup.getGroupId() );
200 
201         assertEquals( "projectGroup.name", "Continuum Parent Project", projectGroup.getName() );
202 
203         assertEquals( "projectGroup.description", "Continuum Project Description", projectGroup.getDescription() );
204 
205         // assertEquals( "projectGroup.url", "http://cvs.continuum.codehaus.org/", projectGroup.getUrl() );
206 
207         // ----------------------------------------------------------------------
208         // Assert the projects built
209         // ----------------------------------------------------------------------
210 
211         assertNotNull( result.getProjects() );
212 
213         assertEquals( 9, result.getProjects().size() );
214 
215         Map<String, Project> projects = new HashMap<String, Project>();
216 
217         for ( Project project : result.getProjects() )
218         {
219             assertNotNull( project.getName() );
220 
221             assertNotNull( project.getDescription() );
222 
223             projects.put( project.getName(), project );
224         }
225 
226         assertMavenTwoProject( "Continuum Core", projects );
227         assertMavenTwoProject( "Continuum Model", projects );
228         assertMavenTwoProject( "Continuum Plexus Application", projects );
229         assertScmUrl( "Continuum Web", projects,
230                       "scm:svn:http://svn.apache.org/repos/asf/maven/continuum/tags/continuum-1.0.3/continuum-web" );
231         //directoryName != artifactId for this project
232         assertScmUrl( "Continuum XMLRPC Interface", projects,
233                       "scm:svn:http://svn.apache.org/repos/asf/maven/continuum/tags/continuum-1.0.3/continuum-xmlrpc" );
234         assertMavenTwoProject( "Continuum Notifiers", projects );
235         assertMavenTwoProject( "Continuum IRC Notifier", projects );
236         assertMavenTwoProject( "Continuum Jabber Notifier", projects );
237 
238         assertEquals( "continuum-parent-notifiers",
239                       ( projects.get( "Continuum IRC Notifier" ) ).getParent().getArtifactId() );
240 
241         assertEquals( "continuum-parent-notifiers",
242                       ( projects.get( "Continuum Jabber Notifier" ) ).getParent().getArtifactId() );
243 
244         assertDependency( "Continuum Model", "Continuum Web", projects );
245     }
246 
247     public void testCreateProjectsWithModuleswithParentPomIsntPomXml()
248         throws Exception
249     {
250         ContinuumProjectBuilder projectBuilder =
251             (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE, MavenTwoContinuumProjectBuilder.ID );
252 
253         URL url = getClass().getClassLoader().getResource( "projects/continuum/pom_ci.xml" );
254 
255         ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( url, null, null );
256 
257         assertNotNull( result );
258 
259         // ----------------------------------------------------------------------
260         // Assert the warnings
261         // ----------------------------------------------------------------------
262 
263         assertNotNull( result.getErrors() );
264 
265         assertEquals( 1, result.getErrors().size() );
266 
267         assertEquals( ContinuumProjectBuildingResult.ERROR_POM_NOT_FOUND, result.getErrors().get( 0 ) );
268 
269         // ----------------------------------------------------------------------
270         // Assert the project group built
271         // ----------------------------------------------------------------------
272 
273         assertNotNull( result.getProjectGroups() );
274 
275         assertEquals( 1, result.getProjectGroups().size() );
276 
277         ProjectGroup projectGroup = result.getProjectGroups().iterator().next();
278 
279         assertEquals( "projectGroup.groupId", "org.apache.maven.continuum", projectGroup.getGroupId() );
280 
281         assertEquals( "projectGroup.name", "Continuum Parent Project", projectGroup.getName() );
282 
283         assertEquals( "projectGroup.description", "Continuum Project Description", projectGroup.getDescription() );
284 
285         // assertEquals( "projectGroup.url", "http://cvs.continuum.codehaus.org/", projectGroup.getUrl() );
286 
287         // ----------------------------------------------------------------------
288         // Assert the projects built
289         // ----------------------------------------------------------------------
290 
291         assertNotNull( result.getProjects() );
292 
293         assertEquals( 9, result.getProjects().size() );
294 
295         Map<String, Project> projects = new HashMap<String, Project>();
296 
297         for ( Project project : result.getProjects() )
298         {
299             assertNotNull( project.getName() );
300 
301             projects.put( project.getName(), project );
302         }
303 
304         assertMavenTwoProject( "Continuum Core", projects );
305         assertMavenTwoProject( "Continuum Model", projects );
306         assertMavenTwoProject( "Continuum Plexus Application", projects );
307         assertScmUrl( "Continuum Web", projects,
308                       "scm:svn:http://svn.apache.org/repos/asf/maven/continuum/tags/continuum-1.0.3/continuum-web" );
309         //directoryName != artifactId for this project
310         assertScmUrl( "Continuum XMLRPC Interface", projects,
311                       "scm:svn:http://svn.apache.org/repos/asf/maven/continuum/tags/continuum-1.0.3/continuum-xmlrpc" );
312         assertMavenTwoProject( "Continuum Notifiers", projects );
313         assertMavenTwoProject( "Continuum IRC Notifier", projects );
314         assertMavenTwoProject( "Continuum Jabber Notifier", projects );
315 
316         assertEquals( "continuum-parent-notifiers",
317                       ( projects.get( "Continuum IRC Notifier" ) ).getParent().getArtifactId() );
318 
319         assertEquals( "continuum-parent-notifiers",
320                       ( projects.get( "Continuum Jabber Notifier" ) ).getParent().getArtifactId() );
321 
322         assertDependency( "Continuum Model", "Continuum Web", projects );
323     }
324 
325     public void testCreateProjectWithoutModules()
326         throws Exception
327     {
328 
329         ContinuumProjectBuilder projectBuilder =
330             (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE, MavenTwoContinuumProjectBuilder.ID );
331 
332         URL url = getClass().getClassLoader().getResource( "projects/continuum/continuum-core/pom.xml" );
333 
334         BuildDefinition bd = new BuildDefinition();
335 
336         bd.setDefaultForProject( true );
337 
338         bd.setGoals( "clean test-compile" );
339 
340         bd.setArguments( "-N" );
341 
342         bd.setBuildFile( "pom.xml" );
343 
344         bd.setType( ContinuumBuildExecutorConstants.MAVEN_TWO_BUILD_EXECUTOR );
345 
346         BuildDefinitionService service = (BuildDefinitionService) lookup( BuildDefinitionService.class );
347 
348         bd = service.addBuildDefinition( bd );
349         BuildDefinitionTemplate bdt = new BuildDefinitionTemplate();
350         bdt.setName( "maven2" );
351         bdt = service.addBuildDefinitionTemplate( bdt );
352         bdt = service.addBuildDefinitionInTemplate( bdt, bd, false );
353         assertEquals( 5, service.getAllBuildDefinitionTemplate().size() );
354         logger.debug( "templates number " + service.getAllBuildDefinitionTemplate().size() );
355 
356         logger.debug( "projectGroups number " + getProjectGroupDao().getAllProjectGroups().size() );
357 
358         int all = service.getAllBuildDefinitions().size();
359 
360         ContinuumProjectBuildingResult result;
361 
362         result = projectBuilder.buildProjectsFromMetadata( url, null, null, false, bdt );
363         assertFalse( result.hasErrors() );
364 
365         assertEquals( 5, service.getAllBuildDefinitionTemplate().size() );
366 
367         assertEquals( all + 1, service.getAllBuildDefinitions().size() );
368 
369         assertNotNull( result );
370 
371         assertNotNull( result.getErrors() );
372 
373         assertEquals( 0, result.getErrors().size() );
374 
375         assertNotNull( result.getProjectGroups() );
376 
377         assertEquals( 1, result.getProjectGroups().size() );
378 
379         ProjectGroup projectGroup = result.getProjectGroups().get( 0 );
380 
381         assertEquals( "projectGroup.groupId", "org.apache.maven.continuum", projectGroup.getGroupId() );
382 
383         assertEquals( "projectGroup.name", "Continuum Core", projectGroup.getName() );
384 
385         assertNotNull( result.getProjects() );
386 
387         assertEquals( 1, result.getProjects().size() );
388 
389         assertNotNull( projectGroup.getProjects() );
390 
391         assertEquals( 0, projectGroup.getProjects().size() );
392     }
393 
394     private void assertDependency( String dep, String proj, Map<String, Project> projects )
395     {
396         Project p = projects.get( proj );
397 
398         Project dependency = projects.get( dep );
399 
400         assertNotNull( p );
401 
402         assertNotNull( dependency );
403 
404         assertNotNull( p.getDependencies() );
405 
406         for ( ProjectDependency pd : (List<ProjectDependency>) p.getDependencies() )
407         {
408             if ( pd.getArtifactId().equals( dependency.getArtifactId() ) &&
409                 pd.getGroupId().equals( dependency.getGroupId() ) && pd.getVersion().equals( dependency.getVersion() ) )
410             {
411                 return;
412             }
413         }
414 
415         assertFalse( true );
416     }
417 
418     // ----------------------------------------------------------------------
419     //
420     // ----------------------------------------------------------------------
421 
422     private Project getProject( String name, Map<String, Project> projects )
423     {
424         return projects.get( name );
425     }
426 
427     private void assertMavenTwoProject( String name, Map<String, Project> projects )
428     {
429         Project project = getProject( name, projects );
430 
431         assertNotNull( project );
432 
433         assertEquals( name, project.getName() );
434 
435         String scmUrl = "scm:svn:http://svn.apache.org/repos/asf/maven/continuum/";
436 
437         assertTrue( project.getScmUrl().startsWith( scmUrl ) );
438     }
439 
440     private void assertScmUrl( String name, Map<String, Project> projects, String scmUrl )
441     {
442         assertMavenTwoProject( name, projects );
443 
444         Project project = getProject( name, projects );
445 
446         assertEquals( scmUrl, project.getScmUrl() );
447     }
448 }