1 package org.apache.maven.shared.release.config;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.shared.release.phase.AbstractReleaseTestCase;
23 import org.apache.maven.shared.release.scm.IdentifiedScm;
24 import org.codehaus.plexus.PlexusTestCase;
25 import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
26
27 import java.io.File;
28 import java.io.IOException;
29
30
31
32
33
34
35 public class PropertiesReleaseDescriptorStoreTest
36 extends PlexusTestCase
37 {
38 private PropertiesReleaseDescriptorStore store;
39
40 private SecDispatcher secDispatcher;
41
42 protected void setUp()
43 throws Exception
44 {
45 super.setUp();
46 store = (PropertiesReleaseDescriptorStore) lookup( ReleaseDescriptorStore.ROLE, "properties" );
47 secDispatcher = (SecDispatcher) lookup( SecDispatcher.ROLE, "mng-4384" );
48 }
49
50 public void testReadFromFile()
51 throws ReleaseDescriptorStoreException
52 {
53 File file = getTestFile( "target/test-classes/release.properties" );
54
55 ReleaseDescriptor config = store.read( file );
56
57 ReleaseDescriptor expected = createExpectedReleaseConfiguration();
58
59 assertEquals( "check matches", expected, config );
60 }
61
62 public void testReadFromFileUsingWorkingDirectory()
63 throws Exception
64 {
65 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
66 releaseDescriptor.setWorkingDirectory( AbstractReleaseTestCase.getPath( getTestFile( "target/test-classes" ) ) );
67 ReleaseDescriptor config = store.read( releaseDescriptor );
68
69 ReleaseDescriptor expected = createExpectedReleaseConfiguration();
70 expected.setWorkingDirectory( releaseDescriptor.getWorkingDirectory() );
71
72 assertEquals( "check matches", expected, config );
73 }
74
75 public void testReadFromEmptyFile()
76 throws ReleaseDescriptorStoreException
77 {
78 File file = getTestFile( "target/test-classes/empty-release.properties" );
79
80 ReleaseDescriptor config = store.read( file );
81
82 assertDefaultReleaseConfiguration( config );
83 }
84
85 public void testReadMissingFile()
86 throws ReleaseDescriptorStoreException
87 {
88 File file = getTestFile( "target/test-classes/no-release.properties" );
89
90 ReleaseDescriptor config = store.read( file );
91
92 assertDefaultReleaseConfiguration( config );
93 }
94
95 public void testMergeFromEmptyFile()
96 throws ReleaseDescriptorStoreException, IOException
97 {
98 File file = getTestFile( "target/test-classes/empty-release.properties" );
99
100 ReleaseDescriptor mergeDescriptor = createMergeConfiguration();
101 ReleaseDescriptor config = store.read( mergeDescriptor, file );
102
103 assertEquals( "Check configurations merged", mergeDescriptor, config );
104 }
105
106 public void testMergeFromMissingFile()
107 throws ReleaseDescriptorStoreException, IOException
108 {
109 File file = getTestFile( "target/test-classes/no-release.properties" );
110
111 ReleaseDescriptor mergeDescriptor = createMergeConfiguration();
112 ReleaseDescriptor config = store.read( mergeDescriptor, file );
113
114 assertEquals( "Check configurations merged", mergeDescriptor, config );
115 }
116
117 public void testWriteToNewFile()
118 throws Exception
119 {
120 File file = getTestFile( "target/test-classes/new-release.properties" );
121 file.delete();
122 assertFalse( "Check file doesn't exist", file.exists() );
123
124 ReleaseDescriptor config = createReleaseConfigurationForWriting();
125
126 store.write( config, file );
127
128 ReleaseDescriptor rereadDescriptor = store.read( file );
129
130 assertAndAdjustScmPassword( config, rereadDescriptor );
131 assertAndAdjustScmPrivateKeyPassPhrase( config, rereadDescriptor );
132
133 assertEquals( "compare configuration", config, rereadDescriptor );
134 }
135
136 public void testWriteToWorkingDirectory()
137 throws Exception
138 {
139 File file = getTestFile( "target/test-classes/new/release.properties" );
140 file.delete();
141 assertFalse( "Check file doesn't exist", file.exists() );
142 file.getParentFile().mkdirs();
143
144 ReleaseDescriptor config = createReleaseConfigurationForWriting();
145 config.setWorkingDirectory( AbstractReleaseTestCase.getPath( file.getParentFile() ) );
146
147 store.write( config );
148
149 ReleaseDescriptor rereadDescriptor = store.read( file );
150 rereadDescriptor.setWorkingDirectory( AbstractReleaseTestCase.getPath( file.getParentFile() ) );
151
152 assertAndAdjustScmPassword( config, rereadDescriptor );
153 assertAndAdjustScmPrivateKeyPassPhrase( config, rereadDescriptor );
154
155 assertEquals( "compare configuration", config, rereadDescriptor );
156 }
157
158 public void testWriteToNewFileRequiredOnly()
159 throws ReleaseDescriptorStoreException
160 {
161 File file = getTestFile( "target/test-classes/new-release.properties" );
162 file.delete();
163 assertFalse( "Check file doesn't exist", file.exists() );
164
165 ReleaseDescriptor config = new ReleaseDescriptor();
166 config.setCompletedPhase( "completed-phase-write" );
167 config.setScmSourceUrl( "url-write" );
168
169 store.write( config, file );
170
171 ReleaseDescriptor rereadDescriptor = store.read( file );
172
173 assertEquals( "compare configuration", config, rereadDescriptor );
174 }
175
176 public void testWriteToNewFileDottedIds()
177 throws ReleaseDescriptorStoreException
178 {
179 File file = getTestFile( "target/test-classes/new-release.properties" );
180 file.delete();
181 assertFalse( "Check file doesn't exist", file.exists() );
182
183 ReleaseDescriptor config = new ReleaseDescriptor();
184 config.setCompletedPhase( "completed-phase-write" );
185 config.setScmSourceUrl( "url-write" );
186
187 config.mapReleaseVersion( "group.id:artifact.id", "1.1" );
188 config.mapDevelopmentVersion( "group.id:artifact.id", "1.2-SNAPSHOT" );
189
190 IdentifiedScm scm = new IdentifiedScm();
191 scm.setId( "id" );
192 scm.setConnection( "connection" );
193 scm.setDeveloperConnection( "devConnection" );
194 scm.setTag( "tag" );
195 scm.setUrl( "url" );
196 config.mapOriginalScmInfo( "group.id:artifact.id", scm );
197
198 store.write( config, file );
199
200 ReleaseDescriptor rereadDescriptor = store.read( file );
201
202 assertEquals( "compare configuration", config, rereadDescriptor );
203 }
204
205 public void testWriteToNewFileNullMappedScm()
206 throws ReleaseDescriptorStoreException
207 {
208 File file = getTestFile( "target/test-classes/new-release.properties" );
209 file.delete();
210 assertFalse( "Check file doesn't exist", file.exists() );
211
212 ReleaseDescriptor config = new ReleaseDescriptor();
213 config.setCompletedPhase( "completed-phase-write" );
214 config.setScmSourceUrl( "url-write" );
215
216 config.mapReleaseVersion( "group.id:artifact.id", "1.1" );
217 config.mapDevelopmentVersion( "group.id:artifact.id", "1.2-SNAPSHOT" );
218
219 config.mapOriginalScmInfo( "group.id:artifact.id", null );
220
221 store.write( config, file );
222
223 ReleaseDescriptor rereadDescriptor = store.read( file );
224
225 assertNull( "check null scm is mapped correctly",
226 rereadDescriptor.getOriginalScmInfo().get( "group.id:artifact.id" ) );
227
228 assertEquals( "compare configuration", config, rereadDescriptor );
229 }
230
231 public void testOverwriteFile()
232 throws Exception
233 {
234 File file = getTestFile( "target/test-classes/rewrite-release.properties" );
235 assertTrue( "Check file already exists", file.exists() );
236
237 ReleaseDescriptor config = createReleaseConfigurationForWriting();
238
239 store.write( config, file );
240
241 ReleaseDescriptor rereadDescriptor = store.read( file );
242
243 assertAndAdjustScmPassword( config, rereadDescriptor );
244 assertAndAdjustScmPrivateKeyPassPhrase( config, rereadDescriptor );
245
246 assertEquals( "compare configuration", config, rereadDescriptor );
247 }
248
249 public void testDeleteFile()
250 throws ReleaseDescriptorStoreException, IOException
251 {
252 File file = getTestFile( "target/test-classes/delete/release.properties" );
253 file.getParentFile().mkdirs();
254 file.createNewFile();
255 assertTrue( "Check file already exists", file.exists() );
256
257 ReleaseDescriptor config = createReleaseConfigurationForWriting();
258 config.setWorkingDirectory( AbstractReleaseTestCase.getPath( file.getParentFile() ) );
259
260 store.delete( config );
261
262 assertFalse( "Check file already exists", file.exists() );
263 }
264
265 public void testMissingDeleteFile()
266 throws ReleaseDescriptorStoreException, IOException
267 {
268 File file = getTestFile( "target/test-classes/delete/release.properties" );
269 file.getParentFile().mkdirs();
270 file.delete();
271 assertFalse( "Check file already exists", file.exists() );
272
273 ReleaseDescriptor config = createReleaseConfigurationForWriting();
274 config.setWorkingDirectory( AbstractReleaseTestCase.getPath( file.getParentFile() ) );
275
276 store.delete( config );
277
278 assertFalse( "Check file already exists", file.exists() );
279 }
280
281 private ReleaseDescriptor createReleaseConfigurationForWriting()
282 {
283 ReleaseDescriptor config = new ReleaseDescriptor();
284 config.setCompletedPhase( "completed-phase-write" );
285 config.setCommitByProject( true );
286 config.setScmSourceUrl( "url-write" );
287 config.setScmId( "id-write" );
288 config.setScmUsername( "username-write" );
289 config.setScmPassword( "password-write" );
290 config.setScmPrivateKey( "private-key-write" );
291 config.setScmPrivateKeyPassPhrase( "passphrase-write" );
292 config.setScmTagBase( "tag-base-write" );
293 config.setScmBranchBase( "branch-base-write" );
294 config.setScmReleaseLabel( "tag-write" );
295 config.setAdditionalArguments( "additional-args-write" );
296 config.setPreparationGoals( "preparation-goals-write" );
297 config.setCompletionGoals( "completion-goals-write" );
298 config.setPomFileName( "pom-file-name-write" );
299
300 config.mapReleaseVersion( "groupId:artifactId", "1.0" );
301 config.mapDevelopmentVersion( "groupId:artifactId", "1.1-SNAPSHOT" );
302
303 IdentifiedScm scm = new IdentifiedScm();
304 scm.setId( "id-write" );
305 scm.setConnection( "connection-write" );
306 scm.setDeveloperConnection( "developerConnection-write" );
307 scm.setUrl( "url-write" );
308 scm.setTag( "tag-write" );
309 config.mapOriginalScmInfo( "groupId:artifactId", scm );
310
311 scm = new IdentifiedScm();
312 scm.setConnection( "connection-write" );
313
314 config.mapOriginalScmInfo( "groupId:subproject1", scm );
315
316 return config;
317 }
318
319 private static void assertDefaultReleaseConfiguration( ReleaseDescriptor config )
320 {
321 assertNull( "Expected no completedPhase", config.getCompletedPhase() );
322 assertFalse( "Expected no commitPerProject", config.isCommitByProject() );
323 assertNull( "Expected no id", config.getScmId() );
324 assertNull( "Expected no url", config.getScmSourceUrl() );
325 assertNull( "Expected no username", config.getScmUsername() );
326 assertNull( "Expected no password", config.getScmPassword() );
327 assertNull( "Expected no privateKey", config.getScmPrivateKey() );
328 assertNull( "Expected no passphrase", config.getScmPrivateKeyPassPhrase() );
329 assertNull( "Expected no tagBase", config.getScmTagBase() );
330 assertNull( "Expected no tag", config.getScmReleaseLabel() );
331 assertNull( "Expected no additional arguments", config.getAdditionalArguments() );
332 assertNull( "Expected no preparation goals", config.getPreparationGoals() );
333 assertNull( "Expected no completion goals", config.getCompletionGoals() );
334 assertNull( "Expected no pom file name", config.getPomFileName() );
335
336 assertNull( "Expected no workingDirectory", config.getWorkingDirectory() );
337 assertFalse( "Expected no generateReleasePoms", config.isGenerateReleasePoms() );
338 assertFalse( "Expected no useEditMode", config.isScmUseEditMode() );
339 assertTrue( "Expected default interactive", config.isInteractive() );
340 assertFalse( "Expected no addScema", config.isAddSchema() );
341
342 assertTrue( "Expected no release version mappings", config.getReleaseVersions().isEmpty() );
343 assertTrue( "Expected no dev version mappings", config.getDevelopmentVersions().isEmpty() );
344 assertTrue( "Expected no scm mappings", config.getOriginalScmInfo().isEmpty() );
345 assertNotNull( "Expected resolved snapshot dependencies map", config.getResolvedSnapshotDependencies() );
346 }
347
348 public ReleaseDescriptor createMergeConfiguration()
349 throws IOException
350 {
351 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
352
353 releaseDescriptor.setScmSourceUrl( "scm-url" );
354 releaseDescriptor.setScmUsername( "username" );
355
356 releaseDescriptor.setWorkingDirectory( AbstractReleaseTestCase.getPath( getTestFile( "target/test-working-directory" ) ) );
357
358
359 return releaseDescriptor;
360 }
361
362 private void assertAndAdjustScmPassword( ReleaseDescriptor expected, ReleaseDescriptor original )
363 throws Exception
364 {
365 String expectedPassword = expected.getScmPassword();
366 String originalPassword = original.getScmPassword();
367
368
369 if ( expectedPassword != null ? !expectedPassword.equals( originalPassword ) : originalPassword != null )
370 {
371 assertEquals( secDispatcher.decrypt( expectedPassword ), secDispatcher.decrypt( originalPassword ) );
372
373 expected.setScmPassword( originalPassword );
374 }
375 assertEquals( expected.getScmPassword(), original.getScmPassword() );
376 }
377
378 private void assertAndAdjustScmPrivateKeyPassPhrase( ReleaseDescriptor expected, ReleaseDescriptor original )
379 throws Exception
380 {
381 String expectedPassPhrase = expected.getScmPrivateKeyPassPhrase();
382 String originalPassPhrase = original.getScmPrivateKeyPassPhrase();
383
384
385 if ( expectedPassPhrase != null ? !expectedPassPhrase.equals( originalPassPhrase ) : originalPassPhrase != null )
386 {
387 assertEquals( secDispatcher.decrypt( expectedPassPhrase ), secDispatcher.decrypt( originalPassPhrase ) );
388
389 expected.setScmPrivateKeyPassPhrase( originalPassPhrase );
390 }
391 assertEquals( expected.getScmPrivateKeyPassPhrase(), original.getScmPrivateKeyPassPhrase() );
392 }
393
394 private ReleaseDescriptor createExpectedReleaseConfiguration()
395 {
396 ReleaseDescriptor expected = new ReleaseDescriptor();
397 expected.setCompletedPhase( "step1" );
398 expected.setCommitByProject( true );
399 expected.setScmId( "scm-id" );
400 expected.setScmSourceUrl( "scm-url" );
401 expected.setScmUsername( "username" );
402 expected.setScmPassword( "password" );
403 expected.setScmPrivateKey( "private-key" );
404 expected.setScmPrivateKeyPassPhrase( "passphrase" );
405 expected.setScmTagBase( "tagBase" );
406 expected.setScmTagNameFormat( "expectedTagNameFormat" );
407 expected.setScmBranchBase( "branchBase" );
408 expected.setScmReleaseLabel( "tag" );
409 expected.setAdditionalArguments( "additional-arguments" );
410 expected.setPreparationGoals( "preparation-goals" );
411 expected.setCompletionGoals( "completion-goals" );
412 expected.setPomFileName( "pom-file-name" );
413 expected.setWorkingDirectory( null );
414 expected.setGenerateReleasePoms( false );
415 expected.setScmUseEditMode( false );
416 expected.setInteractive( true );
417 expected.setAddSchema( false );
418 expected.mapReleaseVersion( "groupId:artifactId1", "2.0" );
419 expected.mapReleaseVersion( "groupId:artifactId2", "3.0" );
420 expected.mapDevelopmentVersion( "groupId:artifactId1", "2.1-SNAPSHOT" );
421 expected.mapDevelopmentVersion( "groupId:artifactId2", "3.0.1-SNAPSHOT" );
422 IdentifiedScm scm = new IdentifiedScm();
423 scm.setId( "id" );
424 scm.setConnection( "connection" );
425 scm.setDeveloperConnection( "developerConnection" );
426 scm.setUrl( "url" );
427 scm.setTag( "tag" );
428 expected.mapOriginalScmInfo( "groupId:artifactId1", scm );
429 scm = new IdentifiedScm();
430 scm.setId( null );
431 scm.setConnection( "connection2" );
432 scm.setUrl( "url2" );
433 scm.setTag( null );
434 scm.setDeveloperConnection( null );
435 expected.mapOriginalScmInfo( "groupId:artifactId2", scm );
436 expected.mapResolvedSnapshotDependencies( "external:artifactId", "1.0", "1.1-SNAPSHOT" );
437
438 return expected;
439 }
440
441 }