view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java @ 511:f2666e817701

Detect changes in subrepos
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Thu, 15 Nov 2012 16:40:22 +0400
parents
children 1533dd8058b8
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial;

import com.intellij.openapi.diagnostic.Logger;
import jetbrains.buildServer.TempFiles;
import jetbrains.buildServer.log.Log4jFactory;
import jetbrains.buildServer.vcs.CheckoutRules;
import jetbrains.buildServer.vcs.ModificationData;
import jetbrains.buildServer.vcs.VcsRoot;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.util.List;

import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot;
import static org.testng.AssertJUnit.assertEquals;

@Test
public class SubrepoChangesTest {

  static {
    Logger.setFactory(new Log4jFactory());
  }

  private TempFiles myTempFiles;
  private MercurialVcsSupport myVcs;
  private File myRemoteRepo1;
  private File myRemoteRepo2;
  private File myRemoteRepo3;

  @BeforeMethod
  public void setUp() throws IOException {
    myTempFiles = new TempFiles();
    ServerPluginConfig pluginConfig = new ServerPluginConfigBuilder()
            .cachesDir(myTempFiles.createTempDir())
            .detectSubrepoChanges(true)
            .build();
    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);
    myVcs = mercurialSupport().withConfig(pluginConfig).build();
  }

  @AfterMethod
  public void tearDown() {
    myTempFiles.cleanup();
  }


  public void should_report_changes_from_subrepos() throws Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).build();
    List<ModificationData> changes = myVcs.collectChanges(root, "d350e7209906", "09c256b6163e", CheckoutRules.DEFAULT);
    assertEquals(3, changes.size());
  }


  public void should_not_report_any_changes_when_subrepo_removed() throws Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).build();
    List<ModificationData> changes = myVcs.collectChanges(root, "34017377d9c3", "4d7b3db8779f", CheckoutRules.DEFAULT);
    assertEquals(1, changes.size());
  }


  public void should_not_report_any_changes_when_subrepo_added() throws Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).build();
    List<ModificationData> changes = myVcs.collectChanges(root, "4d7b3db8779f", "d350e7209906", CheckoutRules.DEFAULT);
    assertEquals(1, changes.size());
  }


  public void should_report_subrepo_changes_recursevly() throws  Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).build();
    List<ModificationData> changes = myVcs.collectChanges(root, "09c256b6163e", "d64d9799c143", CheckoutRules.DEFAULT);
    assertEquals(5, changes.size());
  }
}