1 package org.apache.maven.scm.provider.accurev.cli;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.hamcrest.CoreMatchers.is;
23 import static org.hamcrest.CoreMatchers.nullValue;
24 import static org.hamcrest.Matchers.not;
25 import static org.junit.Assert.assertThat;
26 import static org.junit.Assume.assumeTrue;
27
28 import java.io.BufferedReader;
29 import java.io.File;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.io.InputStreamReader;
33 import java.io.StringReader;
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.List;
37
38 import org.apache.maven.scm.ScmTestCase;
39 import org.apache.maven.scm.log.ScmLogger;
40 import org.apache.maven.scm.provider.accurev.AccuRev;
41 import org.apache.maven.scm.provider.accurev.AccuRevStat;
42 import org.codehaus.plexus.util.Os;
43 import org.codehaus.plexus.util.cli.CommandLineException;
44 import org.codehaus.plexus.util.cli.Commandline;
45 import org.codehaus.plexus.util.cli.StreamConsumer;
46 import org.junit.After;
47 import org.junit.Before;
48 import org.junit.Test;
49 import org.junit.runner.RunWith;
50 import org.junit.runners.JUnit4;
51
52 @RunWith( JUnit4.class )
53 public class AccuRevCommandLineTest
54 extends ScmTestCase
55 {
56
57 public class AccuRevCommandLineTester
58 extends AccuRevCommandLine
59 {
60
61 private BufferedReader stdinReader;
62
63 private String response;
64
65 public BufferedReader getStdinReader()
66 {
67
68 return stdinReader;
69 }
70
71 private ScmLogger initLog()
72 throws Exception
73 {
74
75 return AccuRevJUnitUtil.getLogger( getContainer() );
76 }
77
78 public AccuRevCommandLineTester()
79 throws Exception
80 {
81
82 setLogger( initLog() );
83 }
84
85 public AccuRevCommandLineTester( String host, int port )
86 throws Exception
87 {
88
89 super( host, port );
90 setLogger( initLog() );
91 }
92
93 @Override
94 protected int executeCommandLine( Commandline cl, InputStream stdin, CommandOutputConsumer stdout,
95 StreamConsumer stderr )
96 throws CommandLineException
97 {
98
99 if ( stdin != null )
100 {
101 stdinReader = new BufferedReader( new InputStreamReader( stdin ) );
102 }
103 else
104 {
105 stdinReader = null;
106 }
107 try
108 {
109 if ( response != null )
110 {
111 BufferedReader reader = new BufferedReader( new StringReader( response ) );
112 String line = reader.readLine();
113 while ( line != null )
114 {
115 stdout.consumeLine( line );
116 line = reader.readLine();
117 }
118 }
119 }
120 catch ( IOException e )
121 {
122 throw new CommandLineException( "Unexpected error", e );
123 }
124 return 0;
125 }
126
127 public void setResponse( String response )
128 {
129
130 this.response = response;
131
132 }
133
134 }
135
136 @Before
137 @Override
138 public void setUp()
139 throws Exception
140 {
141
142 super.setUp();
143 }
144
145 @After
146 @Override
147 public void tearDown()
148 throws Exception
149 {
150
151 super.tearDown();
152 }
153
154 @Override
155 protected InputStream getCustomConfiguration()
156 throws Exception
157 {
158
159 return AccuRevJUnitUtil.getPlexusConfiguration();
160 }
161
162 @Test
163 public void testPromoteAll()
164 throws Exception
165 {
166
167 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
168
169 assertThat( accuRevCL.promoteAll( new File( "/my/workspace" ), "cmt msg" ), not( nullValue() ) );
170 Commandline lastCL = accuRevCL.getCommandline();
171 assertThat( lastCL.getWorkingDirectory(), is( new File( "/my/workspace" ).getCanonicalFile() ) );
172 assertThat( lastCL.getArguments(), is( new String[] { "promote", "-p", "-K", "-c", "cmt msg" } ) );
173
174 }
175
176 @Test
177 public void testPromote()
178 throws Exception
179 {
180
181 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
182 List<File> files = new ArrayList<File>();
183 File testfile = new File( "my/test/file" );
184 files.add( testfile );
185
186 assertThat( accuRevCL.promote( new File( "/my/workspace" ), files, "cmt msg" ), not( nullValue() ) );
187 Commandline lastCL = accuRevCL.getCommandline();
188 assertThat( lastCL.getWorkingDirectory(), is( new File( "/my/workspace" ).getCanonicalFile() ) );
189 assertThat( lastCL.getArguments(), is( new String[] { "promote", "-K", "-c", "cmt msg", testfile.getPath() } ) );
190
191 }
192
193 @Test
194 public void testLogin()
195 throws Exception
196 {
197
198 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
199 accuRevCL.setResponse( "Password: a124235bacc3ff" );
200 accuRevCL.setExecutable( "accurev.exe" );
201 accuRevCL.login( "aUser", "topSecret" );
202 Commandline lastCL = accuRevCL.getCommandline();
203
204 if ( Os.isFamily( Os.FAMILY_WINDOWS ) )
205 {
206 assertThat( lastCL.getArguments(), is( new String[] { "login", "-A", "aUser", "topSecret" } ) );
207 assertThat( accuRevCL.getStdinReader(), is( nullValue() ) );
208 }
209 else
210 {
211 assertThat( lastCL.getArguments(), is( new String[] { "login", "-A", "aUser" } ) );
212 assertThat( accuRevCL.getStdinReader().readLine(), is( "topSecret" ) );
213 }
214
215 accuRevCL.info( null );
216 assertThat( lastCL.getArguments(), is( new String[] { "info", "-A", "a124235bacc3ff" } ) );
217
218 assumeTrue( !Os.isFamily( Os.FAMILY_WINDOWS ) );
219
220 accuRevCL.login( "anOther", "opensaysme" );
221 assertThat( lastCL.getArguments(), is( new String[] { "login", "-A", "anOther" } ) );
222 assertThat( accuRevCL.getStdinReader().readLine(), is( "opensaysme" ) );
223
224 accuRevCL.login( "AUser", null );
225 assertThat( lastCL.getArguments(), is( new String[] { "login", "-A", "AUser" } ) );
226 assertThat( accuRevCL.getStdinReader().readLine(), is( "" ) );
227
228 }
229
230 @Test
231 public void testPopExternal()
232 throws Exception
233 {
234
235 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester( "aHost", 5051 );
236 accuRevCL.setExecutable( "accurev.exe" );
237 File testfile = new File( "/my/export" );
238 File projectDir = new File( "/./project/dir" );
239 accuRevCL.popExternal( testfile, "stream", "12", Collections.singleton( projectDir ) );
240
241 Commandline lastCL = accuRevCL.getCommandline();
242 assertThat( lastCL.getLiteralExecutable(), is( "accurev.exe" ) );
243 assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream", "-L",
244 testfile.getAbsolutePath(), "-t", "12", "-R", projectDir.getPath() } ) );
245
246 }
247
248 @Test
249 public void testPopExternalWithTransactionNow()
250 throws Exception
251 {
252 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester( "aHost", 5051 );
253 accuRevCL.setExecutable( "accurev.exe" );
254 File testfile = new File( "/my/export" );
255 File projectDir = new File( "/./project/dir" );
256 accuRevCL.popExternal( testfile, "stream", "now", Collections.singleton( projectDir ) );
257
258 Commandline lastCL = accuRevCL.getCommandline();
259 assertThat( lastCL.getLiteralExecutable(), is( "accurev.exe" ) );
260 assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream", "-L",
261 testfile.getAbsolutePath(), "-R", projectDir.getPath() } ) );
262 }
263
264 @Test
265 public void testPopExternalWithTransactionNull()
266 throws Exception
267 {
268 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester( "aHost", 5051 );
269 accuRevCL.setExecutable( "accurev.exe" );
270 File testfile = new File( "/my/export" );
271 File projectDir = new File( "/./project/dir" );
272 accuRevCL.popExternal( testfile, "stream", null, Collections.singleton( projectDir ) );
273
274 Commandline lastCL = accuRevCL.getCommandline();
275 assertThat( lastCL.getLiteralExecutable(), is( "accurev.exe" ) );
276 assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream", "-L",
277 testfile.getAbsolutePath(), "-R", projectDir.getPath() } ) );
278 }
279
280 @Test
281 public void testPopWorkSpace()
282 throws Exception
283 {
284
285 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
286 accuRevCL.setExecutable( "accurev.exe" );
287
288 File testFile = new File( "project/dir" );
289 accuRevCL.pop( new File( "/home/workspace" ), Collections.singleton( testFile ) );
290
291 Commandline lastCL = accuRevCL.getCommandline();
292 assertThat( lastCL.getLiteralExecutable(), is( "accurev.exe" ) );
293
294 if (lastCL.getWorkingDirectory().getCanonicalFile().equals( lastCL.getWorkingDirectory().getAbsoluteFile() ))
295 {
296 assertThat( lastCL.getWorkingDirectory(), is( new File( "/home/workspace" ).getCanonicalFile() ) );
297 } else {
298 assertThat( lastCL.getWorkingDirectory(), is( new File( "/home/workspace" ).getAbsoluteFile() ));
299 }
300
301 assertThat( lastCL.getArguments(), is( new String[] { "pop", "-R", testFile.getPath() } ) );
302
303 }
304
305 @Test
306 public void testMkws()
307 throws Exception
308 {
309
310 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
311 accuRevCL.setExecutable( "accurev2.exe" );
312 File workspaceFile = new File( "/my/workspace/location" );
313 accuRevCL.mkws( "myStream", "myWorkSpaceName", workspaceFile );
314
315 Commandline lastCL = accuRevCL.getCommandline();
316 assertThat( lastCL.getLiteralExecutable(), is( "accurev2.exe" ) );
317 assertThat( lastCL.getWorkingDirectory(), is( workspaceFile.getCanonicalFile() ) );
318 assertThat( lastCL.getArguments(), is( new String[] { "mkws", "-b", "myStream", "-w", "myWorkSpaceName", "-l",
319 workspaceFile.getAbsolutePath() } ) );
320
321 }
322
323 @Test
324 public void testUpdate()
325 throws Exception
326 {
327
328 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
329 File workspaceFile = new File( "/my/ws/loc" );
330 accuRevCL.update( workspaceFile, "highest" );
331
332 Commandline lastCL = accuRevCL.getCommandline();
333 assertThat( lastCL.getWorkingDirectory(), is( workspaceFile.getCanonicalFile() ) );
334 assertThat( lastCL.getArguments(), is( new String[] { "update", "-t", "highest" } ) );
335
336 }
337
338 @Test
339 public void testInfo()
340 throws Exception
341 {
342
343 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
344 accuRevCL.info( new File( "/my/base/dir" ) );
345
346 Commandline lastCL = accuRevCL.getCommandline();
347 assertThat( lastCL.getWorkingDirectory(), is( new File( "/my/base/dir" ).getCanonicalFile() ) );
348 assertThat( lastCL.getArguments(), is( new String[] { "info" } ) );
349
350 }
351
352 @Test
353 public void testRemoveWorkspace()
354 throws Exception
355 {
356
357 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
358 accuRevCL.rmws( "myWorkspaceName" );
359
360 Commandline lastCL = accuRevCL.getCommandline();
361 assertThat( lastCL.getArguments(), is( new String[] { "rmws", "-s", "myWorkspaceName" } ) );
362
363 }
364
365 @Test
366 public void testStatIgnored()
367 throws Exception
368 {
369
370 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
371 File testFile = new File( "/my/base/dir" );
372 accuRevCL.stat( testFile );
373
374 Commandline lastCL = accuRevCL.getCommandline();
375 assertThat( lastCL.getArguments(), is( new String[] { "stat", "-fx", testFile.getAbsolutePath() } ) );
376
377 }
378
379 @Test
380 public void testReactivate()
381 throws Exception
382 {
383
384 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
385 accuRevCL.reactivate( "ArANdomWorkspaceName" );
386
387 Commandline lastCL = accuRevCL.getCommandline();
388 assertThat( lastCL.getArguments(), is( new String[] { "reactivate", "wspace", "ArANdomWorkspaceName" } ) );
389
390 }
391
392 @Test
393 public void testReset()
394 throws Exception
395 {
396
397 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
398 Commandline commandline = accuRevCL.getCommandline();
399 Commandline cl = commandline;
400 List<String> shellCmds = cl.getShell().getShellCommandLine( cl.getArguments() );
401 accuRevCL.reset();
402 assertThat( cl.getShell().getShellCommandLine( cl.getArguments() ), is( shellCmds ) );
403 assertThat( commandline.getLiteralExecutable(), is( "accurev" ) );
404 }
405
406 @Test
407 public void testAdd()
408 throws Exception
409 {
410
411 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
412 List<File> files = new ArrayList<File>();
413 File testFile = new File( "my/test/file" );
414 files.add( testFile );
415 assertThat( accuRevCL.add( new File( "/workspace" ), files, "my commit message" ), not( nullValue() ) );
416
417 Commandline lastCL = accuRevCL.getCommandline();
418 assertThat( lastCL.getWorkingDirectory(), is( new File( "/workspace" ).getCanonicalFile() ) );
419 assertThat( lastCL.getArguments(), is( new String[] { "add", "-c", "my commit message", testFile.getPath() } ) );
420
421 assertThat( accuRevCL.add( new File( "/workspace" ), files, "" ), not( nullValue() ) );
422 assertThat( lastCL.getArguments(), is( new String[] { "add", "-c", AccuRev.DEFAULT_ADD_MESSAGE,
423 testFile.getPath() } ) );
424
425 }
426
427 @SuppressWarnings( "unchecked" )
428 @Test
429 public void testRemove()
430 throws Exception
431 {
432
433 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
434 List<File> files = new ArrayList<File>();
435 File testFile = new File( "my/test/file" );
436 files.add( testFile );
437 File workspaceFile = new File( "/workspace" );
438 assertThat( accuRevCL.defunct( workspaceFile, files, "my commit message" ), not( nullValue() ) );
439
440 Commandline lastCL = accuRevCL.getCommandline();
441 assertThat( lastCL.getWorkingDirectory(), is( workspaceFile.getCanonicalFile() ) );
442 assertThat( lastCL.getArguments(),
443 is( new String[] { "defunct", "-c", "my commit message", testFile.getPath() } ) );
444
445 assertThat( accuRevCL.defunct( workspaceFile, files, "" ), not( nullValue() ) );
446 assertThat( lastCL.getArguments(), is( new String[] { "defunct", "-c", AccuRev.DEFAULT_REMOVE_MESSAGE,
447 testFile.getPath() } ) );
448
449 assertThat( accuRevCL.defunct( workspaceFile, Collections.EMPTY_LIST, "" ), not( nullValue() ) );
450 assertThat( lastCL.getArguments(), is( new String[] { "defunct", "-c", AccuRev.DEFAULT_REMOVE_MESSAGE, "." } ) );
451
452 assertThat( accuRevCL.defunct( workspaceFile, null, "" ), not( nullValue() ) );
453 assertThat( lastCL.getArguments(), is( new String[] { "defunct", "-c", AccuRev.DEFAULT_REMOVE_MESSAGE, "." } ) );
454
455 }
456
457 @Test
458 public void testChangeWorkspace()
459 throws Exception
460 {
461
462 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
463 accuRevCL.chws( new File( "/my/workspace" ), "the_workspace_name_me", "a-snapshot" );
464
465 Commandline lastCL = accuRevCL.getCommandline();
466 assertThat( lastCL.getWorkingDirectory(), is( new File( "/my/workspace" ).getCanonicalFile() ) );
467 assertThat( lastCL.getArguments(), is( new String[] { "chws", "-s", "the_workspace_name_me", "-b",
468 "a-snapshot", "-l", "." } ) );
469
470 }
471
472 @Test
473 public void testMkSnap()
474 throws Exception
475 {
476
477 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
478 accuRevCL.mksnap( "a-snapshot", "basisStream" );
479
480 Commandline lastCL = accuRevCL.getCommandline();
481 assertThat( lastCL.getArguments(), is( new String[] { "mksnap", "-s", "a-snapshot", "-b", "basisStream", "-t",
482 "now" } ) );
483
484 }
485
486 @Test
487 public void testStatTag()
488 throws Exception
489 {
490
491 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
492 accuRevCL.statTag( "a-snapshot" );
493
494 Commandline lastCL = accuRevCL.getCommandline();
495 assertThat( lastCL.getArguments(), is( new String[] { "stat", "-a", "-ffl", "-s", "a-snapshot" } ) );
496
497 }
498
499 @Test
500 public void testStatBackingStream()
501 throws Exception
502 {
503
504 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
505
506 File basedir = new File( "/my/workspace" );
507 List<File> elements = new ArrayList<File>( 1 );
508 File addedOrModifiedFile = new File( "addedOrModified/file" );
509 elements.add( addedOrModifiedFile );
510 accuRevCL.statBackingStream( basedir, elements );
511 Commandline lastCL = accuRevCL.getCommandline();
512 assertThat( lastCL.getWorkingDirectory(), is( basedir.getCanonicalFile() ) );
513 assertThat( lastCL.getArguments(), is( new String[] { "stat", "-b", "-ffr", addedOrModifiedFile.getPath() } ) );
514
515 }
516
517 @Test
518 public void testStatRecursive()
519 throws Exception
520 {
521
522 File basedir = new File( "/my/workspace" );
523 List<File> noFiles = new ArrayList<File>();
524
525 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
526 accuRevCL.stat( basedir, noFiles, AccuRevStat.KEPT );
527 Commandline lastCL = accuRevCL.getCommandline();
528 assertThat( lastCL.getWorkingDirectory(), is( basedir.getCanonicalFile() ) );
529 assertThat( lastCL.getArguments(), is( new String[] { "stat", "-ffr", "-k", "-R", "." } ) );
530
531 noFiles.add( new File( "." ) );
532 accuRevCL.stat( basedir, noFiles, AccuRevStat.DEFUNCT );
533 lastCL = accuRevCL.getCommandline();
534 assertThat( lastCL.getWorkingDirectory(), is( basedir.getCanonicalFile() ) );
535 assertThat( lastCL.getArguments(), is( new String[] { "stat", "-ffr", "-D", "-R", "." } ) );
536 }
537
538 @Test
539 public void testStatSpecificFilesAndDirectories()
540 throws Exception
541 {
542
543 File basedir = new File( "/my/workspace" );
544 List<File> files = new ArrayList<File>();
545 File testDir = new File( "a/dir" );
546 files.add( testDir );
547 File testFile = new File( "a/dir/a.file" );
548 files.add( testFile );
549
550 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
551 accuRevCL.stat( basedir, files, AccuRevStat.MISSING );
552 Commandline lastCL = accuRevCL.getCommandline();
553 assertThat( lastCL.getWorkingDirectory(), is( basedir.getCanonicalFile() ) );
554 assertThat( lastCL.getArguments(), is( new String[] { "stat", "-ffr", "-M", testDir.getPath(),
555 testFile.getPath() } ) );
556
557 }
558
559 @Test
560 public void testAnnotate()
561 throws Exception
562 {
563
564 File basedir = new File( "/my/workspace" );
565 File file = new File( "src/main/java/foo.java" );
566
567 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
568 accuRevCL.annotate( basedir, file );
569
570 Commandline lastCL = accuRevCL.getCommandline();
571 assertThat( lastCL.getWorkingDirectory(), is( basedir.getCanonicalFile() ) );
572 assertThat( lastCL.getArguments(), is( new String[] { "annotate", "-ftud", file.getPath() } ) );
573
574 }
575
576 @Test
577 public void testDiff()
578 throws Exception
579 {
580 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
581
582 accuRevCL.diff( "myStream", "fromSpec", "toSpec" );
583 Commandline lastCL = accuRevCL.getCommandline();
584 assertThat( lastCL.getArguments(), is( new String[] { "diff", "-fx", "-a", "-i", "-v", "myStream", "-V",
585 "myStream", "-t", "fromSpec-toSpec" } ) );
586
587 }
588
589 @Test
590 public void testShowStream()
591 throws Exception
592 {
593 AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
594 accuRevCL.showStream( "mystream" );
595 Commandline lastCL = accuRevCL.getCommandline();
596 assertThat( lastCL.getArguments(), is( new String[] { "show", "-s", "mystream", "-fx", "streams" } ) );
597 ;
598 }
599 }