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

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


The following commit(s) were added to refs/heads/main by this push:
     new 5aab66e  MINIFI-537 Fix NPE in BootstrapTransformer
5aab66e is described below

commit 5aab66ee7deca8625926c8be76aa37bf78eb7cfa
Author: Kevin Doran <kdo...@apache.org>
AuthorDate: Thu Aug 27 15:24:00 2020 -0400

    MINIFI-537 Fix NPE in BootstrapTransformer
    
    Also includes partial work towards MINIFI-536 by adding setters to 
ConfigSchema.
    
    MINIFI-537 Add unit tests
    
    Fix checkstlye errors
---
 .../minifi/bootstrap/util/ConfigTransformer.java   |  4 +-
 .../bootstrap/util/ConfigTransformerTest.java      | 11 ++++++
 .../src/test/resources/MINIFI-516/bootstrap.conf   |  2 +-
 .../src/test/resources/MINIFI-516/config.yml       |  2 +-
 .../src/test/resources/MINIFI-537/config.yml       | 43 +++++++++++++++++++++
 .../nifi/minifi/commons/schema/ConfigSchema.java   | 44 ++++++++++++++++++++--
 6 files changed, 99 insertions(+), 7 deletions(-)

diff --git 
a/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
 
b/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
index 3609426..fd1aa07 100644
--- 
a/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
+++ 
b/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
@@ -257,7 +257,9 @@ public final class ConfigTransformer {
             orderedProperties.setProperty("nifi.web.jetty.working.directory", 
"./work/jetty");
             orderedProperties.setProperty("nifi.web.jetty.threads", "200");
 
-            orderedProperties.setProperty("nifi.sensitive.props.key", 
sensitiveProperties.getKey(), System.lineSeparator() + "# security properties 
#");
+            final String sensitivePropertiesKey = sensitiveProperties.getKey();
+            final String notnullSensitivePropertiesKey = 
sensitivePropertiesKey != null ? sensitivePropertiesKey : "";
+            orderedProperties.setProperty("nifi.sensitive.props.key", 
notnullSensitivePropertiesKey, System.lineSeparator() + "# security properties 
#");
             orderedProperties.setProperty("nifi.sensitive.props.algorithm", 
sensitiveProperties.getAlgorithm());
             orderedProperties.setProperty("nifi.sensitive.props.provider", 
sensitiveProperties.getProvider());
 
diff --git 
a/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
 
b/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
index ae7ffa7..d9c6716 100644
--- 
a/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
+++ 
b/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
@@ -718,6 +718,17 @@ public class ConfigTransformerTest {
         }
     }
 
+    @Test
+    public void testNullSensitiveKey() throws IOException, 
ConfigurationChangeException, SchemaLoaderException {
+        final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        try (final InputStream configStream = 
ConfigTransformerTest.class.getClassLoader().getResourceAsStream("MINIFI-537/config.yml"))
 {
+            
ConfigTransformer.writeNiFiProperties(SchemaLoader.loadConfigSchemaFromYaml(configStream),
 outputStream);
+        }
+        final Properties properties = new Properties();
+        properties.load(new ByteArrayInputStream(outputStream.toByteArray()));
+        assertEquals("", properties.getProperty("nifi.sensitive.props.key"));
+    }
+
     private String getText(Element element, String path) throws 
XPathExpressionException {
         return (String) xPathFactory.newXPath().evaluate(path + "/text()", 
element, XPathConstants.STRING);
     }
diff --git a/minifi-bootstrap/src/test/resources/MINIFI-516/bootstrap.conf 
b/minifi-bootstrap/src/test/resources/MINIFI-516/bootstrap.conf
index 2fe540d..06b0497 100644
--- a/minifi-bootstrap/src/test/resources/MINIFI-516/bootstrap.conf
+++ b/minifi-bootstrap/src/test/resources/MINIFI-516/bootstrap.conf
@@ -36,7 +36,7 @@ nifi.minifi.config=./conf/config.yml
 # Security Properties #
 # These properties take precedence over any equivalent properties specified in 
config.yml #
 nifi.minifi.security.keystore=
-nifi.minifi.security.keystoreType=
+nifi.minifi.security.keystoreType=jks
 nifi.minifi.security.keystorePasswd=
 nifi.minifi.security.keyPasswd=
 nifi.minifi.security.truststore=
diff --git a/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml 
b/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
index 933e124..46da72c 100644
--- a/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
+++ b/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
@@ -46,7 +46,7 @@ Component Status Repository:
   snapshot frequency: 1 min
 Security Properties:
   keystore: ''
-  keystore type: ''
+  keystore type: 'jks'
   keystore password: ''
   key password: ''
   truststore: ''
diff --git a/minifi-bootstrap/src/test/resources/MINIFI-537/config.yml 
b/minifi-bootstrap/src/test/resources/MINIFI-537/config.yml
new file mode 100644
index 0000000..7193843
--- /dev/null
+++ b/minifi-bootstrap/src/test/resources/MINIFI-537/config.yml
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the \"License\"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an \"AS IS\" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+MiNiFi Config Version: 3
+Flow Controller:
+  name: MiNiFi Flow
+  comment: ''
+Core Properties:
+  flow controller graceful shutdown period: 10 sec
+  flow service write delay interval: 500 ms
+  administrative yield duration: 30 sec
+  bored yield duration: 10 millis
+  max concurrent threads: 1
+  variable registry properties: additional.properties
+Security Properties:
+  keystore: /tmp/ssl/localhost-ks.jks
+  keystore type: JKS
+  keystore password: localtest
+  key password: localtest
+  truststore: /tmp/ssl/localhost-ts.jks
+  truststore type: JKS
+  truststore password: localtest
+  ssl protocol: TLS
+Processors: []
+Connections: []
+Remote Process Groups: []
+Provenance Reporting: {}
+FlowFile Repository: {}
+Content Repository: {}
+Provenance Repository: {}
+Component Status Repository: {}
diff --git 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
index d6b36ef..31577c9 100644
--- 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
+++ 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
@@ -186,18 +186,34 @@ public class ConfigSchema extends BaseSchema implements 
WritableSchema, Converta
         return flowControllerProperties;
     }
 
+    public void setFlowControllerProperties(final FlowControllerSchema 
flowControllerProperties) {
+        this.flowControllerProperties = flowControllerProperties;
+    }
+
     public CorePropertiesSchema getCoreProperties() {
         return coreProperties;
     }
 
+    public void setCoreProperties(final CorePropertiesSchema coreProperties) {
+        this.coreProperties = coreProperties;
+    }
+
     public FlowFileRepositorySchema getFlowfileRepositoryProperties() {
         return flowfileRepositoryProperties;
     }
 
+    public void setFlowfileRepositoryProperties(final FlowFileRepositorySchema 
flowfileRepositoryProperties) {
+        this.flowfileRepositoryProperties = flowfileRepositoryProperties;
+    }
+
     public ContentRepositorySchema getContentRepositoryProperties() {
         return contentRepositoryProperties;
     }
 
+    public void setContentRepositoryProperties(final ContentRepositorySchema 
contentRepositoryProperties) {
+        this.contentRepositoryProperties = contentRepositoryProperties;
+    }
+
     public SecurityPropertiesSchema getSecurityProperties() {
         return securityProperties;
     }
@@ -206,34 +222,54 @@ public class ConfigSchema extends BaseSchema implements 
WritableSchema, Converta
         this.securityProperties = securityProperties;
     }
 
