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 java.io.File;
23 import java.util.Arrays;
24
25 import org.apache.maven.model.DistributionManagement;
26 import org.apache.maven.model.Profile;
27 import org.apache.maven.model.Site;
28 import org.apache.maven.plugin.MojoExecutionException;
29 import org.apache.maven.plugin.MojoFailureException;
30 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
31 import org.apache.maven.project.MavenProject;
32 import org.apache.maven.shared.release.ReleaseExecutionException;
33 import org.apache.maven.shared.release.ReleaseFailureException;
34 import org.apache.maven.shared.release.ReleaseManager;
35 import org.apache.maven.shared.release.config.ReleaseDescriptor;
36 import org.apache.maven.shared.release.env.ReleaseEnvironment;
37 import org.jmock.Mock;
38 import org.jmock.core.Constraint;
39 import org.jmock.core.constraint.IsEqual;
40 import org.jmock.core.constraint.IsInstanceOf;
41 import org.jmock.core.constraint.IsNull;
42 import org.jmock.core.matcher.InvokeOnceMatcher;
43 import org.jmock.core.stub.ThrowStub;
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 Mock mock = new Mock( ReleaseManager.class );
67
68 Constraint[] constraints = new Constraint[] {
69 new IsEqual( releaseDescriptor ),
70 new IsInstanceOf( ReleaseEnvironment.class ),
71 new IsNull()
72 };
73
74 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
75 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
76
77 mojo.execute();
78
79 assertTrue( true );
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 Mock mock = new Mock( ReleaseManager.class );
95
96 Constraint[] constraints = new Constraint[] {
97 new IsEqual( releaseDescriptor ),
98 new IsInstanceOf( ReleaseEnvironment.class ),
99 new IsNull()
100 };
101
102 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
103 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
104
105 mojo.execute();
106
107 assertTrue( true );
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 Mock mock = new Mock( ReleaseManager.class );
126
127 Constraint[] constraints = new Constraint[] {
128 new IsEqual( releaseDescriptor ),
129 new IsInstanceOf( ReleaseEnvironment.class ),
130 new IsNull()
131 };
132
133 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
134 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
135
136 mojo.execute();
137
138 assertTrue( true );
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 Mock mock = new Mock( ReleaseManager.class );
167
168 Constraint[] constraints = new Constraint[] {
169 new IsEqual( releaseDescriptor ),
170 new IsInstanceOf( ReleaseEnvironment.class ),
171 new IsNull()
172 };
173
174 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints ).will(
175 new ThrowStub( new ReleaseExecutionException( "..." ) ) );
176 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
177
178 try
179 {
180 mojo.execute();
181
182 fail( "Should have thrown an exception" );
183 }
184 catch ( MojoExecutionException e )
185 {
186 assertEquals( "Check cause", ReleaseExecutionException.class, e.getCause().getClass() );
187 }
188 }
189
190 public void testPerformWithExecutionFailure()
191 throws Exception
192 {
193 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
194
195 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
196 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
197 File checkoutDirectory = getTestFile( "target/checkout" );
198 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
199 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
200
201 Mock mock = new Mock( ReleaseManager.class );
202
203 Constraint[] constraints = new Constraint[] {
204 new IsEqual( releaseDescriptor ),
205 new IsInstanceOf( ReleaseEnvironment.class ),
206 new IsNull()
207 };
208
209 ReleaseFailureException cause = new ReleaseFailureException( "..." );
210 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints ).will(
211 new ThrowStub( cause ) );
212 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
213
214 try
215 {
216 mojo.execute();
217
218 fail( "Should have thrown an exception" );
219 }
220 catch ( MojoFailureException e )
221 {
222 assertEquals( "Check cause exists", cause, e.getCause() );
223 }
224 }
225
226 public void testPerformWithScm()
227 throws Exception
228 {
229 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-scm.xml" );
230
231 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
232 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
233 File checkoutDirectory = getTestFile( "target/checkout" );
234 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
235 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
236 releaseDescriptor.setScmSourceUrl( "scm-url" );
237
238 Mock mock = new Mock( ReleaseManager.class );
239
240 Constraint[] constraints = new Constraint[] {
241 new IsEqual( releaseDescriptor ),
242 new IsInstanceOf( ReleaseEnvironment.class ),
243 new IsNull()
244 };
245
246 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
247 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
248
249 mojo.execute();
250
251 assertTrue( true );
252 }
253
254 public void testPerformWithProfiles()
255 throws Exception
256 {
257 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
258
259 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
260 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
261 File checkoutDirectory = getTestFile( "target/checkout" );
262 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
263 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
264 releaseDescriptor.setAdditionalArguments( "-P prof1,2prof" );
265
266 MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
267 Profile profile1 = new Profile();
268 profile1.setId( "prof1" );
269 Profile profile2 = new Profile();
270 profile2.setId( "2prof" );
271 project.setActiveProfiles( Arrays.asList( new Profile[]{profile1, profile2} ) );
272
273 Mock mock = new Mock( ReleaseManager.class );
274
275 Constraint[] constraints = new Constraint[] {
276 new IsEqual( releaseDescriptor ),
277 new IsInstanceOf( ReleaseEnvironment.class ),
278 new IsNull()
279 };
280
281 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
282 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
283
284 mojo.execute();
285
286 assertTrue( true );
287 }
288
289 public void testPerformWithProfilesAndArguments()
290 throws Exception
291 {
292 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-args.xml" );
293
294 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
295 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
296 File checkoutDirectory = getTestFile( "target/checkout" );
297 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
298 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
299 releaseDescriptor.setAdditionalArguments( "-Dmaven.test.skip=true -P prof1,2prof" );
300
301 MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
302 Profile profile1 = new Profile();
303 profile1.setId( "prof1" );
304 Profile profile2 = new Profile();
305 profile2.setId( "2prof" );
306 project.setActiveProfiles( Arrays.asList( new Profile[]{profile1, profile2} ) );
307
308 Mock mock = new Mock( ReleaseManager.class );
309
310 Constraint[] constraints = new Constraint[] {
311 new IsEqual( releaseDescriptor ),
312 new IsInstanceOf( ReleaseEnvironment.class ),
313 new IsNull()
314 };
315
316 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
317 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
318
319 mojo.execute();
320
321 assertTrue( true );
322 }
323
324 public void testPerformWithMultilineGoals()
325 throws Exception
326 {
327 PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-multiline-goals.xml" );
328
329 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
330 releaseDescriptor.setWorkingDirectory( workingDirectory.getAbsolutePath() );
331 File checkoutDirectory = getTestFile( "target/checkout" );
332 releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
333 releaseDescriptor.setPerformGoals( "deploy site-deploy" );
334
335 Mock mock = new Mock( ReleaseManager.class );
336
337 Constraint[] constraints = new Constraint[] {
338 new IsEqual( releaseDescriptor ),
339 new IsInstanceOf( ReleaseEnvironment.class ),
340 new IsNull()
341 };
342
343 mock.expects( new InvokeOnceMatcher() ).method( "perform" ).with( constraints );
344 mojo.setReleaseManager( (ReleaseManager) mock.proxy() );
345
346 mojo.execute();
347
348 assertTrue( true );
349 }
350
351
352 protected void setUp()
353 throws Exception
354 {
355 super.setUp();
356 workingDirectory = getTestFile( "target/test-classes/mojos/perform" );
357 }
358 }