PageRenderTime 49ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/java/com/atlassian/bamboo/plugins/git/TransportAllTrustingHttpsTest.java

https://bitbucket.org/atlassian/bamboo-git-plugin
Java | 128 lines | 112 code | 15 blank | 1 comment | 5 complexity | c53cca30f8e23de71adf91fab34551ae MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.bamboo.plugins.git;
  2. import org.eclipse.jetty.server.Connector;
  3. import org.eclipse.jetty.server.Request;
  4. import org.eclipse.jetty.server.Server;
  5. import org.eclipse.jetty.server.handler.AbstractHandler;
  6. import org.eclipse.jetty.server.ssl.SslSocketConnector;
  7. import org.eclipse.jgit.JGitText;
  8. import org.eclipse.jgit.errors.TransportException;
  9. import org.eclipse.jgit.storage.file.FileRepository;
  10. import org.eclipse.jgit.transport.Transport;
  11. import org.eclipse.jgit.transport.TransportProtocol;
  12. import org.testng.annotations.AfterClass;
  13. import org.testng.annotations.BeforeClass;
  14. import org.testng.annotations.Test;
  15. import javax.servlet.ServletException;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.io.IOException;
  19. import java.net.InetAddress;
  20. import java.net.UnknownHostException;
  21. import java.util.List;
  22. import static org.testng.Assert.assertEquals;
  23. public class TransportAllTrustingHttpsTest extends GitAbstractTest
  24. {
  25. private static final String RESPONSE_TEXT = "This is a test instance";
  26. private Server server;
  27. private int port;
  28. @BeforeClass
  29. public void setUp() throws Exception
  30. {
  31. SslSocketConnector connector = new SslSocketConnector();
  32. connector.setPort(0);
  33. try {
  34. final InetAddress me = InetAddress.getByName("localhost");
  35. connector.setHost(me.getHostAddress());
  36. } catch (UnknownHostException e) {
  37. throw new RuntimeException("Cannot find localhost", e);
  38. }
  39. String keystore = getClass().getResource("/certs/selfsignedtest.keystore").toString();
  40. connector.setTruststore(keystore);
  41. connector.setKeystore(keystore);
  42. connector.setKeyPassword("password");
  43. connector.setTrustPassword("password");
  44. server = new Server();
  45. server.setConnectors(new Connector[]{connector});
  46. server.setHandler(new AbstractHandler()
  47. {
  48. public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  49. {
  50. response.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, RESPONSE_TEXT);
  51. }
  52. });
  53. server.setStopAtShutdown(true);
  54. server.start();
  55. port = connector.getLocalPort();
  56. }
  57. @AfterClass
  58. public void tearDown() throws Exception
  59. {
  60. server.stop();
  61. }
  62. // Using manual exception matching because we want to see the exception in the test output if it is not what we expect
  63. @Test
  64. public void testSelfSigned() throws Exception
  65. {
  66. String url = "https://localhost:" + port + "/repository"; // path necessary or jGit will not parse properly
  67. JGitOperationHelper goh = createJGitOperationHelper(null);
  68. GitRepositoryAccessData accessData = createAccessData(url);
  69. FileRepository fileRepository = new FileRepository(createTempDirectory());
  70. Transport transport = goh.open(fileRepository, accessData);
  71. try
  72. {
  73. transport.openFetch().close();
  74. }
  75. catch (TransportException e)
  76. {
  77. if (!e.getMessage().endsWith(RESPONSE_TEXT))
  78. {
  79. throw e;
  80. }
  81. }
  82. }
  83. @Test
  84. public void testDontMessingDefaultTransports() throws Exception
  85. {
  86. String url = "https://localhost:" + port + "/repository"; // path necessary or jGit will not parse properly
  87. JGitOperationHelper goh = createJGitOperationHelper(null);
  88. GitRepositoryAccessData accessData = createAccessData(url);
  89. FileRepository fileRepository = new FileRepository(createTempDirectory());
  90. Transport transport = goh.open(fileRepository, accessData);
  91. int searchedProtocolNamesCount = 0;
  92. List<TransportProtocol> protocols = Transport.getTransportProtocols();
  93. for (TransportProtocol protocol : protocols)
  94. {
  95. if (protocol.getName().equals(JGitText.get().transportProtoHTTP) || protocol.getName().equals(JGitText.get().transportProtoFTP))
  96. {
  97. searchedProtocolNamesCount++;
  98. }
  99. }
  100. assertEquals(searchedProtocolNamesCount, 2, "HTTP and FTP protocols should be properly registered");
  101. try
  102. {
  103. transport.openFetch().close();
  104. }
  105. catch (TransportException e)
  106. {
  107. if (!e.getMessage().endsWith(RESPONSE_TEXT))
  108. {
  109. throw e;
  110. }
  111. }
  112. }
  113. }