Winston Li 11 лет назад
Родитель
Сommit
3f67e62846
13 измененных файлов с 198 добавлено и 30 удалено
  1. 0 21
      services/git-bridge/src/it/java/TTest.java
  2. 82 1
      services/git-bridge/src/it/java/uk/ac/ic/wlgitbridge/IntegrationTest.java
  3. 1 0
      services/git-bridge/src/it/resources/uk/ac/ic/wlgitbridge/IntegrationTest/canCloneARepository/state/git
  4. 46 0
      services/git-bridge/src/it/resources/uk/ac/ic/wlgitbridge/IntegrationTest/canCloneARepository/state/state.json
  5. 3 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/Main.java
  6. 5 3
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/server/MockSnapshotRequestHandler.java
  7. 19 2
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/server/MockSnapshotServer.java
  8. 10 0
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/state/SnapshotAPIStateManager.java
  9. 28 2
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/util/FileUtil.java
  10. 1 0
      services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsFalseWhenCommitsAreDifferent/neq1
  11. 1 0
      services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsFalseWhenCommitsAreDifferent/neq2
  12. 1 0
      services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsTrueWhenCommitsAreTheSame/eq1
  13. 1 0
      services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsTrueWhenCommitsAreTheSame/eq2

+ 0 - 21
services/git-bridge/src/it/java/TTest.java

@@ -1,21 +0,0 @@
-import org.junit.Test;
-import uk.ac.ic.wlgitbridge.test.server.MockSnapshotServer;
-import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIState;
-import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIStateBuilder;
-
-/**
- * Created by Winston on 11/01/15.
- */
-public class TTest {
-
-    @Test
-    public void testStreamToString() {
-        SnapshotAPIStateBuilder stateBuilder = new SnapshotAPIStateBuilder(getClass().getResourceAsStream("/state.json"));
-        SnapshotAPIState state = stateBuilder.build();
-        MockSnapshotServer server = new MockSnapshotServer();
-        server.setState(state);
-        server.start();
-        while (true);
-    }
-
-}

+ 82 - 1
services/git-bridge/src/it/java/uk/ac/ic/wlgitbridge/IntegrationTest.java

@@ -1,15 +1,96 @@
 package uk.ac.ic.wlgitbridge;
 
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import uk.ac.ic.wlgitbridge.application.WLGitBridgeApplication;
+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 java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.URISyntaxException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertTrue;
 
 /**
  * Created by Winston on 11/01/15.
  */
 public class IntegrationTest {
 
+    private MockSnapshotServer server;
+    private Map<String, Map<String, SnapshotAPIState>> states =
+            new HashMap<String, Map<String, SnapshotAPIState>>() {{
+                put("canCloneARepository", new HashMap<String, SnapshotAPIState>() {{
+                    put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/canCloneARepository/state/state.json")).build());
+                }});
+            }};
+
+    @Rule
+    public TemporaryFolder folder = new TemporaryFolder();
+
+    @Before
+    public void startMockSnapshotAPIServer() throws URISyntaxException {
+        server = new MockSnapshotServer(Paths.get(getClass().getResource("/uk/ac/ic/wlgitbridge/IntegrationTest/").toURI()).toFile());
+        server.start();
+    }
+
     @Test
-    public void canCloneARepository() {
+    public void canCloneARepository() throws IOException, GitAPIException {
+        server.setState(states.get("canCloneARepository").get("state"));
+        WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
+                makeConfigFile()
+        });
+        wlgb.run();
+        folder.create();
+        File git = folder.newFolder();
+        Git.cloneRepository()
+           .setURI("http://127.0.0.1:30080/testproj.git")
+           .setDirectory(git)
+           .call()
+           .close();
+        wlgb.stop();
+        assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneARepository/state/git"), git.toPath()));
+    }
+
+    private String makeConfigFile() throws IOException {
+        File wlgb = folder.newFolder();
+        File config = folder.newFile();
+        PrintWriter writer = new PrintWriter(config);
+        writer.println("{\n" +
+                "\t\"port\": 30080,\n" +
+                "\t\"rootGitDirectory\": \"" + wlgb.getAbsolutePath() + "\",\n" +
+                "\t\"apiBaseUrl\": \"http://127.0.0.1:60000/api/v0\",\n" +
+                "\t\"username\": \"\",\n" +
+                "\t\"password\": \"\",\n" +
+                "\t\"postbackBaseUrl\": \"http://127.0.0.1:30080\",\n" +
+                "\t\"serviceName\": \"Overleaf\"\n" +
+                "}\n");
+        writer.close();
+        return config.getAbsolutePath();
+    }
+
+    private Path getResource(String path) {
+        try {
+            return Paths.get(getClass().getResource("/uk/ac/ic/wlgitbridge/IntegrationTest" + path).toURI());
+        } catch (URISyntaxException e) {
+            throw new RuntimeException(e);
+        }
+    }
 
