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

turcsanyi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 88de03a  NIFI-7895 - Fix NPE in ConsumeMQTT with truststore only SSL CS
88de03a is described below

commit 88de03aebb5f8641324ff7c8a60cb5aed0bcd187
Author: Pierre Villard <[email protected]>
AuthorDate: Thu Oct 8 15:33:46 2020 +0200

    NIFI-7895 - Fix NPE in ConsumeMQTT with truststore only SSL CS
    
    This closes #4587.
    
    Signed-off-by: Peter Turcsanyi <[email protected]>
---
 .../mqtt/common/AbstractMQTTProcessor.java         | 28 +++++++++++++++------
 .../nifi/processors/mqtt/TestConsumeMQTT.java      | 29 ++++++++++++++++++++++
 .../nifi/processors/mqtt/common/MqttTestUtils.java | 11 +++++++-
 3 files changed, 60 insertions(+), 8 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/main/java/org/apache/nifi/processors/mqtt/common/AbstractMQTTProcessor.java
 
b/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/main/java/org/apache/nifi/processors/mqtt/common/AbstractMQTTProcessor.java
index 34c3e1f..d6d4040 100644
--- 
a/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/main/java/org/apache/nifi/processors/mqtt/common/AbstractMQTTProcessor.java
+++ 
b/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/main/java/org/apache/nifi/processors/mqtt/common/AbstractMQTTProcessor.java
@@ -288,13 +288,27 @@ public abstract class AbstractMQTTProcessor extends 
AbstractSessionFactoryProces
 
     public static Properties transformSSLContextService(SSLContextService 
sslContextService){
         Properties properties = new Properties();
-        properties.setProperty("com.ibm.ssl.protocol", 
sslContextService.getSslAlgorithm());
-        properties.setProperty("com.ibm.ssl.keyStore", 
sslContextService.getKeyStoreFile());
-        properties.setProperty("com.ibm.ssl.keyStorePassword", 
sslContextService.getKeyStorePassword());
-        properties.setProperty("com.ibm.ssl.keyStoreType", 
sslContextService.getKeyStoreType());
-        properties.setProperty("com.ibm.ssl.trustStore", 
sslContextService.getTrustStoreFile());
-        properties.setProperty("com.ibm.ssl.trustStorePassword", 
sslContextService.getTrustStorePassword());
-        properties.setProperty("com.ibm.ssl.trustStoreType", 
sslContextService.getTrustStoreType());
+        if (sslContextService.getSslAlgorithm() != null) {
+            properties.setProperty("com.ibm.ssl.protocol", 
sslContextService.getSslAlgorithm());
+        }
+        if (sslContextService.getKeyStoreFile() != null) {
+            properties.setProperty("com.ibm.ssl.keyStore", 
sslContextService.getKeyStoreFile());
+        }
+        if (sslContextService.getKeyStorePassword() != null) {
+            properties.setProperty("com.ibm.ssl.keyStorePassword", 
sslContextService.getKeyStorePassword());
+        }
+        if (sslContextService.getKeyStoreType() != null) {
+            properties.setProperty("com.ibm.ssl.keyStoreType", 
sslContextService.getKeyStoreType());
+        }
+        if (sslContextService.getTrustStoreFile() != null) {
+            properties.setProperty("com.ibm.ssl.trustStore", 
sslContextService.getTrustStoreFile());
+        }
+        if (sslContextService.getTrustStorePassword() != null) {
+            properties.setProperty("com.ibm.ssl.trustStorePassword", 
sslContextService.getTrustStorePassword());
+        }
+        if (sslContextService.getTrustStoreType() != null) {
+            properties.setProperty("com.ibm.ssl.trustStoreType", 
sslContextService.getTrustStoreType());
+        }
         return  properties;
     }
 
diff --git 
a/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/TestConsumeMQTT.java
 
