WLGitBridgeIntegrationTest.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. }};
  31. @Rule
  32. public TemporaryFolder folder = new TemporaryFolder();
  33. @Test
  34. public void canCloneARepository() throws IOException, GitAPIException {
  35. MockSnapshotServer server = new MockSnapshotServer(3857, getResource("/canCloneARepository").toFile());
  36. server.start();
  37. server.setState(states.get("canCloneARepository").get("state"));
  38. WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
  39. makeConfigFile(33857, 3857)
  40. });
  41. wlgb.run();
  42. folder.create();
  43. File git = folder.newFolder();
  44. Git.cloneRepository()
  45. .setURI("http://127.0.0.1:33857/testproj.git")
  46. .setDirectory(git)
  47. .call()
  48. .close();
  49. wlgb.stop();
  50. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneARepository/state/testproj"), git.toPath()));
  51. }
  52. @Test
  53. public void canCloneMultipleRepositories() throws IOException, GitAPIException {
  54. MockSnapshotServer server = new MockSnapshotServer(3858, getResource("/canCloneMultipleRepositories").toFile());
  55. server.start();
  56. server.setState(states.get("canCloneMultipleRepositories").get("state"));
  57. WLGitBridgeApplication wlgb = new WLGitBridgeApplication(new String[] {
  58. makeConfigFile(33858, 3858)
  59. });
  60. wlgb.run();
  61. folder.create();
  62. File testproj1 = folder.newFolder();
  63. Git.cloneRepository()
  64. .setURI("http://127.0.0.1:33858/testproj1.git")
  65. .setDirectory(testproj1)
  66. .call()
  67. .close();
  68. File testproj2 = folder.newFolder();
  69. Git.cloneRepository()
  70. .setURI("http://127.0.0.1:33858/testproj2.git")
  71. .setDirectory(testproj2)
  72. .call()
  73. .close();
  74. wlgb.stop();
  75. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj1"), testproj1.toPath()));
  76. assertTrue(FileUtil.gitDirectoriesAreEqual(getResource("/canCloneMultipleRepositories/state/testproj2"), testproj2.toPath()));
  77. }
  78. private String makeConfigFile(int port, int apiPort) throws IOException {
  79. File wlgb = folder.newFolder();
  80. File config = folder.newFile();
  81. PrintWriter writer = new PrintWriter(config);
  82. writer.println("{\n" +
  83. "\t\"port\": " + port + ",\n" +
  84. "\t\"rootGitDirectory\": \"" + wlgb.getAbsolutePath() + "\",\n" +
  85. "\t\"apiBaseUrl\": \"http://127.0.0.1:" + apiPort + "/api/v0\",\n" +
  86. "\t\"username\": \"\",\n" +
  87. "\t\"password\": \"\",\n" +
  88. "\t\"postbackBaseUrl\": \"http://127.0.0.1:" + port + "\",\n" +
  89. "\t\"serviceName\": \"Overleaf\"\n" +
  90. "}\n");
  91. writer.close();
  92. return config.getAbsolutePath();
  93. }
  94. private Path getResource(String path) {
  95. return Paths.get("src/test/resources/uk/ac/ic/wlgitbridge/WLGitBridgeIntegrationTest" + path);
  96. }
  97. private InputStream getResourceAsStream(String path) {
  98. try {
  99. return new FileInputStream(getResource(path).toFile());
  100. } catch (FileNotFoundException e) {
  101. throw new RuntimeException(e);
  102. }
  103. }
  104. }