+    private InputStream getResourceAsStream(String path) {
+        return getClass().getResourceAsStream("/uk/ac/ic/wlgitbridge/IntegrationTest" + path);
     }
 
 }

+ 1 - 0
services/git-bridge/src/it/resources/uk/ac/ic/wlgitbridge/IntegrationTest/canCloneARepository/state/git

@@ -0,0 +1 @@
+Subproject commit 3c01dd67c26f031763282b1436b91bdb5309cda4

+ 46 - 0
services/git-bridge/src/it/resources/uk/ac/ic/wlgitbridge/IntegrationTest/canCloneARepository/state/state.json

@@ -0,0 +1,46 @@
+[
+	{
+		"project": "testproj",
+		"getDoc": {
+			"versionID": 1,
+			"createdAt": "2014-11-30T18:40:58Z",
+			"email": "jdleesmiller+1@gmail.com",
+			"name": "John+1"
+		},
+		"getSavedVers": [
+        	{
+        		"versionID": 1,
+        		"comment": "added more info on doc GET and error details",
+        		"email": "jdleesmiller+1@gmail.com",
+        		"name": "John+1",
+        		"createdAt": "2014-11-30T18:47:01Z"
+        	}
+		],
+		"getForVers": [
+			{
+				"versionID": 1,
+				"srcs": [
+                    {
+                    	"content": "content",
+                    	"path": "main.tex"
+                    },
+                    {
+                    	"content": "This text is from another file.",
+                    	"path": "foo/bar/test.tex"
+                    }
+	            ],
+	            "atts": [
+	            	{
+	            		"url": "http://127.0.0.1:60000/canCloneARepository/state/git/min_mean_wait_evm_7_eps_150dpi.png",
+	            		"path": "min_mean_wait_evm_7_eps_150dpi.png"
+	            	}
+	            ]
+	        }
+		],
+		"push": "success",
+		"postback": {
+			"type": "success",
+			"versionID": 2
+		}
+	}
+]

+ 3 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/Main.java

@@ -3,13 +3,15 @@ package uk.ac.ic.wlgitbridge.test;
 import uk.ac.ic.wlgitbridge.test.server.MockSnapshotServer;
 import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIState;
 
