You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2018/02/27 13:38:10 UTC

[camel] branch master updated: CAMEL-12123: camel-salesforce - Http proxy supp...

This is an automated email from the ASF dual-hosted git repository.

zregvart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 3639bca  CAMEL-12123: camel-salesforce - Http proxy supp...
3639bca is described below

commit 3639bca4b41352983822c552c32db7ea07936081
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Tue Feb 27 14:37:27 2018 +0100

    CAMEL-12123: camel-salesforce - Http proxy supp...
    
    ...ort uses two inconsistent methods and is broken
    
    To remain backward compatible both methods of configuring HTTP proxy
    support in `camel-salesforce` are taken into account when configuring
    the rest client.
---
 .../component/salesforce/SalesforceComponent.java  | 32 +++++++++++
 .../salesforce/HttpProxyIntegrationTest.java       | 63 ++++++++++++++++------
 2 files changed, 80 insertions(+), 15 deletions(-)

diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
index bcd91e5..ebe596e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Supplier;
 import java.util.regex.Pattern;
 
 import org.apache.camel.CamelContext;
@@ -42,6 +43,7 @@ import org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelp
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ServiceHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.jsse.KeyStoreParameters;
@@ -334,6 +336,11 @@ public class SalesforceComponent extends DefaultComponent implements VerifiableC
             httpClient = createHttpClient(sslContextFactory);
         }
 
+        if (httpClientProperties == null) {
+            httpClientProperties = new HashMap<>();
+        }
+
+        defineComponentPropertiesIn(httpClientProperties, this);
         setupHttpClient(httpClient, getCamelContext(), httpClientProperties);
 
         // support restarts
@@ -779,4 +786,29 @@ public class SalesforceComponent extends DefaultComponent implements VerifiableC
 
         return httpClient;
     }
+
+    private static void defineComponentPropertiesIn(final Map<String, Object> httpClientProperties, final SalesforceComponent salesforce) {
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_HOST, salesforce::getHttpProxyHost);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_PORT, salesforce::getHttpProxyPort);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_INCLUDE, salesforce::getHttpProxyIncludedAddresses);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_EXCLUDE, salesforce::getHttpProxyExcludedAddresses);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_USERNAME, salesforce::getHttpProxyUsername);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_PASSWORD, salesforce::getHttpProxyPassword);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_REALM, salesforce::getHttpProxyRealm);
+        putValueIfGivenTo(httpClientProperties, HTTP_PROXY_AUTH_URI, salesforce::getHttpProxyAuthUri);
+
+        if (ObjectHelper.isNotEmpty(salesforce.getHttpProxyHost())) {
+            // let's not put `false` values in client properties if no proxy is used
+            putValueIfGivenTo(httpClientProperties, HTTP_PROXY_IS_SOCKS4, salesforce::isHttpProxySocks4);
+            putValueIfGivenTo(httpClientProperties, HTTP_PROXY_IS_SECURE, salesforce::isHttpProxySecure);
+            putValueIfGivenTo(httpClientProperties, HTTP_PROXY_USE_DIGEST_AUTH, salesforce::isHttpProxyUseDigestAuth);
+        }
+    }
+
+    private static void putValueIfGivenTo(final Map<String, Object> properties, final String key, final Supplier<Object> valueSupplier) {
+        final Object value = valueSupplier.get();
+        if (ObjectHelper.isNotEmpty(value)) {
+            properties.putIfAbsent(key, value);
+        }
+    }
 }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java
index 3281452..b9b80b8 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/HttpProxyIntegrationTest.java
@@ -16,8 +16,13 @@
  */
 package org.apache.camel.component.salesforce;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -33,6 +38,10 @@ import org.eclipse.jetty.util.StringUtil;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,6 +51,7 @@ import static org.eclipse.jetty.http.HttpHeader.PROXY_AUTHORIZATION;
 /**
  * Test HTTP proxy configuration for Salesforce component.
  */
+@RunWith(Parameterized.class)
 public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
 
     private static final Logger LOG = LoggerFactory.getLogger(HttpProxyIntegrationTest.class);
@@ -53,10 +63,23 @@ public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
     private static Server server;
     private static int httpProxyPort;
 
