]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7429 Should be possible to specify "https.proxyHost" and "https.proxyPort"...
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 10 Mar 2016 22:19:01 +0000 (23:19 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 11 Mar 2016 12:50:29 +0000 (13:50 +0100)
sonar-application/src/main/assembly/conf/sonar.properties
sonar-core/src/main/java/org/sonar/core/util/DefaultHttpDownloader.java
sonar-core/src/test/java/org/sonar/core/util/DefaultHttpDownloaderTest.java

index f8804f4560d43e71fba2e9ef3d18b25b8c86bee3..905c626599abccc75abf1c7618bb8dd0c923613a 100644 (file)
 #http.proxyHost=
 #http.proxyPort=
 
+# HTTPS proxy (default none)
+#https.proxyHost=
+#https.proxyPort=
+
 # NT domain name if NTLM proxy is used
 #http.auth.ntlm.domain=
 
 #socksProxyHost=
 #socksProxyPort=
 
-# proxy authentication. The 2 following properties are used for HTTP and SOCKS proxies.
+# Proxy authentication (used for HTTP, HTTPS and SOCKS proxies)
 #http.proxyUser=
 #http.proxyPassword=
 
index 69c2f14aa4aad0bbdb861d9a2af1c4f7fad77edb..9d7b87e1bd653256f21de0fb40949ecf2b96df8e 100644 (file)
@@ -75,7 +75,7 @@ public class DefaultHttpDownloader extends HttpDownloader {
   public DefaultHttpDownloader(Server server, Settings settings, @Nullable Integer connectTimeout, @Nullable Integer readTimeout) {
     this.readTimeout = readTimeout;
     this.connectTimeout = connectTimeout;
-    downloader = new BaseHttpDownloader(new ProxySystem(), settings, server.getVersion());
+    downloader = new BaseHttpDownloader(new SystemFacade(), settings, server.getVersion());
   }
 
   public DefaultHttpDownloader(Settings settings) {
@@ -89,7 +89,7 @@ public class DefaultHttpDownloader extends HttpDownloader {
   public DefaultHttpDownloader(Settings settings, @Nullable Integer connectTimeout, @Nullable Integer readTimeout) {
     this.readTimeout = readTimeout;
     this.connectTimeout = connectTimeout;
-    downloader = new BaseHttpDownloader(new ProxySystem(), settings, null);
+    downloader = new BaseHttpDownloader(new SystemFacade(), settings, null);
   }
 
   @Override
@@ -157,7 +157,12 @@ public class DefaultHttpDownloader extends HttpDownloader {
     throw new SonarException(String.format("Fail to download: %s (%s)", uri, getProxySynthesis(uri)), e);
   }
 
-  static class ProxySystem {
+  /**
+   * Facade to allow unit tests to verify calls to {@link System}.
+   * This class could be replaced by {@link org.sonar.api.utils.System2},
+   * but it sounds overkill to define {@link #setDefaultAuthenticator(Authenticator)}.
+   */
+  static class SystemFacade {
     public void setProperty(String key, String value) {
       System.setProperty(key, value);
     }
@@ -175,16 +180,17 @@ public class DefaultHttpDownloader extends HttpDownloader {
 
     private static final List<String> PROXY_SETTINGS = ImmutableList.of(
       "http.proxyHost", "http.proxyPort", "http.nonProxyHosts",
+      "https.proxyHost", "https.proxyPort",
       "http.auth.ntlm.domain", "socksProxyHost", "socksProxyPort");
 
     private String userAgent;
 
-    BaseHttpDownloader(ProxySystem system, Settings settings, @Nullable String userAgent) {
+    BaseHttpDownloader(SystemFacade system, Settings settings, @Nullable String userAgent) {
       initProxy(system, settings);
       initUserAgent(userAgent);
     }
 
-    private void initProxy(ProxySystem system, Settings settings) {
+    private void initProxy(SystemFacade system, Settings settings) {
       // propagate system properties
       for (String key : PROXY_SETTINGS) {
         if (settings.hasKey(key)) {
index d25429bbc7801a10bd27f7abc474ed41ee8c959e..906c96a20132387ddb31e3eac96f3542c9d8baba 100644 (file)
@@ -255,22 +255,26 @@ public class DefaultHttpDownloaderTest {
   }
 
   @Test
-  public void configure_http_proxy() {
-    DefaultHttpDownloader.ProxySystem system = mock(DefaultHttpDownloader.ProxySystem.class);
+  public void configure_http_and_https_proxies() {
+    DefaultHttpDownloader.SystemFacade system = mock(DefaultHttpDownloader.SystemFacade.class);
     Settings settings = new Settings();
     settings.setProperty("http.proxyHost", "1.2.3.4");
     settings.setProperty("http.proxyPort", "80");
+    settings.setProperty("https.proxyHost", "5.6.7.8");
+    settings.setProperty("https.proxyPort", "443");
 
     new DefaultHttpDownloader.BaseHttpDownloader(system, settings, null);
 
     verify(system).setProperty("http.proxyHost", "1.2.3.4");
     verify(system).setProperty("http.proxyPort", "80");
+    verify(system).setProperty("https.proxyHost", "5.6.7.8");
+    verify(system).setProperty("https.proxyPort", "443");
     verify(system, never()).setDefaultAuthenticator(any(Authenticator.class));
   }
 
   @Test
   public void configure_http_proxy_credentials() {
-    DefaultHttpDownloader.ProxySystem system = mock(DefaultHttpDownloader.ProxySystem.class);
+    DefaultHttpDownloader.SystemFacade system = mock(DefaultHttpDownloader.SystemFacade.class);
     Settings settings = new Settings();
     settings.setProperty("https.proxyHost", "1.2.3.4");
     settings.setProperty("http.proxyUser", "the_login");