WLGitBridgeIntegrationTest.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package uk.ac.ic.wlgitbridge;
  2. import org.eclipse.jgit.api.Git;
  3. import org.eclipse.jgit.api.errors.GitAPIException;
  4. import org.junit.Rule;
  5. import org.junit.Test;
  6. import org.junit.rules.TemporaryFolder;
  7. import uk.ac.ic.wlgitbridge.application.WLGitBridgeApplication;
  8. import uk.ac.ic.wlgitbridge.test.server.MockSnapshotServer;
  9. import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIState;
  10. import uk.ac.ic.wlgitbridge.test.state.SnapshotAPIStateBuilder;
  11. import uk.ac.ic.wlgitbridge.test.util.FileUtil;
  12. import java.io.*;
  13. import java.nio.file.Path;
  14. import java.nio.file.Paths;
  15. import java.util.HashMap;
  16. import java.util.Map;
  17. import static org.junit.Assert.assertTrue;
  18. /**
  19. * Created by Winston on 11/01/15.
  20. */
  21. public class WLGitBridgeIntegrationTest {
  22. private Map<String, Map<String, SnapshotAPIState>> states =
  23. new HashMap<String, Map<String, SnapshotAPIState>>() {{
  24. put("canCloneARepository", new HashMap<String, SnapshotAPIState>() {{
  25. put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/canCloneARepository/state/state.json")).build());
  26. }});
  27. put("canCloneMultipleRepositories", new HashMap<String, SnapshotAPIState>() {{
  28. put("state", new SnapshotAPIStateBuilder(getResourceAsStream("/canCloneMultipleRepositories/state/state.json")).build());
  29. }});
  30. put("canPullAModifiedTexFile", new HashMap<String, SnapshotAPIState>() {{
  31. put("base", new SnapshotAPIStateBuilder(getResourceAsStream("/canPullAModifiedTexFile/base/state.json")).build());
  32. put("withModifiedTexFile", new SnapshotAPIStateBuilder(getResourceAsStream("/canPullAModifiedTexFile/withModifiedTexFile/state.json")).build());
  33. }});
  34. put("canPullADeletedTexFile", new HashMap<String, SnapshotAPIState>() {{
  35. put("base", new SnapshotAPIStateBuilder(getResourceAsStream("/canPullADeletedTexFile/base/state.json")).build());
  36. put("withDeletedTexFile", new SnapshotAPIStateBuilder(getResourceAsStream("/canPullADeletedTexFile/withDeletedTexFile/state.json")).build());
  37. }});
  38. }};
  39. @Rule
  40. public TemporaryFolder folder = new TemporaryFolder();
  41. @Test
  42. public void canCloneARepository() throws IOException, GitAPIException {
  43. MockSnapshotServer server = new MockSnapshotServer(3857, getResource("/canCloneARepository").toFile());
  44. server.start();
  45. server.setState(states.get("canCloneARepository").get("state"));
  46. WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
  47. makeConfigFile(33857, 3857)
  48. });
  49. wlgb.run();
  50. folder.create();
  51. File git = folder.newFolder();
  52. Git.cloneRepository()
  53. .setURI("http://127.0.0.1:33857/testproj.git")
  54. .setDirectory(git)
  55. .call()
  56. .close();
  57. wlgb.stop();
  58. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneARepository/state/testproj"), git.toPath()));
  59. }
  60. @Test
  61. public void canCloneMultipleRepositories() throws IOException, GitAPIException {
  62. MockSnapshotServer server = new MockSnapshotServer(3858, getResource("/canCloneMultipleRepositories").toFile());
  63. server.start();
  64. server.setState(states.get("canCloneMultipleRepositories").get("state"));
  65. WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
  66. makeConfigFile(33858, 3858)
  67. });
  68. wlgb.run();
  69. folder.create();
  70. File testproj1 = folder.newFolder();
  71. Git.cloneRepository()
  72. .setURI("http://127.0.0.1:33858/testproj1.git")
  73. .setDirectory(testproj1)
  74. .call()
  75. .close();
  76. File testproj2 = folder.newFolder();
  77. Git.cloneRepository()
  78. .setURI("http://127.0.0.1:33858/testproj2.git")
  79. .setDirectory(testproj2)
  80. .call()
  81. .close();
  82. wlgb.stop();
  83. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj1"), testproj1.toPath()));
  84. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj2"), testproj2.toPath()));
  85. }
  86. @Test
  87. public void canPullAModifiedTexFile() throws IOException, GitAPIException {
  88. MockSnapshotServer server = new MockSnapshotServer(3859, getResource("/canPullAModifiedTexFile").toFile());
  89. server.start();
  90. server.setState(states.get("canPullAModifiedTexFile").get("base"));
  91. WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
  92. makeConfigFile(33859, 3859)
  93. });
  94. wlgb.run();
  95. folder.create();
  96. File git = folder.newFolder();
  97. Git base = Git.cloneRepository()
  98. .setURI("http://127.0.0.1:33859/testproj.git")
  99. .setDirectory(git)
  100. .call();
  101. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullAModifiedTexFile/base/testproj"), git.toPath()));
  102. server.setState(states.get("canPullAModifiedTexFile").get("withModifiedTexFile"));
  103. base.pull().call();
  104. base.close();
  105. wlgb.stop();
  106. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullAModifiedTexFile/withModifiedTexFile/testproj"), git.toPath()));
  107. }
  108. @Test
  109. public void canPullADeletedTexFile() throws IOException, GitAPIException {
  110. MockSnapshotServer server = new MockSnapshotServer(3860, getResource("/canPullADeletedTexFile").toFile());
  111. server.start();
  112. server.setState(states.get("canPullADeletedTexFile").get("base"));
  113. WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
  114. makeConfigFile(33860, 3860)
  115. });
  116. wlgb.run();
  117. folder.create();
  118. File git = folder.newFolder();
  119. Git base = Git.cloneRepository()
  120. .setURI("http://127.0.0.1:33860/testproj.git")
  121. .setDirectory(git)
  122. .call();
  123. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullADeletedTexFile/base/testproj"), git.toPath()));
  124. server.setState(states.get("canPullADeletedTexFile").get("withDeletedTexFile"));
  125. base.pull().call();
  126. base.close();
  127. wlgb.stop();
  128. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canPullADeletedTexFile/withDeletedTexFile/testproj"), git.toPath()));
  129. }
  130. private String makeConfigFile(int port, int apiPort) throws IOException {
  131. File wlgb = folder.newFolder();
  132. File config = folder.newFile();
  133. PrintWriter writer = new PrintWriter(config);
  134. writer.println("{\n" +
  135. "\t\"port\": " + port + ",\n" +
  136. "\t\"rootGitDirectory\": \"" + wlgb.getAbsolutePath() + "\",\n" +
  137. "\t\"apiBaseUrl\": \"http://127.0.0.1:" + apiPort + "/api/v0\",\n" +
  138. "\t\"username\": \"\",\n" +
  139. "\t\"password\": \"\",\n" +
  140. "\t\"postbackBaseUrl\": \"http://127.0.0.1:" + port + "\",\n" +
  141. "\t\"serviceName\": \"Overleaf\"\n" +
  142. "}\n");
  143. writer.close();
  144. return config.getAbsolutePath();
  145. }
  146. private Path getResource(String path) {
  147. return Paths.get("src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest" + path);
  148. }
  149. private InputStream getResourceAsStream(String path) {
  150. try {
  151. return new FileInputStream(getResource(path).toFile());
  152. } catch (FileNotFoundException e) {
  153. throw new RuntimeException(e);
  154. }
  155. }
  156. }