+    private static final AtomicBoolean WENT_TORUGH_PROXY = new AtomicBoolean();
+
+    @Parameter(0)
+    public Consumer<SalesforceComponent> configurationMethod;
+
+    @Parameters
+    public static Iterable<Consumer<SalesforceComponent>> methods() {
+        return Arrays.asList(HttpProxyIntegrationTest::configureProxyViaComponentProperties,
+            HttpProxyIntegrationTest::configureProxyViaClientPropertiesMap);
+    }
+
     @Test
     public void testGetVersions() throws Exception {
         doTestGetVersions("");
         doTestGetVersions("Xml");
+
+        assertTrue("Should have gone through the test proxy", WENT_TORUGH_PROXY.get());
     }
 
     @SuppressWarnings("unchecked")
@@ -79,12 +102,6 @@ public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
         // start a local HTTP proxy using Jetty server
         server = new Server();
 
-/*
-        final SSLContextParameters contextParameters = new SSLContextParameters();
-        final SslContextFactory sslContextFactory = new SslContextFactory();
-        sslContextFactory.setSslContext(contextParameters.createSSLContext());
-        ServerConnector connector = new ServerConnector(server, sslContextFactory);
-*/
         ServerConnector connector = new ServerConnector(server);
 
         connector.setHost(HTTP_PROXY_HOST);
@@ -105,6 +122,7 @@ public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
                     return false;
                 }
                 LOG.info("Request contains required header " + PROXY_AUTHORIZATION);
+                WENT_TORUGH_PROXY.set(true);
                 return true;
             }
         };
@@ -123,20 +141,13 @@ public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
         super.createComponent();
         final SalesforceComponent salesforce = (SalesforceComponent) context().getComponent("salesforce");
 
-        // set HTTP proxy settings
-        salesforce.setHttpProxyHost(HTTP_PROXY_HOST);
-        salesforce.setHttpProxyPort(httpProxyPort);
-        salesforce.setIsHttpProxySecure(false);
-        salesforce.setHttpProxyUsername(HTTP_PROXY_USER_NAME);
-        salesforce.setHttpProxyPassword(HTTP_PROXY_PASSWORD);
-        salesforce.setHttpProxyAuthUri(String.format("http://%s:%s", HTTP_PROXY_HOST, httpProxyPort));
-        salesforce.setHttpProxyRealm(HTTP_PROXY_REALM);
-
         // set HTTP client properties
         final HashMap<String, Object> properties = new HashMap<String, Object>();
         properties.put("timeout", "60000");
         properties.put("removeIdleDestinations", "true");
         salesforce.setHttpClientProperties(properties);
+
+        configurationMethod.accept(salesforce);
     }
 
     @AfterClass
@@ -165,4 +176,26 @@ public class HttpProxyIntegrationTest extends AbstractSalesforceTestBase {
             }
         };
     }
+
+    private static void configureProxyViaComponentProperties(final SalesforceComponent salesforce) {
+        salesforce.setHttpProxyHost(HTTP_PROXY_HOST);
+        salesforce.setHttpProxyPort(httpProxyPort);
+        salesforce.setIsHttpProxySecure(false);
+        salesforce.setHttpProxyUsername(HTTP_PROXY_USER_NAME);
+        salesforce.setHttpProxyPassword(HTTP_PROXY_PASSWORD);
+        salesforce.setHttpProxyAuthUri(String.format("http://%s:%s", HTTP_PROXY_HOST, httpProxyPort));
+        salesforce.setHttpProxyRealm(HTTP_PROXY_REALM);
+    }
+
+    private static void configureProxyViaClientPropertiesMap(final SalesforceComponent salesforce) {
+        final Map<String, Object> properties = salesforce.getHttpClientProperties();
+        properties.put(SalesforceComponent.HTTP_PROXY_HOST, HTTP_PROXY_HOST);
+        properties.put(SalesforceComponent.HTTP_PROXY_PORT, httpProxyPort);
+        properties.put(SalesforceComponent.HTTP_PROXY_IS_SECURE, false);
+        properties.put(SalesforceComponent.HTTP_PROXY_USERNAME, HTTP_PROXY_USER_NAME);
+        properties.put(SalesforceComponent.HTTP_PROXY_PASSWORD, HTTP_PROXY_PASSWORD);
+        properties.put(SalesforceComponent.HTTP_PROXY_AUTH_URI, String.format("http://%s:%s", HTTP_PROXY_HOST, httpProxyPort));
+        properties.put(SalesforceComponent.HTTP_PROXY_REALM, HTTP_PROXY_REALM);
+    }
+
 }

-- 
To stop receiving notification emails like this one, please contact
zregvart@apache.org.