This is an automated email from the ASF dual-hosted git repository.
pvillard 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 6b265e2120 NIFI-12282 Moved Hadoop and other NARs to Optional Profiles
6b265e2120 is described below
commit 6b265e21207df76b8848d0f548387a2fb9e12233
Author: exceptionfactory <[email protected]>
AuthorDate: Thu Oct 26 22:35:23 2023 -0500
NIFI-12282 Moved Hadoop and other NARs to Optional Profiles
- Moved Hadoop and Parquet NARs to include-hadoop
- Moved HBase NARs to include-hbase
- Moved Kudu NAR to include-kudu
- Moved Solr NAR to include-solr
This closes #7942.
Signed-off-by: Pierre Villard <[email protected]>
---
nifi-assembly/pom.xml | 150 +++++++++++------
nifi-docs/src/main/asciidoc/developer-guide.adoc | 4 +
.../nifi/runtime/manifest/TestRuntimeManifest.java | 182 ++++++++++-----------
3 files changed, 190 insertions(+), 146 deletions(-)
diff --git a/nifi-assembly/pom.xml b/nifi-assembly/pom.xml
index 99d073bfff..f81cc876ac 100644
--- a/nifi-assembly/pom.xml
+++ b/nifi-assembly/pom.xml
@@ -312,18 +312,6 @@ language governing permissions and limitations under the
License. -->
<artifactId>nifi-stateless-bootstrap</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-hadoop-libraries-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-hadoop-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-kafka-2-6-nar</artifactId>
@@ -354,12 +342,6 @@ language governing permissions and limitations under the
License. -->
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-kudu-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-ldap-iaa-providers-nar</artifactId>
@@ -390,7 +372,7 @@ language governing permissions and limitations under the
License. -->
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
+ <dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-mongodb-client-service-api-nar</artifactId>
<version>2.0.0-SNAPSHOT</version>
@@ -408,12 +390,6 @@ language governing permissions and limitations under the
License. -->
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-solr-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-social-media-nar</artifactId>
@@ -480,24 +456,12 @@ language governing permissions and limitations under the
License. -->
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-hbase-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-hl7-nar</artifactId>
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-hbase_2-client-service-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-oauth2-provider-nar</artifactId>
@@ -714,12 +678,6 @@ language governing permissions and limitations under the
License. -->
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
- <groupId>org.apache.nifi</groupId>
- <artifactId>nifi-parquet-nar</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <type>nar</type>
- </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-pgp-nar</artifactId>
@@ -786,7 +744,7 @@ language governing permissions and limitations under the
License. -->
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
- <dependency>
+ <dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-kerberos-user-service-nar</artifactId>
<version>2.0.0-SNAPSHOT</version>
@@ -998,6 +956,98 @@ language governing permissions and limitations under the
License. -->
</dependency>
</dependencies>
</profile>
+ <profile>
+ <id>include-hadoop</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ <property>
+ <name>allProfiles</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-hadoop-libraries-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-hadoop-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-parquet-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>include-kudu</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ <property>
+ <name>allProfiles</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-hadoop-libraries-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-kudu-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>include-hbase</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ <property>
+ <name>allProfiles</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-hbase-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-hbase_2-client-service-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>include-solr</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ <property>
+ <name>allProfiles</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-solr-nar</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <type>nar</type>
+ </dependency>
+ </dependencies>
+ </profile>
<profile>
<id>include-hive3</id>
<!-- This profile handles the inclusion of Hive 3 artifacts. The
NAR
@@ -1077,7 +1127,7 @@ language governing permissions and limitations under the
License. -->
<type>nar</type>
</dependency>
</dependencies>
- </profile>
+ </profile>
<profile>
<id>headless</id>
<!-- This profile excludes the nifi-server artifacts, such as the
Web/UI NAR(s) and instead uses the nifi-headless-server-nar. -->
@@ -1100,7 +1150,7 @@ language governing permissions and limitations under the
License. -->
</dependency>
</dependencies>
</profile>
- <profile>
+ <profile>
<id>include-accumulo</id>
<!-- This profile handles the inclusion of nifi-accumulo
artifacts. -->
<activation>
@@ -1115,14 +1165,14 @@ language governing permissions and limitations under
the License. -->
<artifactId>nifi-accumulo-nar</artifactId>
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
- </dependency>
- <dependency>
+ </dependency>
+ <dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-accumulo-services-api-nar</artifactId>
<version>2.0.0-SNAPSHOT</version>
<type>nar</type>
- </dependency>
- <dependency>
+ </dependency>
+ <dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-accumulo-services-nar</artifactId>
<version>2.0.0-SNAPSHOT</version>
diff --git a/nifi-docs/src/main/asciidoc/developer-guide.adoc
b/nifi-docs/src/main/asciidoc/developer-guide.adoc
index 153796cd0c..c23947a56c 100644
--- a/nifi-docs/src/main/asciidoc/developer-guide.adoc
+++ b/nifi-docs/src/main/asciidoc/developer-guide.adoc
@@ -2703,9 +2703,13 @@ deprecationLogger.warn(
| Package | Maven Profile | Description
| Apache Accumulo Bundle | include-accumulo | Adds support for
https://accumulo.apache.org[Apache Accumulo].
| Apache Atlas Bundle | include-atlas | Adds support for the Apache
Atlas data governance tool. The functionality from this bundle is based around
reporting tasks that integrate with https://atlas.apache.org[Apache Atlas].
+| Apache Hadoop Bundle | include-hadoop | Adds support for Apache
Hadoop with HDFS and Parquet components
+| Apache HBase Bundle | include-hbase | Adds support for Apache
HBase
| Apache Hive 3 Bundle | include-hive3 | Adds support for Apache
Hive 3.X
| Apache IoTDB Bundle | include-iotdb | Adds support for Apache
IoTDB
+| Apache Kudu Bundle | include-kudu | Adds support for Apache Kudu
| Apache Ranger Bundle | include-ranger | Adds support for
https://ranger.apache.org[Apache Ranger].
+| Apache Solr Bundle | include-solr | Adds support for Apache Solr
| ASN.1 Support | include-asn1 | Adds support for ASN.1
| Contribution Check | contrib-check | Runs various quality checks
that are required to be accepted before a contribution can be accepted into the
core NiFi code base.
| Graph Database Bundle | include-graph | Adds support for various
common graph database scenarios. Support is currently for
https://neo4j.com/developer/cypher[Cypher] and
https://tinkerpop.apache.org/gremlin.html[Gremlin]-compatible databases such as
Neo4J and JanusGraph. Includes controller services that provide driver
functionality and a suite of processors for ingestion and querying.
diff --git
a/nifi-manifest/nifi-runtime-manifest-test/src/test/java/org/apache/nifi/runtime/manifest/TestRuntimeManifest.java
b/nifi-manifest/nifi-runtime-manifest-test/src/test/java/org/apache/nifi/runtime/manifest/TestRuntimeManifest.java
index 7d22016d90..46ce07a20e 100644
---
a/nifi-manifest/nifi-runtime-manifest-test/src/test/java/org/apache/nifi/runtime/manifest/TestRuntimeManifest.java
+++
b/nifi-manifest/nifi-runtime-manifest-test/src/test/java/org/apache/nifi/runtime/manifest/TestRuntimeManifest.java
@@ -24,15 +24,12 @@ import
org.apache.nifi.c2.protocol.component.api.ComponentManifest;
import org.apache.nifi.c2.protocol.component.api.ProcessorDefinition;
import org.apache.nifi.c2.protocol.component.api.PropertyDependency;
import org.apache.nifi.c2.protocol.component.api.PropertyDescriptor;
-import org.apache.nifi.c2.protocol.component.api.PropertyResourceDefinition;
import org.apache.nifi.c2.protocol.component.api.Relationship;
import org.apache.nifi.c2.protocol.component.api.ReportingTaskDefinition;
import org.apache.nifi.c2.protocol.component.api.Restriction;
import org.apache.nifi.c2.protocol.component.api.RuntimeManifest;
import org.apache.nifi.c2.protocol.component.api.SchedulingDefaults;
import org.apache.nifi.components.RequiredPermission;
-import org.apache.nifi.components.resource.ResourceCardinality;
-import org.apache.nifi.components.resource.ResourceType;
import org.apache.nifi.components.state.Scope;
import org.apache.nifi.scheduling.SchedulingStrategy;
import org.junit.jupiter.api.Test;
@@ -52,8 +49,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
class TestRuntimeManifest {
- public static final String LIST_HDFS_DEFAULT_SCHEDULE_TIME = "1 min";
-
private static final String REPORTING_TASK_DEFAULT_SCHEDULE_TIME = "60
sec";
@Test
@@ -93,96 +88,10 @@ class TestRuntimeManifest {
final List<Bundle> bundles = runtimeManifest.getBundles();
assertNotNull(bundles);
- assertTrue(bundles.size() > 0);
-
- // Verify ListHDFS definition
- final ProcessorDefinition listHdfsDefinition =
getProcessorDefinition(bundles, "nifi-hadoop-nar",
"org.apache.nifi.processors.hadoop.ListHDFS");
- assertNotNull(listHdfsDefinition);
- assertTrue(listHdfsDefinition.getPrimaryNodeOnly());
- assertTrue(listHdfsDefinition.getTriggerSerially());
- assertTrue(listHdfsDefinition.getTriggerWhenEmpty());
- assertFalse(listHdfsDefinition.getSupportsBatching());
- assertFalse(listHdfsDefinition.getSideEffectFree());
-
assertFalse(listHdfsDefinition.getTriggerWhenAnyDestinationAvailable());
- assertFalse(listHdfsDefinition.getSupportsDynamicProperties());
-
assertFalse(listHdfsDefinition.getSupportsSensitiveDynamicProperties());
- assertNull(listHdfsDefinition.getDynamicProperties());
- assertFalse(listHdfsDefinition.getSupportsDynamicRelationships());
- assertNull(listHdfsDefinition.getDynamicRelationship());
- assertEquals(InputRequirement.Requirement.INPUT_FORBIDDEN,
listHdfsDefinition.getInputRequirement());
- assertTrue(listHdfsDefinition.isAdditionalDetails());
- assertNull(listHdfsDefinition.getReadsAttributes());
- assertNotNull(listHdfsDefinition.getWritesAttributes());
- assertFalse(listHdfsDefinition.getWritesAttributes().isEmpty());
-
assertNotNull(listHdfsDefinition.getWritesAttributes().get(0).getName());
-
assertNotNull(listHdfsDefinition.getWritesAttributes().get(0).getDescription());
- assertNotNull(listHdfsDefinition.getSeeAlso());
- assertFalse(listHdfsDefinition.getSeeAlso().isEmpty());
- assertNull(listHdfsDefinition.getSystemResourceConsiderations());
- assertNull(listHdfsDefinition.getDeprecated());
- assertNull(listHdfsDefinition.getDeprecationReason());
- assertNull(listHdfsDefinition.getDeprecationAlternatives());
-
- assertEquals("30 sec", listHdfsDefinition.getDefaultPenaltyDuration());
- assertEquals("1 sec", listHdfsDefinition.getDefaultYieldDuration());
- assertEquals("WARN", listHdfsDefinition.getDefaultBulletinLevel());
-
- assertEquals(SchedulingStrategy.TIMER_DRIVEN.name(),
listHdfsDefinition.getDefaultSchedulingStrategy());
-
- final List<String> listHdfsSchedulingStrategies =
listHdfsDefinition.getSupportedSchedulingStrategies();
- assertNotNull(listHdfsSchedulingStrategies);
- assertEquals(2, listHdfsSchedulingStrategies.size());
-
assertTrue(listHdfsSchedulingStrategies.contains(SchedulingStrategy.TIMER_DRIVEN.name()));
-
assertTrue(listHdfsSchedulingStrategies.contains(SchedulingStrategy.CRON_DRIVEN.name()));
-
- final Map<String, Integer> listHdfsDefaultConcurrentTasks =
listHdfsDefinition.getDefaultConcurrentTasksBySchedulingStrategy();
- assertNotNull(listHdfsDefaultConcurrentTasks);
- assertEquals(2, listHdfsDefaultConcurrentTasks.size());
-
assertEquals(SchedulingStrategy.TIMER_DRIVEN.getDefaultConcurrentTasks(),
listHdfsDefaultConcurrentTasks.get(SchedulingStrategy.TIMER_DRIVEN.name()).intValue());
-
assertEquals(SchedulingStrategy.CRON_DRIVEN.getDefaultConcurrentTasks(),
listHdfsDefaultConcurrentTasks.get(SchedulingStrategy.CRON_DRIVEN.name()).intValue());
-
- final Map<String, String> listHdfsDefaultSchedulingPeriods =
listHdfsDefinition.getDefaultSchedulingPeriodBySchedulingStrategy();
- assertNotNull(listHdfsDefaultSchedulingPeriods);
- assertEquals(2, listHdfsDefaultSchedulingPeriods.size());
- assertEquals("1 min",
listHdfsDefaultSchedulingPeriods.get(SchedulingStrategy.TIMER_DRIVEN.name()));
-
assertEquals(SchedulingStrategy.CRON_DRIVEN.getDefaultSchedulingPeriod(),
listHdfsDefaultSchedulingPeriods.get(SchedulingStrategy.CRON_DRIVEN.name()));
-
- final List<Relationship> relationships =
listHdfsDefinition.getSupportedRelationships();
- assertNotNull(relationships);
- assertEquals(1, relationships.size());
- assertEquals("success", relationships.get(0).getName());
+ assertFalse(bundles.isEmpty());
- final PropertyDescriptor configResourcesProp =
getPropertyDescriptor(listHdfsDefinition, "Hadoop Configuration Resources");
-
- final PropertyResourceDefinition resourceDefinition =
configResourcesProp.getResourceDefinition();
- assertNotNull(resourceDefinition);
- assertEquals(ResourceCardinality.MULTIPLE,
resourceDefinition.getCardinality());
- assertNotNull(resourceDefinition.getResourceTypes());
- assertEquals(1, resourceDefinition.getResourceTypes().size());
- assertEquals(ResourceType.FILE,
resourceDefinition.getResourceTypes().stream().findFirst().get());
-
- assertNull(listHdfsDefinition.isRestricted());
- assertNull(listHdfsDefinition.getRestrictedExplanation());
- assertNull(listHdfsDefinition.getExplicitRestrictions());
- assertNotNull(listHdfsDefinition.getStateful());
- assertNotNull(listHdfsDefinition.getStateful().getDescription());
- assertNotNull(listHdfsDefinition.getStateful().getScopes());
- assertEquals(Scope.CLUSTER,
listHdfsDefinition.getStateful().getScopes().stream().findFirst().get());
-
- // Verify FetchHDFS definition has restrictions
- final ProcessorDefinition fetchHdfsDefinition =
getProcessorDefinition(bundles, "nifi-hadoop-nar",
- "org.apache.nifi.processors.hadoop.FetchHDFS");
- assertNotNull(fetchHdfsDefinition.isRestricted());
- assertTrue(fetchHdfsDefinition.isRestricted());
- assertFalse(fetchHdfsDefinition.isAdditionalDetails());
-
- final Set<Restriction> restrictions =
fetchHdfsDefinition.getExplicitRestrictions();
- assertNotNull(restrictions);
- assertEquals(1, restrictions.size());
-
- final Restriction restriction =
restrictions.stream().findFirst().orElse(null);
-
assertEquals(RequiredPermission.READ_DISTRIBUTED_FILESYSTEM.getPermissionLabel(),
restriction.getRequiredPermission());
- assertNotNull(restriction.getExplanation());
+ assertProcessorDefinitionFound(bundles);
+ assertRestrictionsFound(bundles);
// Verify ConsumeKafka_2_6 definition which has properties with
dependencies
final ProcessorDefinition consumeKafkaDefinition =
getProcessorDefinition(bundles, "nifi-kafka-2-6-nar",
@@ -235,10 +144,10 @@ class TestRuntimeManifest {
assertEquals(SchedulingStrategy.TIMER_DRIVEN.getDefaultConcurrentTasks(),
joltTransformDefaultConcurrentTasks.get(SchedulingStrategy.TIMER_DRIVEN.name()).intValue());
assertEquals(SchedulingStrategy.CRON_DRIVEN.getDefaultConcurrentTasks(),
joltTransformDefaultConcurrentTasks.get(SchedulingStrategy.CRON_DRIVEN.name()).intValue());
- final Map<String, String> joltTransformDefaultSchedulingPeriods =
listHdfsDefinition.getDefaultSchedulingPeriodBySchedulingStrategy();
+ final Map<String, String> joltTransformDefaultSchedulingPeriods =
joltTransformDef.getDefaultSchedulingPeriodBySchedulingStrategy();
assertNotNull(joltTransformDefaultSchedulingPeriods);
assertEquals(2, joltTransformDefaultSchedulingPeriods.size());
- assertEquals(LIST_HDFS_DEFAULT_SCHEDULE_TIME,
joltTransformDefaultSchedulingPeriods.get(SchedulingStrategy.TIMER_DRIVEN.name()));
+ assertEquals("0 sec",
joltTransformDefaultSchedulingPeriods.get(SchedulingStrategy.TIMER_DRIVEN.name()));
assertEquals(SchedulingStrategy.CRON_DRIVEN.getDefaultSchedulingPeriod(),
joltTransformDefaultSchedulingPeriods.get(SchedulingStrategy.CRON_DRIVEN.name()));
// Verify ExecuteSQL has readsAttributes
@@ -277,6 +186,87 @@ class TestRuntimeManifest {
assertNotNull(splitJsonDef.getSystemResourceConsiderations().get(0).getDescription());
}
+ private void assertProcessorDefinitionFound(final List<Bundle> bundles) {
+ final ProcessorDefinition definition = getProcessorDefinition(bundles,
"nifi-standard-nar", "org.apache.nifi.processors.standard.ListFile");
+ assertNotNull(definition);
+ assertFalse(definition.getPrimaryNodeOnly());
+ assertTrue(definition.getTriggerSerially());
+ assertFalse(definition.getTriggerWhenEmpty());
+ assertFalse(definition.getSupportsBatching());
+ assertFalse(definition.getSideEffectFree());
+ assertFalse(definition.getTriggerWhenAnyDestinationAvailable());
+ assertFalse(definition.getSupportsDynamicProperties());
+ assertFalse(definition.getSupportsSensitiveDynamicProperties());
+ assertNull(definition.getDynamicProperties());
+ assertFalse(definition.getSupportsDynamicRelationships());
+ assertNull(definition.getDynamicRelationship());
+ assertEquals(InputRequirement.Requirement.INPUT_FORBIDDEN,
definition.getInputRequirement());
+ assertTrue(definition.isAdditionalDetails());
+ assertNull(definition.getReadsAttributes());
+ assertNotNull(definition.getWritesAttributes());
+ assertFalse(definition.getWritesAttributes().isEmpty());
+ assertNotNull(definition.getWritesAttributes().get(0).getName());
+
assertNotNull(definition.getWritesAttributes().get(0).getDescription());
+ assertNotNull(definition.getSeeAlso());
+ assertFalse(definition.getSeeAlso().isEmpty());
+ assertNull(definition.getSystemResourceConsiderations());
+ assertNull(definition.getDeprecated());
+ assertNull(definition.getDeprecationReason());
+ assertNull(definition.getDeprecationAlternatives());
+
+ assertEquals("30 sec", definition.getDefaultPenaltyDuration());
+ assertEquals("1 sec", definition.getDefaultYieldDuration());
+ assertEquals("WARN", definition.getDefaultBulletinLevel());
+
+ assertEquals(SchedulingStrategy.TIMER_DRIVEN.name(),
definition.getDefaultSchedulingStrategy());
+
+ final List<String> schedulingStrategies =
definition.getSupportedSchedulingStrategies();
+ assertNotNull(schedulingStrategies);
+ assertEquals(2, schedulingStrategies.size());
+
assertTrue(schedulingStrategies.contains(SchedulingStrategy.TIMER_DRIVEN.name()));
+
assertTrue(schedulingStrategies.contains(SchedulingStrategy.CRON_DRIVEN.name()));
+
+ final Map<String, Integer> defaultConcurrentTasks =
definition.getDefaultConcurrentTasksBySchedulingStrategy();
+ assertNotNull(defaultConcurrentTasks);
+ assertEquals(2, defaultConcurrentTasks.size());
+
assertEquals(SchedulingStrategy.TIMER_DRIVEN.getDefaultConcurrentTasks(),
defaultConcurrentTasks.get(SchedulingStrategy.TIMER_DRIVEN.name()).intValue());
+
assertEquals(SchedulingStrategy.CRON_DRIVEN.getDefaultConcurrentTasks(),
defaultConcurrentTasks.get(SchedulingStrategy.CRON_DRIVEN.name()).intValue());
+
+ final Map<String, String> defaultSchedulingPeriods =
definition.getDefaultSchedulingPeriodBySchedulingStrategy();
+ assertNotNull(defaultSchedulingPeriods);
+ assertEquals(2, defaultSchedulingPeriods.size());
+ assertEquals("1 min",
defaultSchedulingPeriods.get(SchedulingStrategy.TIMER_DRIVEN.name()));
+
assertEquals(SchedulingStrategy.CRON_DRIVEN.getDefaultSchedulingPeriod(),
defaultSchedulingPeriods.get(SchedulingStrategy.CRON_DRIVEN.name()));
+
+ final List<Relationship> relationships =
definition.getSupportedRelationships();
+ assertNotNull(relationships);
+ assertEquals(1, relationships.size());
+ assertEquals("success", relationships.get(0).getName());
+
+ assertNull(definition.isRestricted());
+ assertNull(definition.getRestrictedExplanation());
+ assertNull(definition.getExplicitRestrictions());
+ assertNotNull(definition.getStateful());
+ assertNotNull(definition.getStateful().getDescription());
+ assertNotNull(definition.getStateful().getScopes());
+ assertEquals(Set.of(Scope.LOCAL, Scope.CLUSTER),
definition.getStateful().getScopes());
+ }
+
+ private void assertRestrictionsFound(final List<Bundle> bundles) {
+ final ProcessorDefinition processorDefinition =
getProcessorDefinition(bundles, "nifi-standard-nar",
"org.apache.nifi.processors.standard.GetFile");
+ assertNotNull(processorDefinition.isRestricted());
+ assertTrue(processorDefinition.isRestricted());
+ assertFalse(processorDefinition.isAdditionalDetails());
+
+ final Set<Restriction> restrictions =
processorDefinition.getExplicitRestrictions();
+ assertNotNull(restrictions);
+ assertEquals(2, restrictions.size());
+
+ final Restriction restriction =
restrictions.stream().findFirst().orElse(null);
+ assertEquals(RequiredPermission.READ_FILESYSTEM.getPermissionLabel(),
restriction.getRequiredPermission());
+ assertNotNull(restriction.getExplanation());
+ }
+
private PropertyDescriptor getPropertyDescriptor(final ProcessorDefinition
processorDefinition, final String propName) {
final Map<String, PropertyDescriptor> propertyDescriptors =
processorDefinition.getPropertyDescriptors();
assertNotNull(propertyDescriptors);