1 package org.apache.maven.continuum.project.builder.maven;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.continuum.AbstractContinuumTest;
23 import org.apache.maven.continuum.builddefinition.BuildDefinitionService;
24 import org.apache.maven.continuum.execution.ContinuumBuildExecutorConstants;
25 import org.apache.maven.continuum.model.project.BuildDefinition;
26 import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
27 import org.apache.maven.continuum.model.project.Project;
28 import org.apache.maven.continuum.model.project.ProjectDependency;
29 import org.apache.maven.continuum.model.project.ProjectGroup;
30 import org.apache.maven.continuum.model.project.ProjectNotifier;
31 import org.apache.maven.continuum.project.builder.ContinuumProjectBuilder;
32 import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
33 import org.codehaus.plexus.util.StringUtils;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 import java.io.File;
38 import java.net.URL;
39 import java.util.HashMap;
40 import java.util.List;
41 import java.util.Map;
42
43
44
45
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 = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
56 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 = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
97 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 = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
138 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 = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
171 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
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
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
206
207
208
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
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", ( projects.get(
239 "Continuum IRC Notifier" ) ).getParent().getArtifactId() );
240
241 assertEquals( "continuum-parent-notifiers", ( projects.get(
242 "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 = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
251 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
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
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
286
287
288
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
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", ( projects.get(
317 "Continuum IRC Notifier" ) ).getParent().getArtifactId() );
318
319 assertEquals( "continuum-parent-notifiers", ( projects.get(
320 "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 = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
330 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, false );
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 public void testCreateProjectWithFlatStructure()
395 throws Exception
396 {
397 ContinuumProjectBuilder projectBuilder = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
398 MavenTwoContinuumProjectBuilder.ID );
399
400 URL url = getTestFile( "/src/test-projects/flat-multi-module/parent-project/pom.xml" ).toURL();
401
402 ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( url, null, null, true, true );
403
404 Project rootProject = result.getRootProject();
405 assertEquals( "Incorrect root project", "parent-project", rootProject.getArtifactId() );
406
407 List<Project> projects = result.getProjects();
408 for ( Project project : projects )
409 {
410 if ( project.getName().equals( "parent-project" ) )
411 {
412 assertEquals( "Incorrect scm url for parent-project",
413 "scm:local:src/test-projects:flat-multi-module/parent-project", project.getScmUrl() );
414 }
415 else if ( project.getName().equals( "module-a" ) )
416 {
417 assertEquals( "Incorrect scm url for parent-project",
418 "scm:local:src/test-projects:flat-multi-module/module-a", project.getScmUrl() );
419 }
420 else if ( project.getName().equals( "module-b" ) )
421 {
422 assertEquals( "Incorrect scm url for parent-project",
423 "scm:local:src/test-projects:flat-multi-module/module-b", project.getScmUrl() );
424 }
425 else if ( project.getName().equals( "module-d" ) )
426 {
427 assertEquals( "Incorrect scm url for module-d",
428 "scm:local:src/test-projects:flat-multi-module/module-c/module-d", project.getScmUrl() );
429 }
430 else
431 {
432 fail( "Unknown project: " + project.getName() );
433 }
434 }
435 }
436
437
438 public void testCreateMultiModuleProjectLoadRecursiveProjectsIsFalse()
439 throws Exception
440 {
441 ContinuumProjectBuilder projectBuilder = (ContinuumProjectBuilder) lookup( ContinuumProjectBuilder.ROLE,
442 MavenTwoContinuumProjectBuilder.ID );
443
444 URL url = getClass().getClassLoader().getResource( "projects/continuum/pom.xml" );
445
446 ContinuumProjectBuildingResult result = projectBuilder.buildProjectsFromMetadata( url, null, null, false,
447 false );
448
449 assertNotNull( result );
450
451
452
453
454
455 assertNotNull( result.getProjectGroups() );
456
457 assertEquals( 1, result.getProjectGroups().size() );
458
459 ProjectGroup projectGroup = result.getProjectGroups().iterator().next();
460
461 assertEquals( "projectGroup.groupId", "org.apache.maven.continuum", projectGroup.getGroupId() );
462
463 assertEquals( "projectGroup.name", "Continuum Parent Project", projectGroup.getName() );
464
465 assertEquals( "projectGroup.description", "Continuum Project Description", projectGroup.getDescription() );
466
467
468
469
470
471 assertNotNull( result.getProjects() );
472
473 assertEquals( 1, result.getProjects().size() );
474
475 Map<String, Project> projects = new HashMap<String, Project>();
476
477 Project project = result.getProjects().iterator().next();
478 assertNotNull( project.getName() );
479 assertNotNull( project.getDescription() );
480 projects.put( project.getName(), project );
481
482 assertMavenTwoProject( "Continuum Parent Project", projects );
483
484
485 List<BuildDefinition> buildDefs = project.getBuildDefinitions();
486 assertEquals( 0, buildDefs.size() );
487
488
489 buildDefs = projectGroup.getBuildDefinitions();
490 assertEquals( 1, buildDefs.size() );
491 for ( BuildDefinition buildDef : buildDefs )
492 {
493 if ( buildDef.isDefaultForProject() )
494 {
495 assertEquals( "--batch-mode", buildDef.getArguments() );
496 assertEquals( "clean install", buildDef.getGoals() );
497 assertEquals( "pom.xml", buildDef.getBuildFile() );
498 }
499 }
500 }
501
502 private void assertDependency( String dep, String proj, Map<String, Project> projects )
503 {
504 Project p = projects.get( proj );
505
506 Project dependency = projects.get( dep );
507
508 assertNotNull( p );
509
510 assertNotNull( dependency );
511
512 assertNotNull( p.getDependencies() );
513
514 for ( ProjectDependency pd : (List<ProjectDependency>) p.getDependencies() )
515 {
516 if ( pd.getArtifactId().equals( dependency.getArtifactId() ) &&
517 pd.getGroupId().equals( dependency.getGroupId() ) && pd.getVersion().equals( dependency.getVersion() ) )
518 {
519 return;
520 }
521 }
522
523 assertFalse( true );
524 }
525
526
527
528
529
530 private Project getProject( String name, Map<String, Project> projects )
531 {
532 return projects.get( name );
533 }
534
535 private void assertMavenTwoProject( String name, Map<String, Project> projects )
536 {
537 Project project = getProject( name, projects );
538
539 assertNotNull( project );
540
541 assertEquals( name, project.getName() );
542
543 String scmUrl = "scm:svn:http://svn.apache.org/repos/asf/maven/continuum/";
544
545 assertTrue( project.getScmUrl().startsWith( scmUrl ) );
546 }
547
548 private void assertScmUrl( String name, Map<String, Project> projects, String scmUrl )
549 {
550 assertMavenTwoProject( name, projects );
551
552 Project project = getProject( name, projects );
553
554 assertEquals( scmUrl, project.getScmUrl() );
555 }
556 }