+import java.io.File;
+
 /**
  * Created by Winston on 10/01/15.
  */
 public class Main {
 
     public static void main(String[] args) {
-        MockSnapshotServer server = new MockSnapshotServer();
+        MockSnapshotServer server = new MockSnapshotServer(new File("/Users/Roxy/Code/java/writelatex-git-bridge"));
         server.setState(new SnapshotAPIState());
         server.start();
     }

+ 5 - 3
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/server/MockSnapshotRequestHandler.java

@@ -25,17 +25,19 @@ public class MockSnapshotRequestHandler extends AbstractHandler {
 
     @Override
     public void handle(String target, final Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-
+        boolean handled;
         try {
             final SnapshotResponse snapshotResponse = responseBuilder.buildWithTarget(target, baseRequest.getMethod());
             response.getWriter().println(snapshotResponse.respond());
             new PostbackThread(baseRequest.getReader(), snapshotResponse.postback()).startIfNotNull();
+            handled = true;
         } catch (InvalidAPICallException e) {
-            Util.printStackTrace(e);
+            handled = false;
         } catch (RuntimeException e) {
             Util.printStackTrace(e);
+            handled = true;
         }
-        baseRequest.setHandled(true);
+        baseRequest.setHandled(handled);
     }
 
 }

+ 19 - 2
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/server/MockSnapshotServer.java

@@ -2,10 +2,14 @@ package uk.ac.ic.wlgitbridge.test.server;
 
 import org.eclipse.jetty.server.NetworkConnector;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.server.handler.ResourceHandler;
 import uk.ac.ic.wlgitbridge.test.response.SnapshotResponseBuilder;
 import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIState;
 import uk.ac.ic.wlgitbridge.util.Util;
 
+import java.io.File;
+
 /**
  * Created by Winston on 09/01/15.
  */
@@ -15,10 +19,23 @@ public class MockSnapshotServer {
     private final SnapshotResponseBuilder responseBuilder;
     private int port;
 
-    public MockSnapshotServer() {
+    public MockSnapshotServer(File resourceBase) {
         server = new Server(60000);
         responseBuilder = new SnapshotResponseBuilder();
-        server.setHandler(new MockSnapshotRequestHandler(responseBuilder));
+        server.setHandler(getHandlerForResourceBase(resourceBase));
+    }
+
+    private HandlerCollection getHandlerForResourceBase(File resourceBase) {
+        HandlerCollection handlers = new HandlerCollection();
+        handlers.addHandler(new MockSnapshotRequestHandler(responseBuilder));
+        handlers.addHandler(resourceHandlerWithBase(resourceBase));
+        return handlers;
+    }
+
+    private ResourceHandler resourceHandlerWithBase(File resourceBase) {
+        ResourceHandler resourceHandler = new ResourceHandler();
+        resourceHandler.setResourceBase(resourceBase.getAbsolutePath());
+        return resourceHandler;
     }
 
     public void start() {

+ 10 - 0
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/state/SnapshotAPIStateManager.java

@@ -0,0 +1,10 @@
+package uk.ac.ic.wlgitbridge.test.state;
+
+/**
+ * Created by Winston on 11/01/15.
+ */
+public class SnapshotAPIStateManager {
+
+
+
+}

+ 28 - 2
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/test/util/FileUtil.java

@@ -1,5 +1,11 @@
 package uk.ac.ic.wlgitbridge.test.util;
 
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.api.errors.NoHeadException;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
+
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -13,6 +19,20 @@ import java.util.Set;
  */
 public class FileUtil {
 
+    public static boolean currentCommitsAreEqual(Path dir1, Path dir2) {
+        try {
+            RevCommit commit1 = new Git(new FileRepositoryBuilder().setWorkTree(dir1.toFile().getAbsoluteFile()).build()).log().call().iterator().next();
+            RevCommit commit2 = new Git(new FileRepositoryBuilder().setWorkTree(dir2.toFile().getAbsoluteFile()).build()).log().call().iterator().next();
+            return commit1.equals(commit2);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } catch (NoHeadException e) {
+            return false;
+        } catch (GitAPIException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     public static boolean gitDirectoriesAreEqual(Path dir1, Path dir2) {
         Set<String> dir1Contents = getAllFilesRecursivelyInDirectoryApartFrom(dir1, dir1.resolve(".git"));
         Set<String> dir2Contents = getAllFilesRecursivelyInDirectoryApartFrom(dir2, dir2.resolve(".git"));
@@ -34,13 +54,19 @@ public class FileUtil {
         try {
             byte[] firstContents = Files.readAllBytes(first);
             byte[] secondContents = Files.readAllBytes(second);
-            return Arrays.equals(firstContents, secondContents);
+            boolean equals = Arrays.equals(firstContents, secondContents);
+            if (!equals) {
+                System.out.println("Not equal: (" + first + ", " + second + ")");
+                System.out.println(first + ": " + new String(firstContents));
+                System.out.println(second + ": " + new String(secondContents));
+            }
+            return equals;
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
     }
 
-    static Set<String> getAllFilesRecursivelyInDirectoryApartFrom(Path dir, Path excluded) {
+    public static Set<String> getAllFilesRecursivelyInDirectoryApartFrom(Path dir, Path excluded) {
         if (!dir.toFile().isDirectory()) {
             throw new IllegalArgumentException("need a directory");
         }

+ 1 - 0
services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsFalseWhenCommitsAreDifferent/neq1

@@ -0,0 +1 @@
+Subproject commit a970b70202d8df99e0b42a0498e5df3070976493

+ 1 - 0
services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsFalseWhenCommitsAreDifferent/neq2

@@ -0,0 +1 @@
+Subproject commit e2ed297a2717598c89ec0b54fe9f748a15509d3b

+ 1 - 0
services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsTrueWhenCommitsAreTheSame/eq1

@@ -0,0 +1 @@
+Subproject commit f5ae5f4aaa838d152da1c1154c199c71e1623188

+ 1 - 0
services/git-bridge/src/test/resources/uk/ac/ic/wlgitbridge/test/util/FileUtilTest/returnsTrueWhenCommitsAreTheSame/eq2

@@ -0,0 +1 @@
+Subproject commit f5ae5f4aaa838d152da1c1154c199c71e1623188