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

davsclaus 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 3d99ff8  CAMEL-14744: fix camel-salesforce lazy-login (#3726)
3d99ff8 is described below

commit 3d99ff815a64eb201f9956901d043f8147c34f4f
Author: MaartenTutak <[email protected]>
AuthorDate: Thu Apr 16 20:52:32 2020 +0200

    CAMEL-14744: fix camel-salesforce lazy-login (#3726)
    
    * CAMEL-14744: fix camel-salesforce lazy-login
    
    * CAMEL-14744: fix camel-salesforce lazy-login
---
 .../component/salesforce/SalesforceComponent.java  |  4 +-
 .../component/salesforce/SalesforceProducer.java   | 14 +++++-
 .../internal/client/AbstractClientBase.java        | 14 +++---
 .../internal/client/DefaultAnalyticsApiClient.java |  5 +-
 .../internal/client/DefaultBulkApiClient.java      |  5 +-
 .../internal/client/DefaultCompositeApiClient.java |  5 +-
 .../internal/client/DefaultRestClient.java         |  5 +-
 .../processor/AbstractSalesforceProcessor.java     |  3 ++
 .../internal/processor/AnalyticsApiProcessor.java  |  2 +-
 .../internal/processor/BulkApiProcessor.java       |  2 +-
 .../internal/processor/CompositeApiProcessor.java  |  2 +-
 .../internal/streaming/SubscriptionHelper.java     | 16 +++++--
 .../internal/client/AbstractClientBaseTest.java    | 33 +++++++++++--
 .../internal/streaming/SubscriptionHelperTest.java | 54 ++++++++++++++++++++++
 .../apache/camel/maven/AbstractSalesforceMojo.java |  2 +-
 15 files changed, 137 insertions(+), 29 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 8a71318..09048cd 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
@@ -686,7 +686,7 @@ public class SalesforceComponent extends DefaultComponent 
implements SSLContextP
         final String version = endpointConfig.getApiVersion();
         final PayloadFormat format = endpointConfig.getFormat();
 
-        return new DefaultRestClient(httpClient, version, format, session);
+        return new DefaultRestClient(httpClient, version, format, session, 
loginConfig);
     }
 
     RestClient createRestClient(final Map<String, Object> properties) throws 
Exception {
@@ -721,7 +721,7 @@ public class SalesforceComponent extends DefaultComponent 
implements SSLContextP
         final SalesforceSession session = new SalesforceSession(camelContext, 
httpClient, httpClient.getTimeout(), loginConfig);
         httpClient.setSession(session);
 
-        return new DefaultRestClient(httpClient, config.getApiVersion(), 
config.getFormat(), session);
+        return new DefaultRestClient(httpClient, config.getApiVersion(), 
config.getFormat(), session, loginConfig);
     }
 
     static SalesforceHttpClient createHttpClient(final SslContextFactory 
sslContextFactory) throws Exception {
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java
index 0eb5c6f..81283c7 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java
@@ -18,9 +18,11 @@ package org.apache.camel.component.salesforce;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.internal.OperationName;
 import org.apache.camel.component.salesforce.internal.PayloadFormat;
+import org.apache.camel.component.salesforce.internal.SalesforceSession;
 import 
org.apache.camel.component.salesforce.internal.processor.AnalyticsApiProcessor;
 import 
org.apache.camel.component.salesforce.internal.processor.BulkApiProcessor;
 import 
org.apache.camel.component.salesforce.internal.processor.CompositeApiProcessor;
@@ -113,7 +115,17 @@ public class SalesforceProducer extends 
DefaultAsyncProducer {
 
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
-        LOG.debug("Processing {}", 
((SalesforceEndpoint)getEndpoint()).getOperationName());
+        SalesforceEndpoint endpoint = (SalesforceEndpoint) getEndpoint();
+        SalesforceSession session = endpoint.getComponent().getSession();
+        if (session != null && session.getAccessToken() == null) {
+            try {
+                session.login(null);
+            } catch (SalesforceException e) {
+                throw RuntimeCamelException.wrapRuntimeCamelException(e);
+            }
+        }
+
+        LOG.debug("Processing {}", endpoint.getOperationName());
         return processor.process(exchange, callback);
     }
 
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
index afdca2d..c3bb17a 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
@@ -42,6 +42,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Service;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.api.TypeReferences;
 import org.apache.camel.component.salesforce.api.dto.RestError;
@@ -76,6 +77,7 @@ public abstract class AbstractClientBase implements 
SalesforceSession.Salesforce
 
     protected final SalesforceHttpClient httpClient;
     protected final SalesforceSession session;
+    protected final SalesforceLoginConfig loginConfig;
     protected final String version;
 
     protected String accessToken;
@@ -85,15 +87,16 @@ public abstract class AbstractClientBase implements 
SalesforceSession.Salesforce
 
     private long terminationTimeout;
 
-    public AbstractClientBase(String version, SalesforceSession session, 
SalesforceHttpClient httpClient) throws SalesforceException {
-        this(version, session, httpClient, DEFAULT_TERMINATION_TIMEOUT);
+    public AbstractClientBase(String version, SalesforceSession session, 
SalesforceHttpClient httpClient, SalesforceLoginConfig loginConfig) throws 
SalesforceException {
+        this(version, session, httpClient, loginConfig, 
DEFAULT_TERMINATION_TIMEOUT);
     }
 
-    AbstractClientBase(String version, SalesforceSession session, 
SalesforceHttpClient httpClient, int terminationTimeout) throws 
SalesforceException {
+    AbstractClientBase(String version, SalesforceSession session, 
SalesforceHttpClient httpClient, SalesforceLoginConfig loginConfig, int 
terminationTimeout) throws SalesforceException {
 
         this.version = version;
         this.session = session;
         this.httpClient = httpClient;
+        this.loginConfig = loginConfig;
         this.terminationTimeout = terminationTimeout;
     }
 
@@ -101,10 +104,9 @@ public abstract class AbstractClientBase implements 
SalesforceSession.Salesforce
     public void start() {
         // local cache
         accessToken = session.getAccessToken();
-        if (accessToken == null) {
-            // lazy login here!
+        if (accessToken == null && !loginConfig.isLazyLogin()) {
             try {
-                accessToken = session.login(accessToken);
+                accessToken = session.login(null);
             } catch (SalesforceException e) {
                 throw new RuntimeException(e);
             }
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
index 9faf366..ad45e01 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.api.TypeReferences;
@@ -58,8 +59,8 @@ public class DefaultAnalyticsApiClient extends 
AbstractClientBase implements Ana
     private static final String INCLUDE_DETAILS_QUERY_PARAM = 
"?includeDetails=";
     private ObjectMapper objectMapper;
 
-    public DefaultAnalyticsApiClient(String version, SalesforceSession 
session, SalesforceHttpClient httpClient) throws SalesforceException {
-        super(version, session, httpClient);
+    public DefaultAnalyticsApiClient(String version, SalesforceSession 
session, SalesforceHttpClient httpClient, SalesforceLoginConfig loginConfig) 
throws SalesforceException {
+        super(version, session, httpClient, loginConfig);
 
         objectMapper = JsonUtils.createObjectMapper();
     }
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
index fa0a2f6..813a56e 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultBulkApiClient.java
@@ -38,6 +38,7 @@ import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.api.dto.RestError;
 import org.apache.camel.component.salesforce.api.dto.bulk.BatchInfo;
@@ -65,8 +66,8 @@ public class DefaultBulkApiClient extends AbstractClientBase 
implements BulkApiC
     private JAXBContext context;
     private ObjectFactory objectFactory;
 
-    public DefaultBulkApiClient(String version, SalesforceSession session, 
SalesforceHttpClient httpClient) throws SalesforceException {
-        super(version, session, httpClient);
+    public DefaultBulkApiClient(String version, SalesforceSession session, 
SalesforceHttpClient httpClient, SalesforceLoginConfig loginConfig) throws 
SalesforceException {
+        super(version, session, httpClient, loginConfig);
 
         try {
             context = 
JAXBContext.newInstance(JobInfo.class.getPackage().getName(), 
getClass().getClassLoader());
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
index 470dea2..c0b0106 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
@@ -32,6 +32,7 @@ import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.XStreamException;
 import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.api.dto.RestError;
@@ -71,9 +72,9 @@ public class DefaultCompositeApiClient extends 
AbstractClientBase implements Com
     private final XStream xStreamCompositeTree;
 
     public DefaultCompositeApiClient(final SalesforceEndpointConfig 
configuration, final PayloadFormat format, final String version, final 
SalesforceSession session,
-                                     final SalesforceHttpClient httpClient)
+                                     final SalesforceHttpClient httpClient, 
final SalesforceLoginConfig loginConfig)
         throws SalesforceException {
-        super(version, session, httpClient);
+        super(version, session, httpClient, loginConfig);
         this.format = format;
 
         if (configuration.getObjectMapper() != null) {
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
index eae4b1e..33a73dc 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
@@ -29,6 +29,7 @@ import java.util.Optional;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import 
org.apache.camel.component.salesforce.api.SalesforceMultipleChoicesException;
@@ -60,8 +61,8 @@ public class DefaultRestClient extends AbstractClientBase 
implements RestClient
     private ObjectMapper objectMapper;
     private XStream xStream;
 
-    public DefaultRestClient(final SalesforceHttpClient httpClient, final 
String version, final PayloadFormat format, final SalesforceSession session) 
throws SalesforceException {
-        super(version, session, httpClient);
+    public DefaultRestClient(final SalesforceHttpClient httpClient, final 
String version, final PayloadFormat format, final SalesforceSession session, 
final SalesforceLoginConfig loginConfig) throws SalesforceException {
+        super(version, session, httpClient, loginConfig);
 
         this.format = format;
 
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
index cdf5052..9cafd84 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
@@ -25,6 +25,7 @@ import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.component.salesforce.SalesforceComponent;
 import org.apache.camel.component.salesforce.SalesforceEndpoint;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.internal.OperationName;
 import org.apache.camel.component.salesforce.internal.SalesforceSession;
@@ -46,6 +47,7 @@ public abstract class AbstractSalesforceProcessor implements 
SalesforceProcessor
     protected final OperationName operationName;
     protected final SalesforceSession session;
     protected final SalesforceHttpClient httpClient;
+    protected final SalesforceLoginConfig loginConfig;
     protected final boolean rawPayload;
 
     public AbstractSalesforceProcessor(final SalesforceEndpoint endpoint) {
@@ -55,6 +57,7 @@ public abstract class AbstractSalesforceProcessor implements 
SalesforceProcessor
 
         final SalesforceComponent component = endpoint.getComponent();
         session = component.getSession();
+        loginConfig = component.getLoginConfig();
         httpClient = endpoint.getConfiguration().getHttpClient();
         rawPayload = endpoint.getConfiguration().isRawPayload();
     }
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
index 66177e2..3ecfde1 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
@@ -49,7 +49,7 @@ public class AnalyticsApiProcessor extends 
AbstractSalesforceProcessor {
     public AnalyticsApiProcessor(SalesforceEndpoint endpoint) throws 
SalesforceException {
         super(endpoint);
 
-        this.analyticsClient = new 
DefaultAnalyticsApiClient((String)endpointConfigMap.get(SalesforceEndpointConfig.API_VERSION),
 session, httpClient);
+        this.analyticsClient = new 
DefaultAnalyticsApiClient((String)endpointConfigMap.get(SalesforceEndpointConfig.API_VERSION),
 session, httpClient, loginConfig);
     }
 
     @Override
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
index ca413db..ff7b1f9 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
@@ -51,7 +51,7 @@ public class BulkApiProcessor extends 
AbstractSalesforceProcessor {
     public BulkApiProcessor(SalesforceEndpoint endpoint) throws 
SalesforceException {
         super(endpoint);
 
-        this.bulkClient = new 
DefaultBulkApiClient((String)endpointConfigMap.get(SalesforceEndpointConfig.API_VERSION),
 session, httpClient);
+        this.bulkClient = new 
DefaultBulkApiClient((String)endpointConfigMap.get(SalesforceEndpointConfig.API_VERSION),
 session, httpClient, loginConfig);
     }
 
     @Override
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java
index 32c6d8f..64c291e 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java
@@ -64,7 +64,7 @@ public final class CompositeApiProcessor extends 
AbstractSalesforceProcessor {
             throw new SalesforceException("Unsupported format: " + format, 0);
         }
 
-        compositeClient = new DefaultCompositeApiClient(configuration, format, 
apiVersion, session, httpClient);
+        compositeClient = new DefaultCompositeApiClient(configuration, format, 
apiVersion, session, httpClient, loginConfig);
 
     }
 
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
index 3960ef1..d6e288e 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
@@ -347,8 +347,7 @@ public class SubscriptionHelper extends ServiceSupport {
 
         final SalesforceSession session = component.getSession();
         // check login access token
-        if (session.getAccessToken() == null) {
-            // lazy login here!
+        if (session.getAccessToken() == null && 
!component.getLoginConfig().isLazyLogin()) {
             session.login(null);
         }
 
@@ -357,9 +356,16 @@ public class SubscriptionHelper extends ServiceSupport {
             protected void customize(Request request) {
                 super.customize(request);
 
-                // add current security token obtained from session
-                // replace old token
-                request.getHeaders().put(HttpHeader.AUTHORIZATION, "OAuth " + 
session.getAccessToken());
+                //accessToken might be null due to lazy login
+                String accessToken = session.getAccessToken();
+                if (accessToken == null) {
+                    try {
+                        accessToken = session.login(null);
+                    } catch (SalesforceException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+                request.getHeaders().put(HttpHeader.AUTHORIZATION, "OAuth " + 
accessToken);
             }
         };
 
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
index 69baea1..f09764a 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.internal.SalesforceSession;
 import org.apache.camel.impl.DefaultCamelContext;
@@ -46,12 +47,14 @@ import static org.assertj.core.api.Assertions.entry;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class AbstractClientBaseTest {
     static class Client extends AbstractClientBase {
-        Client(final SalesforceSession session) throws SalesforceException {
-            super(null, session, mock(SalesforceHttpClient.class),
+        Client(final SalesforceSession session, final SalesforceLoginConfig 
loginConfig) throws SalesforceException {
+            super(null, session, mock(SalesforceHttpClient.class), loginConfig,
                   1 /* 1 second termination timeout */);
         }
 
@@ -73,7 +76,7 @@ public class AbstractClientBaseTest {
     final Client client;
 
     public AbstractClientBaseTest() throws SalesforceException {
-        client = new Client(session);
+        client = new Client(session, new SalesforceLoginConfig());
 
         when(session.getAccessToken()).thenReturn("token");
     }
@@ -169,4 +172,28 @@ public class AbstractClientBaseTest {
         final long elapsed = System.currentTimeMillis() - stopStartTime;
         assertTrue(elapsed > 900 && elapsed < 1100);
     }
+
+    @Test
+    public void shouldNotLoginWhenAccessTokenIsNullAndLazyLoginIsTrue() throws 
SalesforceException {
+        SalesforceLoginConfig loginConfig = new SalesforceLoginConfig();
+        loginConfig.setLazyLogin(true);
+        Client lazyClient = new Client(session, loginConfig);
+        when(session.getAccessToken()).thenReturn(null);
+
+        lazyClient.start();
+
+        verify(session, never()).login(null);
+    }
+
+    @Test
+    public void shouldLoginWhenAccessTokenIsNullAndLazyLoginIsFalse() throws 
SalesforceException {
+        SalesforceLoginConfig loginConfig = new SalesforceLoginConfig();
+        loginConfig.setLazyLogin(false);
+        Client eagerClient = new Client(session, loginConfig);
+        when(session.getAccessToken()).thenReturn(null);
+
+        eagerClient.start();
+
+        verify(session).login(null);
+    }
 }
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelperTest.java
 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelperTest.java
index 335317c..cb582d3 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelperTest.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelperTest.java
@@ -24,12 +24,20 @@ import java.util.Optional;
 import org.apache.camel.component.salesforce.SalesforceComponent;
 import org.apache.camel.component.salesforce.SalesforceEndpoint;
 import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
+import org.apache.camel.component.salesforce.SalesforceHttpClient;
+import org.apache.camel.component.salesforce.SalesforceLoginConfig;
+import org.apache.camel.component.salesforce.api.SalesforceException;
+import org.apache.camel.component.salesforce.internal.SalesforceSession;
+import org.cometd.client.BayeuxClient;
 import org.junit.Test;
 
 import static 
org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.determineReplayIdFor;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class SubscriptionHelperTest {
@@ -106,4 +114,50 @@ public class SubscriptionHelperTest {
         
assertThat(SubscriptionHelper.getChannelName("event/Test")).isEqualTo("/event/Test__e");
         
assertThat(SubscriptionHelper.getChannelName("event/Test__e")).isEqualTo("/event/Test__e");
     }
+
+    @Test
+    public void shouldNotLoginWhenAccessTokenIsNullAndLazyLoginIsTrue() throws 
SalesforceException {
+        final SalesforceHttpClient httpClient = 
mock(SalesforceHttpClient.class);
+        httpClient.setTimeout(0L);
+
+        final SalesforceEndpointConfig endpointConfig = new 
SalesforceEndpointConfig();
+        endpointConfig.setHttpClient(httpClient);
+
+        final SalesforceLoginConfig loginConfig = new SalesforceLoginConfig();
+        loginConfig.setLazyLogin(true);
+
+        final SalesforceSession session = mock(SalesforceSession.class);
+        final SalesforceComponent component = mock(SalesforceComponent.class);
+        when(component.getLoginConfig()).thenReturn(loginConfig);
+        when(component.getConfig()).thenReturn(endpointConfig);
+        when(component.getSession()).thenReturn(session);
+
+        BayeuxClient bayeuxClient = SubscriptionHelper.createClient(component);
+
+        assertNotNull(bayeuxClient);
+        verify(session, never()).login(null);
+    }
+
+    @Test
+    public void shouldLoginWhenAccessTokenIsNullAndLazyLoginIsFalse() throws 
SalesforceException {
+        final SalesforceHttpClient httpClient = 
mock(SalesforceHttpClient.class);
+        httpClient.setTimeout(0L);
+
+        final SalesforceEndpointConfig endpointConfig = new 
SalesforceEndpointConfig();
+        endpointConfig.setHttpClient(httpClient);
+
+        final SalesforceLoginConfig loginConfig = new SalesforceLoginConfig();
+        loginConfig.setLazyLogin(false);
+
+        final SalesforceSession session = mock(SalesforceSession.class);
+        final SalesforceComponent component = mock(SalesforceComponent.class);
+        when(component.getLoginConfig()).thenReturn(loginConfig);
+        when(component.getConfig()).thenReturn(endpointConfig);
+        when(component.getSession()).thenReturn(session);
+
+        BayeuxClient bayeuxClient = SubscriptionHelper.createClient(component);
+
+        assertNotNull(bayeuxClient);
+        verify(session).login(null);
+    }
 }
diff --git 
a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/AbstractSalesforceMojo.java
 
b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/AbstractSalesforceMojo.java
index 79b081c..e08d67a 100644
--- 
a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/AbstractSalesforceMojo.java
+++ 
b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/AbstractSalesforceMojo.java
@@ -209,7 +209,7 @@ abstract class AbstractSalesforceMojo extends AbstractMojo {
 
             // create rest client
 
-            restClient = new DefaultRestClient(httpClient, version, 
PayloadFormat.JSON, session);
+            restClient = new DefaultRestClient(httpClient, version, 
PayloadFormat.JSON, session, new SalesforceLoginConfig());
             // remember to start the active client object
             ((DefaultRestClient)restClient).start();
 

Reply via email to