This is an automated email from the ASF dual-hosted git repository.
aboda 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 4b0c8bf6af NIFI-12114 Create separate test instance for python
extensions
4b0c8bf6af is described below
commit 4b0c8bf6af6eee30b0c9fc851a82e0fab45d35ab
Author: Nandor Soma Abonyi <[email protected]>
AuthorDate: Fri Sep 22 16:47:27 2023 +0200
NIFI-12114 Create separate test instance for python extensions
Signed-off-by: Arpad Boda <[email protected]>
This closes #7780
---
.github/workflows/system-tests.yml | 1 +
nifi-system-tests/nifi-system-test-suite/pom.xml | 24 +++
.../org/apache/nifi/tests/system/NiFiSystemIT.java | 16 +-
.../tests/system/python/PythonProcessorIT.java | 5 +-
.../resources/conf/clustered/node1/nifi.properties | 2 +-
.../resources/conf/clustered/node2/nifi.properties | 2 +-
.../test/resources/conf/default/nifi.properties | 2 +-
.../test/resources/conf/pythonic/bootstrap.conf | 33 ++++
.../src/test/resources/conf/pythonic/logback.xml | 214 +++++++++++++++++++++
.../conf/{default => pythonic}/nifi.properties | 34 ++--
.../resources/conf/pythonic/state-management.xml | 32 +++
.../resources/conf/pythonic/zookeeper.properties | 45 +++++
12 files changed, 386 insertions(+), 24 deletions(-)
diff --git a/.github/workflows/system-tests.yml
b/.github/workflows/system-tests.yml
index d1e81806f9..f2c4c41748 100644
--- a/.github/workflows/system-tests.yml
+++ b/.github/workflows/system-tests.yml
@@ -56,6 +56,7 @@ env:
package
verify
-P integration-tests
+ -D include-python-integration-tests=true
MAVEN_PROJECTS: >-
-pl :nifi-python-framework
-pl :nifi-python-extension-api
diff --git a/nifi-system-tests/nifi-system-test-suite/pom.xml
b/nifi-system-tests/nifi-system-test-suite/pom.xml
index 92906f1c89..f173a353af 100644
--- a/nifi-system-tests/nifi-system-test-suite/pom.xml
+++ b/nifi-system-tests/nifi-system-test-suite/pom.xml
@@ -24,6 +24,30 @@
<artifactId>nifi-system-test-suite</artifactId>
<packaging>jar</packaging>
+ <profiles>
+ <profile>
+ <id>include-python-integration-tests</id>
+ <activation>
+ <property>
+ <name>include-python-integration-tests</name>
+ <value>!true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>PythonProcessorIT.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
<build>
<plugins>
<plugin>
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/NiFiSystemIT.java
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/NiFiSystemIT.java
index f0ef3741e2..b927fae922 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/NiFiSystemIT.java
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/NiFiSystemIT.java
@@ -201,7 +201,7 @@ public abstract class NiFiSystemIT implements
NiFiInstanceProvider {
.bootstrapConfig("src/test/resources/conf/default/bootstrap.conf")
.instanceDirectory("target/standalone-instance")
.overrideNifiProperties(getNifiPropertiesOverrides())
- .unpackPythonExtensions(isUnpackPythonExtensions())
+ .unpackPythonExtensions(false)
.build());
}
@@ -211,6 +211,16 @@ public abstract class NiFiSystemIT implements
NiFiInstanceProvider {
"src/test/resources/conf/clustered/node2/bootstrap.conf");
}
+ public NiFiInstanceFactory createPythonicInstanceFactory() {
+ return new SpawnedStandaloneNiFiInstanceFactory(
+ new InstanceConfiguration.Builder()
+
.bootstrapConfig("src/test/resources/conf/pythonic/bootstrap.conf")
+ .instanceDirectory("target/pythonic-instance")
+ .overrideNifiProperties(getNifiPropertiesOverrides())
+ .unpackPythonExtensions(true)
+ .build());
+ }
+
protected String getTestName() {
return testInfo.getDisplayName();
}
@@ -545,10 +555,6 @@ public abstract class NiFiSystemIT implements
NiFiInstanceProvider {
return node2Dto;
}
- protected boolean isUnpackPythonExtensions() {
- return false;
- }
-
/**
* Disconnects a node from the cluster
* @param nodeIndex the 1-based index of the node
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/python/PythonProcessorIT.java
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/python/PythonProcessorIT.java
index ffe3c10efb..1b98c4bc51 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/python/PythonProcessorIT.java
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/python/PythonProcessorIT.java
@@ -17,6 +17,7 @@
package org.apache.nifi.tests.system.python;
+import org.apache.nifi.tests.system.NiFiInstanceFactory;
import org.apache.nifi.tests.system.NiFiSystemIT;
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
import org.apache.nifi.web.api.dto.ProcessorConfigDTO;
@@ -41,8 +42,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class PythonProcessorIT extends NiFiSystemIT {
@Override
- protected boolean isUnpackPythonExtensions() {
- return true;
+ public NiFiInstanceFactory getInstanceFactory() {
+ return createPythonicInstanceFactory();
}
@Test
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node1/nifi.properties
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node1/nifi.properties
index b81700821a..95d9693a2d 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node1/nifi.properties
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node1/nifi.properties
@@ -42,7 +42,7 @@ nifi.documentation.working.directory=./work/docs/components
# Python Extensions #
#####################
# Uncomment in order to enable Python Extensions.
-nifi.python.command=python
+#nifi.python.command=python
nifi.python.framework.source.directory=./python/framework
nifi.python.extensions.source.directory.default=./python/extensions
nifi.python.working.directory=./work/python
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node2/nifi.properties
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node2/nifi.properties
index 234df2872e..79b7d13026 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node2/nifi.properties
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/clustered/node2/nifi.properties
@@ -42,7 +42,7 @@ nifi.documentation.working.directory=./work/docs/components
# Python Extensions #
#####################
# Uncomment in order to enable Python Extensions.
-nifi.python.command=python
+#nifi.python.command=python
nifi.python.framework.source.directory=./python/framework
nifi.python.extensions.source.directory.default=./python/extensions
nifi.python.working.directory=./work/python
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
index 368623726c..3b925e4317 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
@@ -42,7 +42,7 @@ nifi.documentation.working.directory=./work/docs/components
# Python Extensions #
#####################
# Uncomment in order to enable Python Extensions.
-nifi.python.command=python
+#nifi.python.command=python
nifi.python.framework.source.directory=./python/framework
nifi.python.extensions.source.directory.default=./python/extensions
nifi.python.working.directory=./work/python
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/bootstrap.conf
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/bootstrap.conf
new file mode 100644
index 0000000000..471972c00b
--- /dev/null
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/bootstrap.conf
@@ -0,0 +1,33 @@
+# 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.
+
+# Configure where NiFi's lib and conf directories live
+lib.dir=../nifi-lib-assembly/lib
+conf.dir=./conf
+working.dir=./target/pythonic-instance
+
+# How long to wait after telling NiFi to shutdown before explicitly killing
the Process
+graceful.shutdown.seconds=20
+
+# JVM memory settings
+java.arg.2=-Xms512m
+java.arg.3=-Xmx512m
+
+java.arg.14=-Djava.awt.headless=true
+
+#java.arg.debug=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002
+
+# Disable Logback web shutdown hook using System property
+java.arg.logbackShutdown=-DlogbackDisableServletContainerInitializer=true
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/logback.xml
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/logback.xml
new file mode 100644
index 0000000000..1a62d56362
--- /dev/null
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/logback.xml
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+
+<configuration scan="true" scanPeriod="30 seconds">
+ <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook" />
+
+ <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
+ <resetJUL>true</resetJUL>
+ </contextListener>
+
+ <appender name="APP_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-app.log</file>
+ <rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+ <!--
+ For daily rollover, use 'app_%d.log'.
+ For hourly rollover, use 'app_%d{yyyy-MM-dd_HH}.log'.
+ To GZIP rolled files, replace '.log' with '.log.gz'.
+ To ZIP rolled files, replace '.log' with '.log.zip'.
+ -->
+
<fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-app_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
+ <maxFileSize>100MB</maxFileSize>
+ <!-- keep 30 log files worth of history -->
+ <maxHistory>30</maxHistory>
+ </rollingPolicy>
+ <immediateFlush>true</immediateFlush>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="USER_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-user.log</file>
+ <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!--
+ For daily rollover, use 'user_%d.log'.
+ For hourly rollover, use 'user_%d{yyyy-MM-dd_HH}.log'.
+ To GZIP rolled files, replace '.log' with '.log.gz'.
+ To ZIP rolled files, replace '.log' with '.log.zip'.
+ -->
+
<fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-user_%d.log</fileNamePattern>
+ <!-- keep 30 log files worth of history -->
+ <maxHistory>30</maxHistory>
+ </rollingPolicy>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="REQUEST_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
+
<file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-request.log</file>
+ <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+
<fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-request_%d.log</fileNamePattern>
+ <maxHistory>30</maxHistory>
+ </rollingPolicy>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="BOOTSTRAP_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
+
<file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-bootstrap.log</file>
+ <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!--
+ For daily rollover, use 'bootstrap_%d.log'.
+ For hourly rollover, use 'bootstrap_%d{yyyy-MM-dd_HH}.log'.
+ To GZIP rolled files, replace '.log' with '.log.gz'.
+ To ZIP rolled files, replace '.log' with '.log.zip'.
+ -->
+
<fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-bootstrap_%d.log</fileNamePattern>
+ <!-- keep 5 log files worth of history -->
+ <maxHistory>5</maxHistory>
+ </rollingPolicy>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <!-- valid logging levels: TRACE, DEBUG, INFO, WARN, ERROR -->
+
+ <logger name="org.apache.nifi" level="INFO"/>
+ <logger name="org.apache.nifi.processors" level="INFO"/>
+ <logger name="org.apache.nifi.processors.standard.LogAttribute"
level="INFO"/>
+ <logger name="org.apache.nifi.processors.standard.LogMessage"
level="INFO"/>
+ <logger
name="org.apache.nifi.controller.repository.StandardProcessSession"
level="WARN" />
+
+
+ <logger name="org.apache.zookeeper.ClientCnxn" level="ERROR" />
+ <logger name="org.apache.zookeeper.server.NIOServerCnxn" level="ERROR" />
+ <logger name="org.apache.zookeeper.server.NIOServerCnxnFactory"
level="ERROR" />
+ <logger name="org.apache.zookeeper.server.NettyServerCnxnFactory"
level="ERROR" />
+ <logger name="org.apache.zookeeper.server.quorum" level="ERROR" />
+ <logger name="org.apache.zookeeper.ZooKeeper" level="ERROR" />
+ <logger name="org.apache.zookeeper.server.PrepRequestProcessor"
level="ERROR" />
+ <logger name="org.apache.nifi.controller.reporting.LogComponentStatuses"
level="ERROR" />
+
+ <logger name="org.apache.calcite.runtime.CalciteException" level="OFF" />
+ <logger name="deprecation" level="OFF" />
+
+ <logger name="org.apache.curator.framework.recipes.leader.LeaderSelector"
level="OFF" />
+ <logger name="org.apache.curator.ConnectionState" level="OFF" />
+
+ <!-- Logger for managing logging statements for nifi clusters. -->
+ <logger name="org.apache.nifi.cluster" level="INFO"/>
+
+ <!-- Logger for logging HTTP requests received by the web server. -->
+ <logger name="org.apache.nifi.server.JettyServer" level="INFO"/>
+
+ <!-- Logger for managing logging statements for jetty -->
+ <logger name="org.eclipse.jetty" level="INFO"/>
+
+ <!-- Suppress non-error messages due to excessive logging by class or
library -->
+ <logger name="org.springframework" level="ERROR"/>
+
+ <!-- Suppress non-error messages due to known warning about redundant path
annotation (NIFI-574) -->
+ <logger name="org.glassfish.jersey.internal.Errors" level="ERROR"/>
+
+ <!-- Suppress non-error messages due to Jetty AnnotationParser emitting a
large amount of WARNS. Issue described in NIFI-5479. -->
+ <logger name="org.eclipse.jetty.annotations.AnnotationParser"
level="ERROR"/>
+
+ <!-- Suppress non-error messages from SSHJ which was emitting large
amounts of INFO logs by default -->
+ <logger name="net.schmizz.sshj" level="WARN" />
+ <logger name="com.hierynomus.sshj" level="WARN" />
+
+ <!-- Suppress non-error messages from SMBJ which was emitting large
amounts of INFO logs by default -->
+ <logger name="com.hierynomus.smbj" level="WARN" />
+
+ <!-- Suppress non-error messages from AWS KCL which was emitting large
amounts of INFO logs by default -->
+ <logger name="com.amazonaws.services.kinesis" level="WARN" />
+
+ <!-- Suppress non-error messages from Apache Atlas which was emitting
large amounts of INFO logs by default -->
+ <logger name="org.apache.atlas" level="WARN"/>
+
+ <!-- These log messages would normally go to the USER_FILE log, but they
belong in the APP_FILE -->
+ <logger name="org.apache.nifi.web.security.requests" level="INFO"
additivity="false">
+ <appender-ref ref="APP_FILE"/>
+ </logger>
+
+ <!--
+ Logger for capturing user events. We do not want to propagate these
+ log events to the root logger. These messages are only sent to the
+ user-log appender.
+ -->
+ <logger name="org.apache.nifi.web.security" level="INFO"
additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+ <logger name="org.apache.nifi.web.api.config" level="INFO"
additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+ <logger name="org.apache.nifi.authorization" level="INFO"
additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+ <logger name="org.apache.nifi.cluster.authorization" level="INFO"
additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+ <logger name="org.apache.nifi.web.api.AccessResource" level="INFO"
additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+ <logger name="org.springframework.security.saml.log" level="WARN"
additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+ <logger name="org.opensaml" level="WARN" additivity="false">
+ <appender-ref ref="USER_FILE"/>
+ </logger>
+
+ <!-- Web Server Request Log -->
+ <logger name="org.apache.nifi.web.server.RequestLog" level="INFO"
additivity="false">
+ <appender-ref ref="REQUEST_FILE"/>
+ </logger>
+
+ <!--
+ Logger for capturing Bootstrap logs and NiFi's standard error and
standard out.
+ -->
+ <logger name="org.apache.nifi.bootstrap" level="INFO" additivity="false">
+ <appender-ref ref="BOOTSTRAP_FILE" />
+ </logger>
+ <logger name="org.apache.nifi.bootstrap.Command" level="INFO"
additivity="false">
+ <appender-ref ref="CONSOLE" />
+ <appender-ref ref="BOOTSTRAP_FILE" />
+ </logger>
+
+ <!-- Everything written to NiFi's Standard Out will be logged with the
logger org.apache.nifi.StdOut at INFO level -->
+ <logger name="org.apache.nifi.StdOut" level="INFO" additivity="false">
+ <appender-ref ref="BOOTSTRAP_FILE" />
+ </logger>
+
+ <!-- Everything written to NiFi's Standard Error will be logged with the
logger org.apache.nifi.StdErr at ERROR level -->
+ <logger name="org.apache.nifi.StdErr" level="ERROR" additivity="false">
+ <appender-ref ref="BOOTSTRAP_FILE" />
+ </logger>
+
+ <root level="INFO">
+ <appender-ref ref="APP_FILE" />
+ </root>
+
+</configuration>
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/nifi.properties
similarity index 91%
copy from
nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
copy to
nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/nifi.properties
index 368623726c..108df0a627 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/default/nifi.properties
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/nifi.properties
@@ -1,17 +1,21 @@
-# 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
+# /*
+# * 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.
+# */
#
-# 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.
# Core Properties #
nifi.flow.configuration.file=./conf/flow.xml.gz
@@ -42,7 +46,7 @@ nifi.documentation.working.directory=./work/docs/components
# Python Extensions #
#####################
# Uncomment in order to enable Python Extensions.
-nifi.python.command=python
+nifi.python.command=python3
nifi.python.framework.source.directory=./python/framework
nifi.python.extensions.source.directory.default=./python/extensions
nifi.python.working.directory=./work/python
@@ -257,4 +261,6 @@ nifi.kerberos.spnego.principal=
nifi.kerberos.spnego.keytab.location=
nifi.kerberos.spnego.authentication.expiration=12 hours
-nifi.flow.analysis.background.task.schedule=5 mins
+# external properties files for variable registry
+# supports a comma delimited list of file locations
+nifi.variable.registry.properties=
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/state-management.xml
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/state-management.xml
new file mode 100644
index 0000000000..65f6d9c67c
--- /dev/null
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/state-management.xml
@@ -0,0 +1,32 @@
+<!--
+ 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.
+-->
+<stateManagement>
+ <local-provider>
+ <id>local-provider</id>
+
<class>org.apache.nifi.controller.state.providers.local.WriteAheadLocalStateProvider</class>
+ <property name="Directory">./state/local</property>
+ <property name="Always Sync">false</property>
+ <property name="Partitions">16</property>
+ <property name="Checkpoint Interval">2 mins</property>
+ </local-provider>
+ <cluster-provider>
+ <id>zk-provider</id>
+
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
+ <property name="Connect String">localhost:62181</property>
+ <property name="Root Node">/nifi-integration-test</property>
+ <property name="Session Timeout">30 seconds</property>
+ <property name="Access Control">Open</property>
+ </cluster-provider>
+</stateManagement>
\ No newline at end of file
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/zookeeper.properties
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/zookeeper.properties
new file mode 100644
index 0000000000..47b9290a51
--- /dev/null
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/resources/conf/pythonic/zookeeper.properties
@@ -0,0 +1,45 @@
+#
+#
+# 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.
+#
+#
+#
+
+clientPort=62181
+initLimit=10
+autopurge.purgeInterval=24
+syncLimit=5
+tickTime=2000
+dataDir=target/state/zookeeper
+autopurge.snapRetainCount=30
+
+#
+# Specifies the servers that are part of this zookeeper ensemble. For
+# every NiFi instance running an embedded zookeeper, there needs to be
+# a server entry below. For instance:
+#
+# server.1=nifi-node1-hostname:2888:3888
+# server.2=nifi-node2-hostname:2888:3888
+# server.3=nifi-node3-hostname:2888:3888
+#
+# The index of the server corresponds to the myid file that gets created
+# in the dataDir of each node running an embedded zookeeper. See the
+# administration guide for more details.
+#
+
+server.1=localhost:5777:6777