Mercurial > hg > mercurial
view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MirrorManagerTest.java @ 405:0b0a9c0ced8f
Merge branch Faradi-7.0.x
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Fri, 02 Mar 2012 15:33:14 +0400 |
parents | 69d66e4f60e3 |
children | 49a03af60439 |
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial; import jetbrains.buildServer.TempFiles; import jetbrains.buildServer.util.Hash; import junit.framework.TestCase; import org.jetbrains.annotations.NotNull; 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; /** * @author dmitry.neverov */ @Test public class MirrorManagerTest extends TestCase { private TempFiles myTempFiles; private File myRootDir; private MirrorManagerImpl myManager; @BeforeMethod public void setUp() throws Exception { myTempFiles = new TempFiles(); myRootDir = myTempFiles.createTempDir(); myManager = new MirrorManagerImpl(new PluginConfig() { @NotNull public File getCachesDir() { return myRootDir; } }); } @AfterMethod public void tearDown() { myTempFiles.cleanup(); } public void manager_should_create_an_empty_map_file() { assertTrue(myRootDir.listFiles().length == 1); } public void getMirrorDir_returns_dir_under_root() { File mirrorDir = myManager.getMirrorDir("hg://some.com/repository.hg"); assertEquals(myRootDir, mirrorDir.getParentFile()); assertTrue(mirrorDir.exists()); } public void getMirrorDir_returns_same_result_for_same_url() { String url = "hg://some.com/repository.hg"; assertEquals(myManager.getMirrorDir(url), myManager.getMirrorDir(url)); } public void getMirrors_remember_created_repositories() { File mirrorDir1 = myManager.getMirrorDir("hg://some.com/repository.hg"); File mirrorDir2 = myManager.getMirrorDir("hg://other.com/repository.hg"); List<File> mirrors = myManager.getMirrors(); assertEquals(2, mirrors.size()); assertTrue(mirrors.contains(mirrorDir1)); assertTrue(mirrors.contains(mirrorDir2)); } public void should_handle_url_collisions() throws IOException { final String url1 = "hg://some.com/repository.hg"; final String url2 = "hg://other.com/repository.hg"; MirrorManagerImpl.HashCalculator hashWithCollision = new MirrorManagerImpl.HashCalculator() { public long calc(String value) { if (value.equals(url1) || value.equals(url2)) { return 0;//emulate collision } else { return Hash.calc(value); } } }; //alone they get dir with the same name: final File dir1 = myTempFiles.createTempDir(); MirrorManagerImpl mm1 = new MirrorManagerImpl(new PluginConfig() { @NotNull public File getCachesDir() { return dir1; } }); mm1.setHashCalculator(hashWithCollision); File separateMirrorDir1 = mm1.getMirrorDir(url1); final File dir2 = myTempFiles.createTempDir(); MirrorManagerImpl mm2 = new MirrorManagerImpl(new PluginConfig() { @NotNull public File getCachesDir() { return dir2; } }); mm2.setHashCalculator(hashWithCollision); File separateMirrorDir2 = mm2.getMirrorDir(url2); assertEquals(separateMirrorDir1.getName(), separateMirrorDir2.getName()); myManager.setHashCalculator(hashWithCollision); File mirrorDir1 = myManager.getMirrorDir(url1); File mirrorDir2 = myManager.getMirrorDir(url2); assertFalse(mirrorDir1.equals(mirrorDir2)); } public void should_survive_restart() throws IOException { String url1 = "hg://some.com/repository.hg"; String url2 = "hg://other.com/repository.hg?param = 1"; File mirrorDir1 = myManager.getMirrorDir(url1); File mirrorDir2 = myManager.getMirrorDir(url2); //emulate restart by creating a new manager for the same rootDir MirrorManagerImpl manager = new MirrorManagerImpl(new PluginConfig() { @NotNull public File getCachesDir() { return myRootDir; } }); assertEquals(2, manager.getMirrors().size()); assertTrue(manager.getMirrors().contains(mirrorDir1)); assertTrue(manager.getMirrors().contains(mirrorDir2)); } public void should_be_able_to_forget_directory() throws Exception { String url = "hg://some.org/repository"; File mirror1 = myManager.getMirrorDir(url); File dotHg = new File(mirror1, ".hg"); dotHg.mkdirs(); myManager.forgetDir(mirror1); File mirror2 = myManager.getMirrorDir(url); assertFalse(mirror2.equals(mirror1)); } }