diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Util.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Util.java index eb10ca5ca1..b9f57b90db 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Util.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Util.java @@ -2,10 +2,7 @@ package uk.ac.ic.wlgitbridge.util; import uk.ac.ic.wlgitbridge.application.SSLConfig; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; +import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -152,4 +149,17 @@ public class Util { } } + public static String fromStream(InputStream in) throws IOException + { + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + StringBuilder out = new StringBuilder(); + String newLine = System.getProperty("line.separator"); + String line; + while ((line = reader.readLine()) != null) { + out.append(line); + out.append(newLine); + } + return out.toString(); + } + } diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest.java index 9f1deba36e..526b1a608a 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest.java @@ -1,8 +1,6 @@ package uk.ac.ic.wlgitbridge; -import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.api.errors.TransportException; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -11,6 +9,7 @@ import uk.ac.ic.wlgitbridge.test.server.MockSnapshotServer; import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIState; import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIStateBuilder; import uk.ac.ic.wlgitbridge.test.util.FileUtil; +import uk.ac.ic.wlgitbridge.util.Util; import java.io.*; import java.nio.file.Path; @@ -20,7 +19,6 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; /** * Created by Winston on 11/01/15. @@ -62,8 +60,9 @@ public class WLGitBridgeIntegrationTest { Process git = runtime.exec("git clone http://127.0.0.1:33857/testproj.git", null, dir); int exitCode = git.waitFor(); wlgb.stop(); + File testprojDir = new File(dir, "testproj"); assertEquals(0, exitCode); - assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneARepository/state/testproj"), new File(dir, "testproj").toPath())); + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneARepository/state/testproj"), testprojDir.toPath())); } @Test @@ -81,14 +80,16 @@ public class WLGitBridgeIntegrationTest { Process git2 = runtime.exec("git clone http://127.0.0.1:33858/testproj2.git", null, dir); int exitCode2 = git2.waitFor(); wlgb.stop(); + File testproj1Dir = new File(dir, "testproj1"); + File testproj2Dir = new File(dir, "testproj2"); assertEquals(0, exitCode1); - assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj1"), new File(dir, "testproj1").toPath())); + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj1"), testproj1Dir.toPath())); assertEquals(0, exitCode2); - assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj2"), new File(dir, "testproj2").toPath())); + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj2"), testproj2Dir.toPath())); } @Test - public void canPullADeletedTexFile() throws IOException, GitAPIException { + public void canPullADeletedTexFile() throws IOException, GitAPIException, InterruptedException { MockSnapshotServer server = new MockSnapshotServer(3860, getResource("/canPullADeletedTexFile").toFile()); server.start(); server.setState(states.get("canPullADeletedTexFile").get("base")); @@ -96,22 +97,26 @@ public class WLGitBridgeIntegrationTest { makeConfigFile(33860, 3860) }); wlgb.run(); - folder.create(); - File git = folder.newFolder(); - Git base = Git.cloneRepository() - .setURI("http://127.0.0.1:33860/testproj.git") - .setDirectory(git) - .call(); - assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullADeletedTexFile/base/testproj"), git.toPath())); + File dir = folder.newFolder(); + Process gitBase = runtime.exec("git clone http://127.0.0.1:33860/testproj.git", null, dir); + int exitCodeBase = gitBase.waitFor(); + File testprojDir = new File(dir, "testproj"); + assertEquals(0, exitCodeBase); + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullADeletedTexFile/base/testproj"), testprojDir.toPath())); server.setState(states.get("canPullADeletedTexFile").get("withDeletedTexFile")); - base.pull().call(); - base.close(); + Process gitWithDeletedTexFile = runtime.exec("git pull", null, testprojDir); + int exitCodeWithDeletedTexFile = gitWithDeletedTexFile.waitFor(); wlgb.stop(); - assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullADeletedTexFile/withDeletedTexFile/testproj"), git.toPath())); + assertEquals(0, exitCodeWithDeletedTexFile); + assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullADeletedTexFile/withDeletedTexFile/testproj"), testprojDir.toPath())); } + + private static final String EXPECTED_OUT_PROTECTED = + "Cloning into 'protected'...\n" + + "fatal: remote error: Your project is protected, and can't be cloned (yet).\n"; @Test - public void cannotCloneAProtectedProject() throws IOException, GitAPIException { + public void cannotCloneAProtectedProject() throws IOException, GitAPIException, InterruptedException { MockSnapshotServer server = new MockSnapshotServer(3861, getResource("/cannotCloneAProtectedProject").toFile()); server.start(); server.setState(states.get("cannotCloneAProtectedProject").get("state")); @@ -119,21 +124,13 @@ public class WLGitBridgeIntegrationTest { makeConfigFile(33861, 3861) }); wlgb.run(); - folder.create(); - File git = folder.newFolder(); - try { - Git.cloneRepository() - .setURI("http://127.0.0.1:33861/protected.git") - .setDirectory(git) - .call() - .close(); - } catch (TransportException e) { - assertEquals("http://127.0.0.1:33861/protected.git: Your project is protected, and can't be cloned (yet).", e.getMessage()); - return; - } finally { - wlgb.stop(); - } - fail(); + File dir = folder.newFolder(); + Process git = runtime.exec("git clone http://127.0.0.1:33861/protected.git", null, dir); + String output = Util.fromStream(git.getErrorStream()); + int exitCode = git.waitFor(); + assertEquals(128, exitCode); + assertEquals(EXPECTED_OUT_PROTECTED, output); + wlgb.stop(); } private String makeConfigFile(int port, int apiPort) throws IOException {