blob: 0aa5460aa289879df10cb6cbde7e0f0fbef5d013 [file] [log] [blame]
package org.apache.maven.scm.provider.accurev.command.checkout;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import static org.apache.maven.scm.ScmFileMatcher.assertHasScmFile;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.*;
import java.io.File;
import java.util.Collections;
import java.util.List;
import org.apache.maven.scm.CommandParameter;
import org.apache.maven.scm.CommandParameters;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFile;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmFileStatus;
import org.apache.maven.scm.ScmRevision;
import org.apache.maven.scm.ScmTag;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommandTest;
import org.junit.Test;
/**
* checkout a revision or branch (stream/tranid)-> make workspace. If basedir is empty and represents the top of an
* existing workspace, then reparent the workspace if necessary and repopulate missing file, and update If basedir is
* not empty or is a subdirectory of an existing workspace throw exception. Otherwise make a workspace and update
* Special case for release plugin - checkout a tag to an ignored and empty subdirectory of an existing workspace. Treat
* as an export. deactivate the workspace, export with pop -v -L then reactivate the workspace.
*
* @author ggardner
*/
public class AccuRevCheckOutCommandTest
extends AbstractAccuRevCommandTest
{
@Test
public void testCheckout()
throws Exception
{
when( accurev.mkws( "myStream", AccuRevCheckOutCommand.getWorkSpaceName( basedir, "myStream" ), basedir ) ).thenReturn(
true );
List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) );
when( accurev.update( basedir, "now" ) ).thenReturn( updatedFiles );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), new CommandParameters() );
assertThat( result.isSuccess(), is( true ) );
assertThat( result.getRelativePathProjectDirectory(), is( "/project/dir" ) );
List<ScmFile> checkedOutFiles = result.getCheckedOutFiles();
assertThat( checkedOutFiles.size(), is( 1 ) );
assertHasScmFile( checkedOutFiles, "updated/file", ScmFileStatus.CHECKED_OUT );
}
@Test
public void testCheckoutFailure()
throws Exception
{
when( accurev.mkws( "myStream", AccuRevCheckOutCommand.getWorkSpaceName( basedir, "myStream" ), basedir ) ).thenReturn(
true );
when( accurev.update( basedir, "now" ) ).thenReturn( null );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), new CommandParameters() );
assertThat( result.isSuccess(), is( false ) );
assertThat( result.getProviderMessage(), notNullValue() );
}
@Test
public void testReCheckoutExistingWorkspaceSameBasis()
throws Exception
{
// Set the info result to return a workspace that already exists
info.setWorkSpace( "someOldStream_someUser" );
info.setBasis( "myStream" );
info.setTop( basedir.getAbsolutePath() );
List<File> emptyList = Collections.emptyList();
when( accurev.pop( basedir, null ) ).thenReturn( emptyList );
List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) );
when( accurev.update( basedir, null ) ).thenReturn( updatedFiles );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), new CommandParameters() );
verify( accurev ).pop( basedir, null );
assertThat( result.isSuccess(), is( true ) );
assertThat( result.getRelativePathProjectDirectory(), is( "/project/dir" ) );
}
@Test
public void testReCheckoutExistingWorkspaceDifferentBasis()
throws Exception
{
// Set the info result to return a workspace that already exists
info.setWorkSpace( "someOldStream_someUser" );
info.setBasis( "myStream" );
info.setTop( basedir.getAbsolutePath() );
when( accurev.chws( basedir, "someOldStream_someUser", "mySnapShot" ) ).thenReturn( true );
List<File> emptyPop = Collections.emptyList();
lenient().when( accurev.popExternal( basedir, null, null, null ) ).thenReturn( emptyPop );
List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) );
when( accurev.update( basedir, null ) ).thenReturn( updatedFiles );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CommandParameters params = new CommandParameters();
params.setScmVersion( CommandParameter.SCM_VERSION, new ScmTag( "mySnapShot" ) );
CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), params );
verify( accurev ).chws( basedir, "someOldStream_someUser", "mySnapShot" );
assertThat( result.isSuccess(), is( true ) );
assertThat( result.getRelativePathProjectDirectory(), is( "/project/dir" ) );
}
@Test( expected = ScmException.class )
public void testReCheckoutSubdirectoryOfExistingWorkspaceThrowsException()
throws Exception
{
// Set the info result to return a workspace that already exists
info.setWorkSpace( "someOldStream_someUser" );
info.setBasis( "myStream" );
info.setTop( basedir.getParentFile().getAbsolutePath() );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CommandParameters params = new CommandParameters();
params.setScmVersion( CommandParameter.SCM_VERSION, new ScmTag( "mySnapShot" ) );
command.checkout( repo, new ScmFileSet( basedir ), params );
fail( "Expected exception" );
}
@Test
public void testCheckoutToVersionNewWorkspace()
throws Exception
{
when( accurev.mkws( "anotherStream", AccuRevCheckOutCommand.getWorkSpaceName( basedir, "anotherStream" ), basedir ) ).thenReturn(
true );
List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) );
when( accurev.update( basedir, "now" ) ).thenReturn( updatedFiles );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CommandParameters parameters = new CommandParameters();
parameters.setScmVersion( CommandParameter.SCM_VERSION, new ScmRevision( "anotherStream/12" ) );
CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), parameters );
assertThat( result.isSuccess(), is( true ) );
assertThat( result.getCheckedOutFiles().size(), is( 1 ) );
}
@Test
public void testCheckoutToVersionExistingWorkspace()
throws Exception
{
// Set the info result to return a workspace that already exists
info.setWorkSpace( "someOldStream_someUser" );
info.setBasis( "myStream" );
info.setTop( basedir.getAbsolutePath() );
List<File> emptyList = Collections.emptyList();
when( accurev.pop( basedir, null ) ).thenReturn( emptyList );
List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) );
when( accurev.update( basedir, "12" ) ).thenReturn( updatedFiles );
AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() );
CommandParameters parameters = new CommandParameters();
parameters.setScmVersion( CommandParameter.SCM_VERSION, new ScmRevision( "myStream/12" ) );
CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), parameters );
verify( accurev ).pop( basedir, null );
assertThat( result.isSuccess(), is( true ) );
assertThat( result.getCheckedOutFiles().size(), is( 1 ) );
}
}