view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoPatchTest.java @ 693:2c9f7f6d8a12

TODO
author eugene.petrenko@gmail.com
date Thu, 19 Dec 2013 19:17:12 +0100
parents 49a03af60439
children 31a1aca3305c
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial;

import jetbrains.buildServer.vcs.CheckoutRules;
import jetbrains.buildServer.vcs.VcsRoot;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;

import static com.intellij.openapi.util.io.FileUtil.delete;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.buildPatch;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot;

@Test
public class SubrepoPatchTest extends BaseMercurialPatchTestCase {

  private MercurialVcsSupport myVcs;
  private File myRemoteRepo1;
  private File myRemoteRepo2;
  private File myRemoteRepo3;
  private ServerPluginConfig myPluginConfig;
  private VcsRoot myRoot;

  @BeforeMethod
  public void setUp() throws Exception {
    super.setUp();
    File remoteRepoParentDir = myTempFiles.createTempDir();
    myRemoteRepo1 = new File(remoteRepoParentDir, "r1");
    myRemoteRepo2 = new File(remoteRepoParentDir, "r2");
    myRemoteRepo3 = new File(remoteRepoParentDir, "r3");
    copyRepository(new File("mercurial-tests/testData/subrepos/r1"), myRemoteRepo1);
    copyRepository(new File("mercurial-tests/testData/subrepos/r2"), myRemoteRepo2);
    copyRepository(new File("mercurial-tests/testData/subrepos/r3"), myRemoteRepo3);
    myPluginConfig = new ServerPluginConfigBuilder()
            .cachesDir(myTempFiles.createTempDir())
            .detectSubrepoChanges(true)
            .build();
    myVcs = mercurialSupport().withConfig(myPluginConfig).build();
    myRoot = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).withSubrepoChanges(true).build();
  }

  @Override
  protected String getTestDataPath() {
    return "mercurial-tests/testData";
  }


  public void clean_patch_should_use_subrepo_clones_on_the_server() throws Exception {
    //this makes plugin to clone r1 and its subrepos
    myVcs.getCollectChangesPolicy().collectChanges(myRoot, "e4eced2b7381", "d64d9799c143", CheckoutRules.DEFAULT);

    //delete remote subrepo to make sure patch is build from the clone on the server
    delete(myRemoteRepo3);

    setName("clean_patch_with_subrepositories");
    checkPatchResult(buildPatch(myVcs, myRoot, null, "d350e7209906", CheckoutRules.DEFAULT).toByteArray());
  }


  public void clean_patch_should_use_subrepo_clones_on_the_server_recursive_case() throws Exception {
    //this makes plugin to clone r1 and its subrepos
    myVcs.getCollectChangesPolicy().collectChanges(myRoot, "e4eced2b7381", "d64d9799c143", CheckoutRules.DEFAULT);

    //delete remote subrepos to make sure patch is build from the clone on the server
    delete(myRemoteRepo2);
    delete(myRemoteRepo3);

    setName("clean_patch_recursive_subrepos");
    checkPatchResult(buildPatch(myVcs, myRoot, null, "d64d9799c143", CheckoutRules.DEFAULT).toByteArray());
  }


  public void incremental_patch_subrepo_revision_changed() throws Exception {
    setName("inc_patch_subrepo_revision_changed");
    checkPatchResult(buildPatch(myVcs, myRoot, "d350e7209906", "09c256b6163e", CheckoutRules.DEFAULT).toByteArray());
  }


  public void incremental_patch_subrepo_added() throws Exception {
    setName("inc_patch_subrepo_added");
    checkPatchResult(buildPatch(myVcs, myRoot, "4d7b3db8779f", "d350e7209906", CheckoutRules.DEFAULT).toByteArray());
  }


  public void incremental_patch_subrepo_removed() throws Exception {
    setName("inc_patch_subrepo_removed");
    checkPatchResult(buildPatch(myVcs, myRoot, "34017377d9c3", "4d7b3db8779f", CheckoutRules.DEFAULT).toByteArray());
  }


  public void incremental_patch_subrepo_url_changed() throws Exception {
    setName("inc_patch_subrepo_url_changed");
    checkPatchResult(buildPatch(myVcs, myRoot, "34017377d9c3", "d64d9799c143", CheckoutRules.DEFAULT).toByteArray());
  }


  public void incremental_patch_with_checkout_rules() throws Exception {
    setName("inc_patch_subrepo_with_checkout_rules");
    checkPatchResult(buildPatch(myVcs, myRoot, "d350e7209906", "09c256b6163e", new CheckoutRules("+:.=>subdir")).toByteArray());
  }


  public void incremental_patch_with_excluding_checkout_rules() throws Exception {
    setName("inc_patch_subrepo_with_excluding_checkout_rules");
    checkPatchResult(buildPatch(myVcs, myRoot, "d350e7209906", "09c256b6163e", new CheckoutRules("+:.=>subdir\n-:r2")).toByteArray());
  }
}