1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.release.phase;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.nio.file.Path;
24 import java.util.LinkedList;
25 import java.util.List;
26
27 import org.apache.maven.artifact.ArtifactUtils;
28 import org.apache.maven.model.Scm;
29 import org.apache.maven.project.MavenProject;
30 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
31 import org.apache.maven.shared.release.config.ReleaseUtils;
32 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
33 import org.apache.maven.shared.release.util.ReleaseUtil;
34 import org.junit.Test;
35
36 import static org.junit.Assert.assertEquals;
37 import static org.junit.Assert.assertFalse;
38 import static org.junit.Assert.assertTrue;
39
40
41
42
43
44
45 public class RewritePomsForDevelopmentPhaseTest extends AbstractEditModeRewritingReleasePhaseTestCase {
46 private static final String NEXT_VERSION = "1.1-SNAPSHOT";
47
48 private static final String ALTERNATIVE_NEXT_VERSION = "2.1-SNAPSHOT";
49
50 private static final String RELEASE_VERSION = "1.0";
51
52 private static final String ALTERNATIVE_RELEASE_VERSION = "2.0";
53
54 public RewritePomsForDevelopmentPhaseTest(String modelETL) {
55 super(modelETL);
56 }
57
58 @Override
59 protected String getRoleHint() {
60 return "rewrite-poms-for-development";
61 }
62
63 @Override
64 protected Path getWorkingDirectory(String workingDir) {
65 return super.getWorkingDirectory("rewrite-for-development/" + workingDir);
66 }
67
68 @Test
69 public void testSimulateRewrite() throws Exception {
70 List<MavenProject> reactorProjects = createReactorProjectsWhenSimulated("basic-pom");
71 ReleaseDescriptorBuilder builder = createDescriptorFromBasicPom(reactorProjects, "basic-pom");
72 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
73 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
74
75 String expected = readTestProjectFile("basic-pom/pom.xml");
76
77 phase.simulate(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
78
79 String actual = readTestProjectFile("basic-pom/pom.xml");
80 assertEquals("Check the original POM untouched", expected, actual);
81
82 expected = readTestProjectFile("basic-pom/expected-pom.xml");
83 actual = readTestProjectFile("basic-pom/pom.xml.next");
84 assertEquals("Check the transformed POM", expected, actual);
85 }
86
87 private List<MavenProject> createReactorProjectsWhenSimulated(String name) throws Exception {
88 return createReactorProjects("rewrite-for-release/" + name, name, null);
89 }
90
91 @Test
92 public void testSimulateRewriteEjbClientDeps() throws Exception {
93 List<MavenProject> reactorProjects =
94 new LinkedList<>(createReactorProjects("basic-pom-ejb-client-dep/project"));
95 reactorProjects.addAll(createReactorProjects("basic-pom-ejb-client-dep/ejb"));
96 ReleaseDescriptorBuilder builder = createDescriptorFromBasicPom(reactorProjects, "basic-pom-ejb-client-dep");
97 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
98 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
99 builder.addDevelopmentVersion(ArtifactUtils.versionlessKey("groupId", "artifactId1"), NEXT_VERSION);
100 builder.addReleaseVersion(ArtifactUtils.versionlessKey("groupId", "artifactId1"), RELEASE_VERSION);
101
102 String expected = readTestProjectFile("basic-pom-ejb-client-dep/project/pom.xml");
103
104 phase.simulate(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
105
106 String actual = readTestProjectFile("basic-pom-ejb-client-dep/project/pom.xml");
107 assertEquals("Check the original POM untouched", expected, actual);
108
109 expected = readTestProjectFile("basic-pom-ejb-client-dep/project/expected-pom.xml");
110 actual = readTestProjectFile("basic-pom-ejb-client-dep/project/pom.xml.next");
111 assertEquals("Check the transformed POM", expected, actual);
112 }
113
114 @Test
115 public void testClean() throws Exception {
116 List<MavenProject> reactorProjects = createReactorProjectsWhenSimulated("basic-pom");
117 ReleaseDescriptorBuilder builder = createDescriptorFromBasicPom(reactorProjects, "basic-pom");
118 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
119 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
120
121 File testFile = getTestFile("target/test-classes/projects/rewrite-for-development/basic-pom/pom.xml.next");
122 testFile.delete();
123 assertFalse(testFile.exists());
124
125 phase.simulate(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
126
127 assertTrue(testFile.exists());
128
129 ((ResourceGenerator) phase).clean(reactorProjects);
130
131 assertFalse(testFile.exists());
132 }
133
134 @Test
135 public void testCleanNotExists() throws Exception {
136 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
137
138 File testFile = getTestFile("target/test-classes/projects/rewrite-for-development/basic-pom/pom.xml.next");
139 testFile.delete();
140 assertFalse(testFile.exists());
141
142 ((ResourceGenerator) phase).clean(reactorProjects);
143
144 assertFalse(testFile.exists());
145 }
146
147 @Override
148 protected String readTestProjectFile(String fileName) throws IOException {
149 return readTestProjectFile(fileName, "rewrite-for-development/");
150 }
151
152 protected String readTestProjectFile(String fileName, String subpath) throws IOException {
153 return ReleaseUtil.readXmlFile(getTestFile("target/test-classes/projects/" + subpath + fileName));
154 }
155
156 @Override
157 protected List<MavenProject> prepareReactorProjects(String path) throws Exception {
158 String dir = "rewrite-for-development/" + path;
159 return createReactorProjects(dir, path, null);
160 }
161
162 @Override
163 protected ReleaseDescriptorBuilder createDescriptorFromBasicPom(
164 List<MavenProject> reactorProjects, String workingDirectory) throws Exception {
165 ReleaseDescriptorBuilder builder = super.createDescriptorFromProjects(reactorProjects, workingDirectory);
166
167 mapScm(builder);
168
169 return builder;
170 }
171
172 private void mapScm(ReleaseDescriptorBuilder builder) {
173 Scm scm = new Scm();
174 scm.setConnection("scm:svn:file://localhost/tmp/scm-repo/trunk");
175 scm.setDeveloperConnection("scm:svn:file://localhost/tmp/scm-repo/trunk");
176 scm.setUrl("file://localhost/tmp/scm-repo/trunk");
177 builder.addOriginalScmInfo("groupId:artifactId", scm);
178 }
179
180 @Override
181 protected void mapAlternateNextVersion(ReleaseDescriptorBuilder config, String projectId) {
182 config.addReleaseVersion(projectId, ALTERNATIVE_RELEASE_VERSION);
183 config.addDevelopmentVersion(projectId, ALTERNATIVE_NEXT_VERSION);
184 }
185
186 @Override
187 protected void mapNextVersion(ReleaseDescriptorBuilder config, String projectId) {
188 config.addReleaseVersion(projectId, RELEASE_VERSION);
189 config.addDevelopmentVersion(projectId, NEXT_VERSION);
190 }
191
192 @Override
193 protected void unmapNextVersion(ReleaseDescriptorBuilder builder, String projectId) {
194 builder.addReleaseVersion(projectId, RELEASE_VERSION);
195 }
196
197 @Override
198 protected ReleaseDescriptorBuilder createConfigurationForPomWithParentAlternateNextVersion(
199 List<MavenProject> reactorProjects, String workingDirectory) throws Exception {
200 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, workingDirectory);
201
202 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
203 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
204 builder.addReleaseVersion("groupId:subproject1", ALTERNATIVE_RELEASE_VERSION);
205 builder.addDevelopmentVersion("groupId:subproject1", ALTERNATIVE_NEXT_VERSION);
206 mapScm(builder);
207
208 return builder;
209 }
210
211 @Override
212 protected ReleaseDescriptorBuilder createConfigurationForWithParentNextVersion(
213 List<MavenProject> reactorProjects, String workingDirectory) throws Exception {
214 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, workingDirectory);
215
216 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
217 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
218 builder.addReleaseVersion("groupId:subproject1", RELEASE_VERSION);
219 builder.addDevelopmentVersion("groupId:subproject1", NEXT_VERSION);
220 mapScm(builder);
221
222 return builder;
223 }
224
225 @Test
226 public void testRewriteBasicPomWithGit() throws Exception {
227
228 List<MavenProject> reactorProjects = createReactorProjects("basic-pom-with-git");
229 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom-with-git");
230 mapNextVersion(builder, "groupId:artifactId");
231
232 Scm scm = new Scm();
233 scm.setConnection("${scm.base}:git://localhost/repo");
234 scm.setDeveloperConnection("${scm.base}:git+ssh://${username}@localhost/tmp/repo");
235 scm.setUrl("${baseUrl}/repo");
236 builder.addOriginalScmInfo("groupId:artifactId", scm);
237
238 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
239
240 assertTrue(comparePomFiles(reactorProjects));
241 }
242
243 @Test
244 public void testRewriteBasicPomWithGitFromTag() throws Exception {
245
246 List<MavenProject> reactorProjects = createReactorProjects("basic-pom-with-git-from-tag");
247 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom-with-git-from-tag");
248 mapNextVersion(builder, "groupId:artifactId");
249
250 Scm scm = new Scm();
251 scm.setConnection("scm:git:git://localhost/repo");
252 scm.setDeveloperConnection("scm:git:git+ssh://${username}@localhost/tmp/repo");
253 scm.setUrl("http://localhost/viewgit.cgi/repo");
254 scm.setTag("original-label");
255 builder.addOriginalScmInfo("groupId:artifactId", scm);
256
257 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
258
259 assertTrue(comparePomFiles(reactorProjects));
260 }
261
262 @Test
263 public void testRewriteBasicPomWithSvnFromTag() throws Exception {
264 List<MavenProject> reactorProjects = createReactorProjects("basic-pom-with-svn-from-tag");
265 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom-with-svn-from-tag");
266 mapNextVersion(builder, "groupId:artifactId");
267
268 Scm scm = new Scm();
269 scm.setConnection("scm:svn:file://localhost/svnroot/trunk/");
270 scm.setDeveloperConnection("scm:svn:file://localhost/svnroot/trunk/");
271 scm.setUrl("http://localhost/svn");
272 scm.setTag("trunk");
273 builder.addOriginalScmInfo("groupId:artifactId", scm);
274
275 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
276
277 assertTrue(comparePomFiles(reactorProjects));
278 }
279
280 @Test
281 public void testRewriteBasicPomWithInheritedScm() throws Exception {
282
283 List<MavenProject> reactorProjects = createReactorProjects("basic-pom-inherited-scm");
284 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom-inherited-scm");
285
286 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
287 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
288 builder.addReleaseVersion("groupId:subproject1", RELEASE_VERSION);
289 builder.addDevelopmentVersion("groupId:subproject1", NEXT_VERSION);
290 builder.addReleaseVersion("groupId:subsubproject", RELEASE_VERSION);
291 builder.addDevelopmentVersion("groupId:subsubproject", NEXT_VERSION);
292 Scm scm = new Scm();
293 scm.setConnection("scm:svn:file://localhost/tmp/scm-repo/trunk/subproject1");
294 scm.setDeveloperConnection("scm:svn:file://localhost/tmp/scm-repo/trunk/subproject1");
295
296 scm.setUrl("http://localhost/viewvc/mypath/trunk/subproject1");
297 builder.addOriginalScmInfo("groupId:subproject1", scm);
298 builder.addOriginalScmInfo("groupId:subsubproject", null);
299
300 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
301
302 assertTrue(comparePomFiles(reactorProjects));
303 }
304
305 @Test
306 public void testRewritePomWithParentAndProperties() throws Exception {
307 performTestRewritePomWithParentAndProperties("pom-with-parent-and-properties");
308 }
309
310
311 @Test
312 public void testRewritePomWithParentAndPropertiesInDependencyManagement() throws Exception {
313 performTestRewritePomWithParentAndProperties("pom-with-parent-and-properties-in-dependency-management");
314 }
315
316
317 @Test
318 public void testRewritePomWithParentAndPropertiesInDependencyManagementImport() throws Exception {
319 performTestRewritePomWithParentAndProperties("pom-with-parent-and-properties-in-dependency-management-import");
320 }
321
322 private void performTestRewritePomWithParentAndProperties(String path) throws Exception {
323 List<MavenProject> reactorProjects = createReactorProjects(path);
324
325 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, path);
326 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
327 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
328 builder.addReleaseVersion("groupId:subproject1", ALTERNATIVE_RELEASE_VERSION);
329 builder.addDevelopmentVersion("groupId:subproject1", ALTERNATIVE_NEXT_VERSION);
330 builder.addReleaseVersion("groupId:subproject2", ALTERNATIVE_RELEASE_VERSION);
331 builder.addDevelopmentVersion("groupId:subproject2", ALTERNATIVE_NEXT_VERSION);
332
333 mapScm(builder);
334
335 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
336
337 assertTrue(comparePomFiles(reactorProjects));
338 }
339
340 @Test
341 public void testSimulateRewritePomWithParentAndProperties() throws Exception {
342
343 List<MavenProject> reactorProjects = createReactorProjects("pom-with-parent-and-properties-sim");
344
345 ReleaseDescriptorBuilder builder =
346 createDescriptorFromProjects(reactorProjects, "pom-with-parent-and-properties-sim");
347 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
348 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
349 builder.addReleaseVersion("groupId:subproject1", ALTERNATIVE_RELEASE_VERSION);
350 builder.addDevelopmentVersion("groupId:subproject1", ALTERNATIVE_NEXT_VERSION);
351 builder.addReleaseVersion("groupId:subproject2", ALTERNATIVE_RELEASE_VERSION);
352 builder.addDevelopmentVersion("groupId:subproject2", ALTERNATIVE_NEXT_VERSION);
353
354 mapScm(builder);
355
356 phase.simulate(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
357
358 for (MavenProject project : reactorProjects) {
359 File pomFile = project.getFile();
360 File actualFile = new File(pomFile.getParentFile(), pomFile.getName() + ".next");
361 File expectedFile = new File(actualFile.getParentFile(), "expected-pom.xml");
362
363 comparePomFiles(expectedFile, actualFile, true, false);
364 }
365 }
366
367
368 @Test
369 public void testRewritePomWithDependencyPropertyCoordinate() throws Exception {
370 List<MavenProject> reactorProjects = createReactorProjects("pom-with-property-dependency-coordinate");
371
372 ReleaseDescriptorBuilder builder =
373 createDescriptorFromProjects(reactorProjects, "pom-with-property-dependency-coordinate");
374 builder.addReleaseVersion("groupId:artifactId", RELEASE_VERSION);
375 builder.addDevelopmentVersion("groupId:artifactId", NEXT_VERSION);
376 builder.addReleaseVersion("groupId:subproject1-3.4", ALTERNATIVE_RELEASE_VERSION);
377 builder.addDevelopmentVersion("groupId:subproject1-3.4", ALTERNATIVE_NEXT_VERSION);
378 builder.addReleaseVersion("groupId:subproject2", ALTERNATIVE_RELEASE_VERSION);
379 builder.addDevelopmentVersion("groupId:subproject2", ALTERNATIVE_NEXT_VERSION);
380
381 mapScm(builder);
382
383 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
384
385 assertTrue(comparePomFiles(reactorProjects));
386 }
387
388 @Test
389 public void testRewritePomDependenciesWithoutDependenciesVersionUpdate() throws Exception {
390 List<MavenProject> reactorProjects =
391 createReactorProjects("internal-snapshot-dependencies-without-dependencies-version-update");
392 ReleaseDescriptorBuilder builder = createDefaultConfiguration(
393 reactorProjects, "internal-snapshot-dependencies-without-dependencies-version-update");
394 builder.setUpdateDependencies(false);
395 mapNextVersion(builder, "groupId:subsubproject");
396
397 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
398
399 assertTrue(comparePomFiles(reactorProjects));
400 }
401 }