View Javadoc
1   package org.apache.maven.shared.release.config;
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 junit.framework.TestCase;
23  
24  import org.apache.maven.artifact.ArtifactUtils;
25  import org.apache.maven.model.Scm;
26  import org.apache.maven.shared.release.phase.AbstractReleaseTestCase;
27  
28  import java.io.File;
29  import java.io.IOException;
30  import java.util.Map;
31  import java.util.Properties;
32  
33  /**
34   * ReleaseDescriptor Tester.
35   *
36   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
37   */
38  public class ReleaseUtilsTest
39      extends TestCase
40  {
41      public void testMergeConfigurationSourceEmpty() 
42          throws IOException
43      {
44          ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
45          ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
46          ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
47          ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
48  
49          assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
50      }
51  
52      public void testMergeEqualsWithUpdateWorkingCopyTrue() 
53          throws IOException
54      {
55          ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
56          ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
57          
58          ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
59          ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
60  
61          assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
62      }
63  
64      public void testMergeConfigurationDestEmpty() 
65          throws IOException
66      {
67          ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
68          ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, new ReleaseDescriptor() );
69          ReleaseDescriptor expectedDescriptor = copyReleaseDescriptor( mergedReleaseDescriptor );
70  
71          assertEquals( "Check merge", expectedDescriptor, releaseDescriptor );
72      }
73  
74      public void testMergeConfiguration() 
75          throws IOException
76      {
77          File workingDirectory = new File( "." );
78  
79          ReleaseDescriptor mergeDescriptor =
80              createMergeDescriptor( AbstractReleaseTestCase.getPath( workingDirectory ), "completed-phase-merge" );
81  
82          ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
83          releaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
84  
85          ReleaseDescriptor expected =
86              createMergeDescriptor( releaseDescriptor.getWorkingDirectory(), releaseDescriptor.getCompletedPhase() );
87          assertEquals( "Check merge", expected, releaseDescriptor );
88      }
89  
90      public void testEquals() 
91          throws IOException
92      {
93          ReleaseDescriptor originalReleaseDescriptor = createReleaseDescriptor();
94          ReleaseDescriptor releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
95          doEqualsAssertions( releaseDescriptor, originalReleaseDescriptor, "other", new File( "f" ) );
96          originalReleaseDescriptor = createReleaseDescriptor();
97          releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
98          doEqualsAssertions( originalReleaseDescriptor, releaseDescriptor, "other", new File( "f" ) );
99  
100         originalReleaseDescriptor = createReleaseDescriptor();
101         releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
102         doEqualsAssertions( releaseDescriptor, originalReleaseDescriptor, null, null );
103         originalReleaseDescriptor = createReleaseDescriptor();
104         releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
105         doEqualsAssertions( originalReleaseDescriptor, releaseDescriptor, null, null );
106 
107         assertEquals( "test ==", releaseDescriptor, releaseDescriptor );
108         Object obj = this;
109         assertFalse( "test class instance", releaseDescriptor.equals( obj ) );
110     }
111 
112     private static void doEqualsAssertions( ReleaseDescriptor releaseDescriptor,
113                                             ReleaseDescriptor originalReleaseDescriptor, String other, File otherFile ) 
114         throws IOException
115     {
116         ReleaseDescriptor origConfig = originalReleaseDescriptor;
117         ReleaseDescriptor config = releaseDescriptor;
118         assertEquals( "Check original comparison", config, origConfig );
119 
120         config.setScmSourceUrl( other );
121         assertFalse( "Check original comparison", config.equals( origConfig ) );
122         config.setScmSourceUrl( origConfig.getScmSourceUrl() );
123 
124         config.setAdditionalArguments( other );
125         assertFalse( "Check original comparison", config.equals( origConfig ) );
126         config.setAdditionalArguments( origConfig.getAdditionalArguments() );
127 
128         config.setAddSchema( !origConfig.isAddSchema() );
129         assertFalse( "Check original comparison", config.equals( origConfig ) );
130         config.setAddSchema( origConfig.isAddSchema() );
131 
132         config.setGenerateReleasePoms( !origConfig.isAddSchema() );
133         assertFalse( "Check original comparison", config.equals( origConfig ) );
134         config.setGenerateReleasePoms( origConfig.isGenerateReleasePoms() );
135 
136         config.setScmUseEditMode( !origConfig.isScmUseEditMode() );
137         assertFalse( "Check original comparison", config.equals( origConfig ) );
138         config.setScmUseEditMode( origConfig.isScmUseEditMode() );
139 
140         config.setInteractive( !origConfig.isInteractive() );
141         assertFalse( "Check original comparison", config.equals( origConfig ) );
142         config.setInteractive( origConfig.isInteractive() );
143 
144         config.setCommitByProject( !origConfig.isCommitByProject() );
145         assertFalse( "Check original comparison", config.equals( origConfig ) );
146         config.setCommitByProject( origConfig.isCommitByProject() );
147 
148         config.setCompletedPhase( other );
149         assertFalse( "Check original comparison", config.equals( origConfig ) );
150         config.setCompletedPhase( origConfig.getCompletedPhase() );
151         
152         config.setScmPrivateKeyPassPhrase( other );
153         assertFalse( "Check original comparison", config.equals( origConfig ) );
154         config.setScmPrivateKeyPassPhrase( origConfig.getScmPrivateKeyPassPhrase() );
155 
156         config.setScmPassword( other );
157         assertFalse( "Check original comparison", config.equals( origConfig ) );
158         config.setScmPassword( origConfig.getScmPassword() );
159 
160         config.setScmUsername( other );
161         assertFalse( "Check original comparison", config.equals( origConfig ) );
162         config.setScmUsername( origConfig.getScmUsername() );
163 
164         config.setScmPrivateKey( other );
165         assertFalse( "Check original comparison", config.equals( origConfig ) );
166         config.setScmPrivateKey( origConfig.getScmPrivateKey() );
167 
168         config.setPomFileName( other );
169         assertFalse( "Check original comparison", config.equals( origConfig ) );
170         config.setPomFileName( origConfig.getPomFileName() );
171 
172         config.setPreparationGoals( other );
173         assertFalse( "Check original comparison", config.equals( origConfig ) );
174         config.setPreparationGoals( origConfig.getPreparationGoals() );
175 
176         config.setScmReleaseLabel( other );
177         assertFalse( "Check original comparison", config.equals( origConfig ) );
178         config.setScmReleaseLabel( origConfig.getScmReleaseLabel() );
179 
180         config.setScmTagBase( other );
181         assertFalse( "Check original comparison", config.equals( origConfig ) );
182         config.setScmTagBase( origConfig.getScmTagBase() );
183 
184         if ( otherFile != null )
185         {
186             config.setWorkingDirectory( AbstractReleaseTestCase.getPath( otherFile ) );
187             assertFalse( "Check original comparison", config.equals( origConfig ) );
188         }
189 
190         config.setWorkingDirectory( origConfig.getWorkingDirectory() );
191 
192         // sanity check the test was resetting correctly
193         assertEquals( "Check original comparison", config, origConfig );
194 
195         config.mapDevelopmentVersion( "groupId:artifactId", "1.0-SNAPSHOT" );
196         assertFalse( "Check original comparison", config.equals( origConfig ) );
197         config = copyReleaseDescriptor( origConfig );
198 
199         config.mapReleaseVersion( "groupId:artifactId", "1.0" );
200         assertFalse( "Check original comparison", config.equals( origConfig ) );
201         config = copyReleaseDescriptor( origConfig );
202 
203         config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
204         assertFalse( "Check original comparison", config.equals( origConfig ) );
205         config = copyReleaseDescriptor( origConfig );
206 
207         config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
208         origConfig.mapOriginalScmInfo( "foo", new Scm() );
209         assertFalse( "Check original comparison", config.equals( origConfig ) );
210         origConfig = createReleaseDescriptor();
211         config = copyReleaseDescriptor( origConfig );
212 
213         config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
214         origConfig.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
215         assertEquals( "Check original comparison", config, origConfig );
216         origConfig = createReleaseDescriptor();
217         config = copyReleaseDescriptor( origConfig );
218 
219         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
220         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
221         assertEquals( "Check original comparison", config, origConfig );
222         origConfig = createReleaseDescriptor();
223         config = copyReleaseDescriptor( origConfig );
224 
225         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "-", "dev", "url", "tag" ) );
226         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
227         assertFalse( "Check original comparison", config.equals( origConfig ) );
228         origConfig = createReleaseDescriptor();
229         config = copyReleaseDescriptor( origConfig );
230 
231         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "-", "url", "tag" ) );
232         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
233         assertFalse( "Check original comparison", config.equals( origConfig ) );
234         origConfig = createReleaseDescriptor();
235         config = copyReleaseDescriptor( origConfig );
236 
237         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "-", "tag" ) );
238         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
239         assertFalse( "Check original comparison", config.equals( origConfig ) );
240         origConfig = createReleaseDescriptor();
241         config = copyReleaseDescriptor( origConfig );
242 
243         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "-" ) );
244         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
245         assertFalse( "Check original comparison", config.equals( origConfig ) );
246     }
247 
248     public void testHashCode() 
249         throws IOException
250     {
251         ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
252 
253         assertEquals( "Check hash code", releaseDescriptor.hashCode(),
254                       createReleaseDescriptor( releaseDescriptor.getWorkingDirectory() ).hashCode() );
255     }
256 
257     public void testLoadResolvedDependencies()
258     {
259         Properties properties = new Properties();
260         String dependencyKey = ArtifactUtils.versionlessKey( "com.groupId", "artifactId" );
261         properties.put( "dependency." + dependencyKey  + ".release", "1.3" );
262         properties.put( "dependency." + dependencyKey + ".development", "1.3-SNAPSHOT" );
263         ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
264         
265         Map<String, String> versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( dependencyKey );
266         assertEquals( "1.3", versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
267         assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
268     }
269 
270     // MRELEASE-750
271     public void testArtifactIdEndswithDependency()
272     {
273         Properties properties = new Properties();
274         String relDependencyKey = ArtifactUtils.versionlessKey( "com.release.magic", "dependency" );
275         properties.put( "dependency." + relDependencyKey  + ".release", "1.3" );
276         String devDependencyKey = ArtifactUtils.versionlessKey( "com.development.magic", "dependency" );
277         properties.put( "dependency." + devDependencyKey + ".development", "1.3-SNAPSHOT" );
278         ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
279         
280         Map<String, String> versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( relDependencyKey );
281         assertEquals( "1.3", versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
282         
283         versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( devDependencyKey );
284         assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
285     }
286 
287     // MRELEASE-834
288     public void testSystemPropertyStartingWithDependency()
289     {
290         Properties properties = new Properties();
291         properties.setProperty( "dependency.locations.enabled", "false" );
292         ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
293     }
294     
295     private static ReleaseDescriptor copyReleaseDescriptor( ReleaseDescriptor originalReleaseDescriptor )
296     {
297         return createReleaseDescriptor( originalReleaseDescriptor.getWorkingDirectory() );
298     }
299 
300     private static Scm getScm( String connection, String developerConnection, String url, String tag )
301     {
302         Scm scm = new Scm();
303         scm.setConnection( connection );
304         scm.setDeveloperConnection( developerConnection );
305         scm.setTag( tag );
306         scm.setUrl( url );
307         return scm;
308     }
309 
310     private static ReleaseDescriptor createMergeDescriptor( String workingDirectory, String completedPhase )
311     {
312         ReleaseDescriptor mergeDescriptor = new ReleaseDescriptor();
313         mergeDescriptor.setScmSourceUrl( "scm-url-merge" );
314         mergeDescriptor.setCompletedPhase( completedPhase );
315         mergeDescriptor.setScmPrivateKeyPassPhrase( "passphrase-merge" );
316         mergeDescriptor.setScmPassword( "password-merge" );
317         mergeDescriptor.setScmPrivateKey( "private-key-merge" );
318         mergeDescriptor.setScmTagBase( "tag-base-merge" );
319         mergeDescriptor.setScmReleaseLabel( "tag-merge" );
320         mergeDescriptor.setScmUsername( "username-merge" );
321         mergeDescriptor.setAdditionalArguments( "additional-arguments-merge" );
322         mergeDescriptor.setPomFileName( "pom-file-name-merge" );
323         mergeDescriptor.setPreparationGoals( "preparation-goals-merge" );
324         mergeDescriptor.setWorkingDirectory( workingDirectory );
325         return mergeDescriptor;
326     }
327 
328     private static ReleaseDescriptor createReleaseDescriptor()
329         throws IOException
330     {
331         File workingDirectory = new File( "." );
332 
333         return createReleaseDescriptor(AbstractReleaseTestCase.getPath( workingDirectory ) );
334     }
335 
336     private static ReleaseDescriptor createReleaseDescriptor( String workingDirectory )
337     {
338         ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
339         releaseDescriptor.setScmSourceUrl( "scm-url" );
340         releaseDescriptor.setCompletedPhase( "completed-phase" );
341         releaseDescriptor.setScmPrivateKeyPassPhrase( "passphrase" );
342         releaseDescriptor.setScmPassword( "password" );
343         releaseDescriptor.setScmPrivateKey( "private-key" );
344         releaseDescriptor.setScmTagBase( "tag-base" );
345         releaseDescriptor.setScmReleaseLabel( "tag" );
346         releaseDescriptor.setScmUsername( "username" );
347         releaseDescriptor.setWorkingDirectory( workingDirectory );
348         releaseDescriptor.setAdditionalArguments( "additional-arguments" );
349         releaseDescriptor.setPomFileName( "pom-file-name" );
350         releaseDescriptor.setPreparationGoals( "preparation-goals" );
351 
352         return releaseDescriptor;
353     }
354 }