View Javadoc

1   package org.apache.maven.plugins.release;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * Test release:perform.
47   *
48   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
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 }