1 package org.apache.maven.plugins.release;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.mockito.Matchers.isA;
23 import static org.mockito.Mockito.doThrow;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.verifyNoMoreInteractions;
27
28 import java.io.File;
29 import java.util.Arrays;
30
31 import org.apache.maven.model.DistributionManagement;
32 import org.apache.maven.model.Profile;
33 import org.apache.maven.model.Site;
34 import org.apache.maven.plugin.MojoExecutionException;
35 import org.apache.maven.plugin.MojoFailureException;
36 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
37 import org.apache.maven.project.MavenProject;
38 import org.apache.maven.shared.release.ReleaseExecutionException;
39 import org.apache.maven.shared.release.ReleaseFailureException;
40 import org.apache.maven.shared.release.ReleaseManager;
41 import org.apache.maven.shared.release.ReleasePerformRequest;
42 import org.apache.maven.shared.release.config.ReleaseDescriptor;
43 import org.mockito.ArgumentCaptor;
44
45
46
47
48
49
50 public class PerformReleaseMojoTest
51 extends AbstractMojoTestCase
52 {
53 private File workingDirectory;
54
55 public void testPerform()
56 throws Exception
57 {
58 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
59
60 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
61 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
62 File checkoutDirectory = getTestFile( "target/checkout" );
63 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
64 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
65
66 ReleaseManager mock = mock( ReleaseManager.class );
67 mojo.setReleaseManager( mock );
68
69
70 mojo.execute();
71
72
73 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
74 verify( mock ).perform( argument.capture() );
75 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
76 assertNotNull( argument.getValue().getReleaseEnvironment() );
77 assertNull( argument.getValue().getReactorProjects() );
78 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
79 verifyNoMoreInteractions( mock );
80 }
81
82 public void testPerformWithFlatStructure()
83 throws Exception
84 {
85 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-flat-structure.xml" );
86
87 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
88 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
89 File checkoutDirectory = getTestFile( "target/checkout" );
90 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
91 releaseDescriptor.setPerformGoals( "deploy" );
92 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/target/svnroot/flat-multi-module/trunk/root-project" );
93
94 ReleaseManager mock = mock( ReleaseManager.class );
95 mojo.setReleaseManager( mock );
96
97
98 mojo.execute();
99
100
101 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
102 verify( mock ).perform( argument.capture() );
103 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
104 assertNotNull( argument.getValue().getReleaseEnvironment() );
105 assertNull( argument.getValue().getReactorProjects() );
106 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
107 verifyNoMoreInteractions( mock );
108 }
109
110
111 public void testPerformWithoutSite()
112 throws Exception
113 {
114 File testFileDirectory = getTestFile( "target/test-classes/mojos/perform/" );
115 PerformReleaseMojo mojo =
116 (PerformReleaseMojo) lookupMojo( "perform", new File( testFileDirectory, "perform-without-site.xml" ) );
117 mojo.setBasedir( testFileDirectory );
118
119 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
120 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
121 File checkoutDirectory = getTestFile( "target/checkout" );
122 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
123 releaseDescriptor.setPerformGoals( "deploy" );
124
125 ReleaseManager mock = mock( ReleaseManager.class );
126 mojo.setReleaseManager( mock );
127
128
129 mojo.execute();
130
131
132 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
133 verify( mock ).perform( argument.capture() );
134 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
135 assertNotNull( argument.getValue().getReleaseEnvironment() );
136 assertNull( argument.getValue().getReactorProjects() );
137 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
138 verifyNoMoreInteractions( mock );
139 }
140
141 private PerformReleaseMojo getMojoWithProjectSite( String fileName )
142 throws Exception
143 {
144 PerformReleaseMojo mojo = (PerformReleaseMojo) lookupMojo( "perform", new File( workingDirectory, fileName ) );
145 mojo.setBasedir( workingDirectory );
146
147 MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
148 DistributionManagement distributionManagement = new DistributionManagement();
149 distributionManagement.setSite( new Site() );
150 project.setDistributionManagement( distributionManagement );
151
152 return mojo;
153 }
154
155 public void testPerformWithExecutionException()
156 throws Exception
157 {
158 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
159
160 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
161 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
162 File checkoutDirectory = getTestFile( "target/checkout" );
163 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
164 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
165
166 ReleaseManager mock = mock( ReleaseManager.class );
167 doThrow( new ReleaseExecutionException( "..." ) ).when( mock ).perform( isA( ReleasePerformRequest.class ) );
168 mojo.setReleaseManager( mock );
169
170
171 try
172 {
173 mojo.execute();
174
175 fail( "Should have thrown an exception" );
176 }
177 catch ( MojoExecutionException e )
178 {
179 assertEquals( "Check cause", ReleaseExecutionException.class, e.getCause().getClass() );
180 }
181
182
183 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
184 verify( mock ).perform( argument.capture() );
185 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
186 assertNotNull( argument.getValue().getReleaseEnvironment() );
187 assertNull( argument.getValue().getReactorProjects() );
188 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
189
190 verifyNoMoreInteractions( mock );
191 }
192
193 public void testPerformWithExecutionFailure()
194 throws Exception
195 {
196 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
197
198 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
199 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
200 File checkoutDirectory = getTestFile( "target/checkout" );
201 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
202 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
203
204 ReleaseManager mock = mock( ReleaseManager.class );
205 ReleaseFailureException cause = new ReleaseFailureException( "..." );
206 doThrow( cause ).when( mock ).perform( isA( ReleasePerformRequest.class ) );
207
208 mojo.setReleaseManager( mock );
209
210
211 try
212 {
213 mojo.execute();
214
215 fail( "Should have thrown an exception" );
216 }
217 catch ( MojoFailureException e )
218 {
219 assertEquals( "Check cause exists", cause, e.getCause() );
220 }
221
222
223 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
224 verify( mock ).perform( argument.capture() );
225 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
226 assertNotNull( argument.getValue().getReleaseEnvironment() );
227 assertNull( argument.getValue().getReactorProjects() );
228 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
229
230 verifyNoMoreInteractions( mock );
231 }
232
233 public void testPerformWithScm()
234 throws Exception
235 {
236 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-scm.xml" );
237
238 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
239 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
240 File checkoutDirectory = getTestFile( "target/checkout" );
241 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
242 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
243 releaseDescriptor.setScmSourceUrl( "scm-url" );
244
245 ReleaseManager mock = mock( ReleaseManager.class );
246 mojo.setReleaseManager( mock );
247
248
249 mojo.execute();
250
251
252 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
253 verify( mock ).perform( argument.capture() );
254 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
255 assertNotNull( argument.getValue().getReleaseEnvironment() );
256 assertNull( argument.getValue().getReactorProjects() );
257 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
258
259 verifyNoMoreInteractions( mock );
260 }
261
262 public void testPerformWithProfiles()
263 throws Exception
264 {
265 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
266
267 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
268 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
269 File checkoutDirectory = getTestFile( "target/checkout" );
270 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
271 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
272 releaseDescriptor.setAdditionalArguments( "-P prof1,2prof" );
273
274 MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
275 Profile profile1 = new Profile();
276 profile1.setId( "prof1" );
277 Profile profile2 = new Profile();
278 profile2.setId( "2prof" );
279 project.setActiveProfiles( Arrays.asList( new Profile[]{profile1, profile2} ) );
280
281 ReleaseManager mock = mock( ReleaseManager.class );
282 mojo.setReleaseManager( mock );
283
284
285 mojo.execute();
286
287
288 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
289 verify( mock ).perform( argument.capture() );
290 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
291 assertNotNull( argument.getValue().getReleaseEnvironment() );
292 assertNull( argument.getValue().getReactorProjects() );
293 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
294
295 verifyNoMoreInteractions( mock );
296 }
297
298 public void testPerformWithProfilesAndArguments()
299 throws Exception
300 {
301 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-args.xml" );
302
303 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
304 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
305 File checkoutDirectory = getTestFile( "target/checkout" );
306 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
307 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
308 releaseDescriptor.setAdditionalArguments( "-Dmaven.test.skip=true -P prof1,2prof" );
309
310 MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
311 Profile profile1 = new Profile();
312 profile1.setId( "prof1" );
313 Profile profile2 = new Profile();
314 profile2.setId( "2prof" );
315 project.setActiveProfiles( Arrays.asList( new Profile[]{profile1, profile2} ) );
316
317 ReleaseManager mock = mock( ReleaseManager.class );
318 mojo.setReleaseManager( mock );
319
320
321 mojo.execute();
322
323
324 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
325 verify( mock ).perform( argument.capture() );
326 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
327 assertNotNull( argument.getValue().getReleaseEnvironment() );
328 assertNull( argument.getValue().getReactorProjects() );
329 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
330
331 verifyNoMoreInteractions( mock );
332 }
333
334 public void testPerformWithMultilineGoals()
335 throws Exception
336 {
337 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-multiline-goals.xml" );
338
339 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
340 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
341 File checkoutDirectory = getTestFile( "target/checkout" );
342 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
343 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
344
345 ReleaseManager mock = mock( ReleaseManager.class );
346 mojo.setReleaseManager( mock );
347
348
349 mojo.execute();
350
351
352 ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
353 verify( mock ).perform( argument.capture() );
354 assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
355 assertNotNull( argument.getValue().getReleaseEnvironment() );
356 assertNull( argument.getValue().getReactorProjects() );
357 assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
358
359 verifyNoMoreInteractions( mock );
360 }
361
362
363 protected void setUp()
364 throws Exception
365 {
366 super.setUp();
367 workingDirectory = getTestFile( "target/test-classes/mojos/perform" );
368 }
369 }