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;