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 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
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 =
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
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",
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
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",
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 }