/******************************************************************************* * Copyright (C) 2010, 2012 Mathias Kinzler <mathias.kinzler@sap.com> and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.egit.core.test.op; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.egit.core.Activator; import org.eclipse.egit.core.op.CloneOperation; import org.eclipse.egit.core.op.ListRemoteOperation; import org.eclipse.egit.core.test.DualRepositoryTestCase; import org.eclipse.egit.core.test.TestRepository; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.URIish; import org.junit.After; import org.junit.Before; import org.junit.Test; public class ListRemoteOperationTest extends DualRepositoryTestCase { File workdir; File workdir2; String projectName = "ListRemoteTest"; /** * Set up repository1 with branch "master", create some project and commit * it; then clone into repository2; finally create a branch "test" on top of * "master" in repository2 * * @throws Exception */ @Before public void setUp() throws Exception { workdir = testUtils.createTempDir("Repository1"); workdir2 = testUtils.createTempDir("Repository2"); repository1 = new TestRepository(new File(workdir, Constants.DOT_GIT)); // now we create a project in repo1 IProject project = testUtils.createProjectInLocalFileSystem(workdir, projectName); testUtils.addFileToProject(project, "folder1/file1.txt", "Hello world"); repository1.connect(project); repository1.trackAllFiles(project); repository1.commit("Initial commit"); // let's get rid of the project project.delete(false, false, null); // let's clone repository1 to repository2 URIish uri = new URIish("file:///" + repository1.getRepository().getDirectory().toString()); CloneOperation clop = new CloneOperation(uri, true, null, workdir2, "refs/heads/master", "origin", 0); clop.run(null); Repository existingRepo = Activator .getDefault() .getRepositoryCache() .lookupRepository( new File(workdir2, Constants.DOT_GIT)); repository2 = new TestRepository(existingRepo); // we push to branch "test" of repository2 RefUpdate createBranch = repository2.getRepository().updateRef( "refs/heads/test"); createBranch.setNewObjectId(repository2.getRepository().resolve( "refs/heads/master")); createBranch.update(); } @After public void tearDown() throws Exception { repository1.dispose(); repository2.dispose(); testUtils.deleteTempDirs(); } /** * List the refs both ways * * @throws Exception */ @Test public void testListRemote() throws Exception { URIish uri = new URIish("file:///" + repository2.getRepository().getDirectory().getPath()); ListRemoteOperation lrop = new ListRemoteOperation(repository1 .getRepository(), uri, 0); lrop.run(null); assertEquals(4, lrop.getRemoteRefs().size()); assertNotNull(lrop.getRemoteRef("refs/heads/test")); uri = new URIish("file:///" + repository1.getRepository().getDirectory().getPath()); lrop = new ListRemoteOperation(repository2.getRepository(), uri, 0); lrop.run(new NullProgressMonitor()); assertEquals(2, lrop.getRemoteRefs().size()); assertNotNull(lrop.getRemoteRef("refs/heads/master")); } /** * Call getRemoteRefs without having run the op * * @throws Exception */ @Test public void testIllegalStateException() throws Exception { URIish uri = new URIish("file:///" + repository2.getRepository().getDirectory().getPath()); ListRemoteOperation lrop = new ListRemoteOperation(repository1 .getRepository(), uri, 0); try { lrop.getRemoteRefs(); fail("Expected Exception not thrown"); } catch (IllegalStateException e) { // expected } } /** * Test with illegal URI * * @throws Exception */ @Test public void testIllegalURI() throws Exception { URIish uri = new URIish("file:///" + "no/path"); ListRemoteOperation lrop = new ListRemoteOperation(repository1 .getRepository(), uri, 0); try { lrop.run(new NullProgressMonitor()); fail("Expected Exception not thrown"); } catch (InvocationTargetException e) { // expected } } }