b/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/TestConsumeMQTT.java
index 7d02804..d8c86d6 100644
--- 
a/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/TestConsumeMQTT.java
+++ 
b/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/TestConsumeMQTT.java
@@ -21,7 +21,11 @@ import io.moquette.proto.messages.PublishMessage;
 import org.apache.nifi.processor.ProcessSession;
 import org.apache.nifi.processors.mqtt.common.MQTTQueueMessage;
 import org.apache.nifi.processors.mqtt.common.MqttTestClient;
+import org.apache.nifi.processors.mqtt.common.MqttTestUtils;
 import org.apache.nifi.processors.mqtt.common.TestConsumeMqttCommon;
+import org.apache.nifi.reporting.InitializationException;
+import org.apache.nifi.ssl.StandardSSLContextService;
+import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
 import org.eclipse.paho.client.mqttv3.IMqttClient;
 import org.eclipse.paho.client.mqttv3.MqttException;
@@ -36,6 +40,7 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Proxy;
+import java.util.Map;
 import java.util.concurrent.BlockingQueue;
 
 import static org.junit.Assert.assertTrue;
@@ -73,6 +78,30 @@ public class TestConsumeMQTT extends TestConsumeMqttCommon {
         testRunner.setProperty(ConsumeMQTT.PROP_MAX_QUEUE_SIZE, "100");
     }
 
+    @Test
+    public void testSSLContextServiceTruststoreOnly() throws 
InitializationException {
+        String brokerURI = "ssl://localhost:8883";
+        TestRunner runner = TestRunners.newTestRunner(ConsumeMQTT.class);
+        runner.setProperty(ConsumeMQTT.PROP_BROKER_URI, brokerURI);
+        runner.setProperty(ConsumeMQTT.PROP_CLIENTID, "TestClient");
+        runner.setProperty(ConsumeMQTT.PROP_TOPIC_FILTER, "testTopic");
+        runner.setProperty(ConsumeMQTT.PROP_MAX_QUEUE_SIZE, "100");
+
+        final StandardSSLContextService sslService = new 
StandardSSLContextService();
+        Map<String, String> sslProperties = 
MqttTestUtils.createSslPropertiesTruststoreOnly();
+        runner.addControllerService("ssl-context", sslService, sslProperties);
+        runner.enableControllerService(sslService);
+        runner.setProperty(ConsumeMQTT.PROP_SSL_CONTEXT_SERVICE, 
"ssl-context");
+
+        try {
+            ConsumeMQTT processor = (ConsumeMQTT) runner.getProcessor();
+            processor.onScheduled(runner.getProcessContext());
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail("Unexpected error");
+        }
+    }
+
     /**
      * If the session.commit() fails, we should not remove the unprocessed 
message
      */
diff --git 
a/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/common/MqttTestUtils.java
 
b/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/common/MqttTestUtils.java
index 1aa844b..37c93b1 100644
--- 
a/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/common/MqttTestUtils.java
+++ 
b/nifi-nar-bundles/nifi-mqtt-bundle/nifi-mqtt-processors/src/test/java/org/apache/nifi/processors/mqtt/common/MqttTestUtils.java
@@ -23,8 +23,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 public class MqttTestUtils {
-    public static Map<String, String> createSslProperties() {
 
+    public static Map<String, String> createSslProperties() {
         final Map<String, String> map = new HashMap<>();
         map.put(StandardSSLContextService.KEYSTORE.getName(), 
"src/test/resources/keystore.jks");
         map.put(StandardSSLContextService.KEYSTORE_PASSWORD.getName(), 
"passwordpassword");
@@ -34,4 +34,13 @@ public class MqttTestUtils {
         map.put(StandardSSLContextService.TRUSTSTORE_TYPE.getName(), "JKS");
         return map;
     }
+
+    public static Map<String, String> createSslPropertiesTruststoreOnly() {
+        final Map<String, String> map = new HashMap<>();
+        map.put(StandardSSLContextService.TRUSTSTORE.getName(), 
"src/test/resources/truststore.jks");
+        map.put(StandardSSLContextService.TRUSTSTORE_PASSWORD.getName(), 
"passwordpassword");
+        map.put(StandardSSLContextService.TRUSTSTORE_TYPE.getName(), "JKS");
+        return map;
+    }
+
 }

Reply via email to