-    public void setProvenanceReportingProperties(ProvenanceReportingSchema 
provenanceReportingProperties) {
-        this.provenanceReportingProperties = provenanceReportingProperties;
-    }
-
     public ProcessGroupSchema getProcessGroupSchema() {
         return processGroupSchema;
     }
 
+    public void setProcessGroupSchema(final ProcessGroupSchema 
processGroupSchema) {
+        this.processGroupSchema = processGroupSchema;
+    }
+
     public ProvenanceReportingSchema getProvenanceReportingProperties() {
         return provenanceReportingProperties;
     }
 
+    public void setProvenanceReportingProperties(ProvenanceReportingSchema 
provenanceReportingProperties) {
+        this.provenanceReportingProperties = provenanceReportingProperties;
+    }
+
     public List<ReportingSchema> getReportingTasksSchema() {
         return reportingTasks;
     }
 
+    public void setReportingTasks(final List<ReportingSchema> reportingTasks) {
+        this.reportingTasks = reportingTasks;
+    }
+
     public ComponentStatusRepositorySchema 
getComponentStatusRepositoryProperties() {
         return componentStatusRepositoryProperties;
     }
 
+    public void setComponentStatusRepositoryProperties(final 
ComponentStatusRepositorySchema componentStatusRepositoryProperties) {
+        this.componentStatusRepositoryProperties = 
componentStatusRepositoryProperties;
+    }
+
     public ProvenanceRepositorySchema getProvenanceRepositorySchema() {
         return provenanceRepositorySchema;
     }
 
+    public void setProvenanceRepositorySchema(final ProvenanceRepositorySchema 
provenanceRepositorySchema) {
+        this.provenanceRepositorySchema = provenanceRepositorySchema;
+    }
+
     public Map<String, String> getNifiPropertiesOverrides() {
         return nifiPropertiesOverrides;
     }
 
+    public void setNifiPropertiesOverrides(final Map<String, String> 
nifiPropertiesOverrides) {
+        this.nifiPropertiesOverrides = nifiPropertiesOverrides;
+    }
+
     @Override
     public int getVersion() {
         return CONFIG_VERSION;

Reply via email to