You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2020/01/13 16:43:31 UTC

[nifi] branch master updated (2cc467e -> bec1f77)

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

joewitt pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git.


    from 2cc467e  NIFI-3833 Added encrypted flowfile repository implementation. Added EncryptedSchemaRepositoryRecordSerde. Refactored CryptoUtils utility methods for repository encryption configuration validation checks to RepositoryEncryptorUtils. Added FlowFile repo encryption config container. Added more logging in cryptographic and serialization operations. Generalized log messages in shared encryption services. Added encrypted serde factory. Added marker impl for encrypted WAL. Move [...]
     new 2c18cf2  NIFI-6852 This closes #3973. Don't Validate Processors that accept any ControllerService Implementation NIFI-6852 Add Integration Tests for Controller Service API Validation
     new bec1f77  NIFI-6852 added missing license header

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../nifi/controller/AbstractComponentNode.java     |   4 +
 .../cs/tests/system/FakeControllerService1.java    |   5 +-
 .../system/FakeDynamicPropertiesProcessor.java     |  90 ++++++++++++
 .../processors/tests/system/FakeProcessor.java     |  57 +++++---
 .../org.apache.nifi.controller.ControllerService   |   3 +-
 .../services/org.apache.nifi.processor.Processor   |   4 +-
 .../nifi-system-test-extensions2-nar}/pom.xml      |  26 ++--
 .../nifi-system-test-extensions2}/pom.xml          |   4 +-
 .../cs/tests/system/FakeControllerService2.java    |   5 +-
 .../tests/system/FakeGenericProcessor.java         |  46 ++++--
 .../org.apache.nifi.controller.ControllerService   |   2 +-
 .../services/org.apache.nifi.processor.Processor   |   2 +-
 .../pom.xml                                        |   6 +-
 nifi-system-tests/nifi-system-test-suite/pom.xml   |   6 +
 .../ControllerServiceApiValidationIT.java          | 154 +++++++++++++++++++++
 nifi-system-tests/pom.xml                          |   1 +
 16 files changed, 357 insertions(+), 58 deletions(-)
 copy nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/mock/ServiceB.java => nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService1.java (88%)
 create mode 100644 nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeDynamicPropertiesProcessor.java
 copy nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service/src/test/java/org/apache/nifi/hbase/TestProcessor.java => nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeProcessor.java (53%)
 copy {nifi-nar-bundles/nifi-standard-services/nifi-hbase_1_1_2-client-service-bundle/nifi-hbase_1_1_2-client-service-nar => nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2-nar}/pom.xml (75%)
 copy nifi-system-tests/{nifi-system-test-extensions-bundle/nifi-system-test-extensions => nifi-system-test-extensions2-bundle/nifi-system-test-extensions2}/pom.xml (92%)
 copy nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/mock/ServiceB.java => nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService2.java (88%)
 copy nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/mock/DummyProcessor.java => nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/processors/tests/system/FakeGenericProcessor.java (57%)
 copy {nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-controller-service => nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2}/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService (93%)
 copy {nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors => nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2}/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor (92%)
 copy nifi-system-tests/{nifi-system-test-extensions-bundle => nifi-system-test-extensions2-bundle}/pom.xml (87%)
 create mode 100644 nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java


[nifi] 02/02: NIFI-6852 added missing license header

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bec1f772db0181c251588fa7294026a1363f464d
Author: Joe Witt <jo...@apache.org>
AuthorDate: Mon Jan 13 11:43:17 2020 -0500

    NIFI-6852 added missing license header
---
 .../ControllerServiceApiValidationIT.java                | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java
index 5de7c95..44a24d6 100644
--- a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java
+++ b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java
@@ -1,3 +1,19 @@
+/*
+ * 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.
+ */
 package org.apache.nifi.tests.system.controllerservice;
 
 import org.apache.nifi.tests.system.NiFiSystemIT;


[nifi] 01/02: NIFI-6852 This closes #3973. Don't Validate Processors that accept any ControllerService Implementation NIFI-6852 Add Integration Tests for Controller Service API Validation

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2c18cf22ad0972aebf8c5c547b5b70823238de62
Author: Shawn Weeks <sw...@weeksconsulting.us>
AuthorDate: Thu Jan 9 11:56:39 2020 -0600

    NIFI-6852 This closes #3973. Don't Validate Processors that accept any ControllerService Implementation
    NIFI-6852 Add Integration Tests for Controller Service API Validation
    
    Signed-off-by: Joe Witt <jo...@apache.org>
---
 .../nifi/controller/AbstractComponentNode.java     |   4 +
 .../cs/tests/system/FakeControllerService1.java    |  22 ++++
 .../system/FakeDynamicPropertiesProcessor.java     |  90 ++++++++++++++
 .../processors/tests/system/FakeProcessor.java     |  70 +++++++++++
 .../org.apache.nifi.controller.ControllerService   |   3 +-
 .../services/org.apache.nifi.processor.Processor   |   4 +-
 .../nifi-system-test-extensions2-nar/pom.xml       |  55 ++++++++
 .../nifi-system-test-extensions2}/pom.xml          |  28 +++--
 .../cs/tests/system/FakeControllerService2.java    |  22 ++++
 .../tests/system/FakeGenericProcessor.java         |  70 +++++++++++
 .../org.apache.nifi.controller.ControllerService   |   2 +-
 .../services/org.apache.nifi.processor.Processor}  |   2 +-
 .../pom.xml                                        |  16 +--
 nifi-system-tests/nifi-system-test-suite/pom.xml   |   6 +
 .../ControllerServiceApiValidationIT.java          | 138 +++++++++++++++++++++
 nifi-system-tests/pom.xml                          |   1 +
 16 files changed, 512 insertions(+), 21 deletions(-)

diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
index 974c5ad..adf410f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
@@ -719,6 +719,10 @@ public abstract class AbstractComponentNode implements ComponentNode {
 
     private ValidationResult validateControllerServiceApi(final PropertyDescriptor descriptor, final ControllerServiceNode controllerServiceNode) {
         final Class<? extends ControllerService> controllerServiceApiClass = descriptor.getControllerServiceDefinition();
+        // If a processor accepts any service don't validate it.
+        if (controllerServiceApiClass.equals(ControllerService.class)) {
+            return null;
+        }
         final ClassLoader controllerServiceApiClassLoader = controllerServiceApiClass.getClassLoader();
         final ExtensionManager extensionManager = serviceProvider.getExtensionManager();
 
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService1.java b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService1.java
new file mode 100644
index 0000000..2789bf6
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService1.java
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+package org.apache.nifi.cs.tests.system;
+
+import org.apache.nifi.controller.AbstractControllerService;
+
+public class FakeControllerService1 extends AbstractControllerService {
+}
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeDynamicPropertiesProcessor.java b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeDynamicPropertiesProcessor.java
new file mode 100644
index 0000000..88c0850
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeDynamicPropertiesProcessor.java
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ */
+package org.apache.nifi.processors.tests.system;
+
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.Validator;
+import org.apache.nifi.controller.ControllerService;
+import org.apache.nifi.cs.tests.system.FakeControllerService1;
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.ProcessorInitializationContext;
+import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.processor.exception.ProcessException;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class FakeDynamicPropertiesProcessor extends AbstractProcessor {
+    private List<PropertyDescriptor> properties;
+    private Set<Relationship> relationships;
+
+    @Override
+    protected void init(final ProcessorInitializationContext context) {
+        final List<PropertyDescriptor> properties = new ArrayList<>();
+        this.properties = Collections.unmodifiableList(properties);
+
+        final Set<Relationship> relationships = new HashSet<>();
+        this.relationships = Collections.unmodifiableSet(relationships);
+
+    }
+
+    @Override
+    protected PropertyDescriptor getSupportedDynamicPropertyDescriptor(final String propertyDescriptorName) {
+        if (propertyDescriptorName.startsWith("CS.")) {
+            return new PropertyDescriptor.Builder()
+                    .name(propertyDescriptorName)
+                    .required(false)
+                    .dynamic(true)
+                    .identifiesControllerService(ControllerService.class)
+                    .build();
+        }
+        if (propertyDescriptorName.startsWith("FCS.")) {
+            return new PropertyDescriptor.Builder()
+                    .name(propertyDescriptorName)
+                    .required(false)
+                    .dynamic(true)
+                    .identifiesControllerService(FakeControllerService1.class)
+                    .build();
+        }
+        return new PropertyDescriptor.Builder()
+                .name(propertyDescriptorName)
+                .required(false)
+                .addValidator(Validator.VALID)
+                .dynamic(true)
+                .build();
+    }
+
+    @Override
+    public Set<Relationship> getRelationships() {
+        return relationships;
+    }
+
+    @Override
+    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+        return properties;
+    }
+
+    @Override
+    public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+
+    }
+}
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeProcessor.java b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeProcessor.java
new file mode 100644
index 0000000..febb822
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/java/org/apache/nifi/processors/tests/system/FakeProcessor.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+package org.apache.nifi.processors.tests.system;
+
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.cs.tests.system.FakeControllerService1;
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.ProcessorInitializationContext;
+import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.processor.exception.ProcessException;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class FakeProcessor extends AbstractProcessor {
+    private List<PropertyDescriptor> properties;
+    private Set<Relationship> relationships;
+
+    public static final PropertyDescriptor FAKE_SERVICE = new PropertyDescriptor.Builder()
+            .name("Fake Service")
+            .description("The Fake Service Being Tested")
+            .required(true)
+            .identifiesControllerService(FakeControllerService1.class)
+            .build();
+
+    @Override
+    protected void init(final ProcessorInitializationContext context) {
+        final List<PropertyDescriptor> properties = new ArrayList<>();
+        properties.add(FAKE_SERVICE);
+        this.properties = Collections.unmodifiableList(properties);
+
+        final Set<Relationship> relationships = new HashSet<>();
+        this.relationships = Collections.unmodifiableSet(relationships);
+
+    }
+
+    @Override
+    public Set<Relationship> getRelationships() {
+        return relationships;
+    }
+
+    @Override
+    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+        return properties;
+    }
+
+    @Override
+    public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+
+    }
+}
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
index a76f5a0..e58be89 100644
--- a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
+++ b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
@@ -13,4 +13,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-org.apache.nifi.cs.tests.system.StandardSleepService
\ No newline at end of file
+org.apache.nifi.cs.tests.system.StandardSleepService
+org.apache.nifi.cs.tests.system.FakeControllerService1
\ No newline at end of file
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
index ffd9df7..003c917 100644
--- a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
+++ b/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
@@ -16,4 +16,6 @@
 org.apache.nifi.processors.tests.system.CountEvents
 org.apache.nifi.processors.tests.system.GenerateFlowFile
 org.apache.nifi.processors.tests.system.Sleep
-org.apache.nifi.processors.tests.system.ValidateFileExists
\ No newline at end of file
+org.apache.nifi.processors.tests.system.ValidateFileExists
+org.apache.nifi.processors.tests.system.FakeProcessor
+org.apache.nifi.processors.tests.system.FakeDynamicPropertiesProcessor
\ No newline at end of file
diff --git a/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2-nar/pom.xml b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2-nar/pom.xml
new file mode 100644
index 0000000..030c592
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2-nar/pom.xml
@@ -0,0 +1,55 @@
+<?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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.nifi</groupId>
+        <artifactId>nifi-system-test-extensions2-bundle</artifactId>
+        <version>1.11.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>nifi-system-test-extensions2-nar</artifactId>
+    <version>1.11.0-SNAPSHOT</version>
+    <packaging>nar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-system-test-extensions2</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-standard-services-api-nar</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.nifi</groupId>
+                <artifactId>nifi-nar-maven-plugin</artifactId>
+                <configuration>
+                    <enforceDocGeneration>false</enforceDocGeneration>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/nifi-system-tests/pom.xml b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/pom.xml
similarity index 62%
copy from nifi-system-tests/pom.xml
copy to nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/pom.xml
index dba2c3c..b16e5ca 100644
--- a/nifi-system-tests/pom.xml
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/pom.xml
@@ -13,21 +13,29 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
     <parent>
-        <artifactId>nifi</artifactId>
+        <artifactId>nifi-system-test-extensions2-bundle</artifactId>
         <groupId>org.apache.nifi</groupId>
         <version>1.11.0-SNAPSHOT</version>
     </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>nifi-system-tests</artifactId>
-    <packaging>pom</packaging>
+    <artifactId>nifi-system-test-extensions2</artifactId>
 
-    <modules>
-        <module>nifi-system-test-extensions-bundle</module>
-        <module>nifi-system-test-suite</module>
-    </modules>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-api</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-utils</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService2.java b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService2.java
new file mode 100644
index 0000000..105b930
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/cs/tests/system/FakeControllerService2.java
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+package org.apache.nifi.cs.tests.system;
+
+import org.apache.nifi.controller.AbstractControllerService;
+
+public class FakeControllerService2 extends AbstractControllerService {
+}
diff --git a/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/processors/tests/system/FakeGenericProcessor.java b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/processors/tests/system/FakeGenericProcessor.java
new file mode 100644
index 0000000..6a68084
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/java/org/apache/nifi/processors/tests/system/FakeGenericProcessor.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+package org.apache.nifi.processors.tests.system;
+
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.controller.ControllerService;
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.ProcessorInitializationContext;
+import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.processor.exception.ProcessException;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class FakeGenericProcessor extends AbstractProcessor {
+    private List<PropertyDescriptor> properties;
+    private Set<Relationship> relationships;
+
+    public static final PropertyDescriptor FAKE_SERVICE = new PropertyDescriptor.Builder()
+            .name("Fake Service")
+            .description("The Fake Service Being Tested")
+            .required(true)
+            .identifiesControllerService(ControllerService.class)
+            .build();
+
+    @Override
+    protected void init(final ProcessorInitializationContext context) {
+        final List<PropertyDescriptor> properties = new ArrayList<>();
+        properties.add(FAKE_SERVICE);
+        this.properties = Collections.unmodifiableList(properties);
+
+        final Set<Relationship> relationships = new HashSet<>();
+        this.relationships = Collections.unmodifiableSet(relationships);
+
+    }
+
+    @Override
+    public Set<Relationship> getRelationships() {
+        return relationships;
+    }
+
+    @Override
+    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+        return properties;
+    }
+
+    @Override
+    public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+
+    }
+}
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
similarity index 93%
copy from nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
copy to nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
index a76f5a0..125ad20 100644
--- a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
@@ -13,4 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-org.apache.nifi.cs.tests.system.StandardSleepService
\ No newline at end of file
+org.apache.nifi.cs.tests.system.FakeControllerService2
\ No newline at end of file
diff --git a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
similarity index 92%
copy from nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
copy to nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
index a76f5a0..d7be6ee 100644
--- a/nifi-system-tests/nifi-system-test-extensions-bundle/nifi-system-test-extensions/src/main/resources/META-INF/services/org.apache.nifi.controller.ControllerService
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/nifi-system-test-extensions2/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
@@ -13,4 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-org.apache.nifi.cs.tests.system.StandardSleepService
\ No newline at end of file
+org.apache.nifi.processors.tests.system.FakeGenericProcessor
\ No newline at end of file
diff --git a/nifi-system-tests/pom.xml b/nifi-system-tests/nifi-system-test-extensions2-bundle/pom.xml
similarity index 76%
copy from nifi-system-tests/pom.xml
copy to nifi-system-tests/nifi-system-test-extensions2-bundle/pom.xml
index dba2c3c..6b3a2d1 100644
--- a/nifi-system-tests/pom.xml
+++ b/nifi-system-tests/nifi-system-test-extensions2-bundle/pom.xml
@@ -13,21 +13,23 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
     <parent>
-        <artifactId>nifi</artifactId>
+        <artifactId>nifi-system-tests</artifactId>
         <groupId>org.apache.nifi</groupId>
         <version>1.11.0-SNAPSHOT</version>
     </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>nifi-system-tests</artifactId>
+    <artifactId>nifi-system-test-extensions2-bundle</artifactId>
     <packaging>pom</packaging>
 
     <modules>
-        <module>nifi-system-test-extensions-bundle</module>
-        <module>nifi-system-test-suite</module>
+        <module>nifi-system-test-extensions2</module>
+        <module>nifi-system-test-extensions2-nar</module>
     </modules>
 
-</project>
+
+</project>
\ No newline at end of file
diff --git a/nifi-system-tests/nifi-system-test-suite/pom.xml b/nifi-system-tests/nifi-system-test-suite/pom.xml
index 821c705..5cd8fc1 100644
--- a/nifi-system-tests/nifi-system-test-suite/pom.xml
+++ b/nifi-system-tests/nifi-system-test-suite/pom.xml
@@ -173,6 +173,12 @@
             <version>1.11.0-SNAPSHOT</version>
             <type>nar</type>
         </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-system-test-extensions2-nar</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
 
         <!-- dependencies for jaxb/activation/annotation for running NiFi on Java 11 -->
         <!-- TODO: remove these once minimum Java version is 11 -->
diff --git a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java
new file mode 100644
index 0000000..5de7c95
--- /dev/null
+++ b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/controllerservice/ControllerServiceApiValidationIT.java
@@ -0,0 +1,138 @@
+package org.apache.nifi.tests.system.controllerservice;
+
+import org.apache.nifi.tests.system.NiFiSystemIT;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
+import org.apache.nifi.web.api.entity.ControllerServiceEntity;
+import org.apache.nifi.web.api.entity.ControllerServiceRunStatusEntity;
+import org.apache.nifi.web.api.entity.ProcessorEntity;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Collections;
+
+import static org.junit.Assert.assertEquals;
+
+public class ControllerServiceApiValidationIT extends NiFiSystemIT {
+    @Test
+    public void testMatchingControllerService() throws NiFiClientException, IOException {
+        final ControllerServiceEntity fakeServiceEntity = getClientUtil().createControllerService("FakeControllerService1");
+        final ProcessorEntity fakeProcessorEntity = getClientUtil().createProcessor("FakeProcessor");
+        fakeProcessorEntity.getComponent().getConfig().setProperties(Collections.singletonMap("Fake Service", fakeServiceEntity.getId()));
+        getNifiClient().getProcessorClient().updateProcessor(fakeProcessorEntity);
+        final ControllerServiceRunStatusEntity runStatusEntity = new ControllerServiceRunStatusEntity();
+        runStatusEntity.setState("ENABLED");
+        runStatusEntity.setRevision(fakeServiceEntity.getRevision());
+        getNifiClient().getControllerServicesClient().activateControllerService(fakeServiceEntity.getId(), runStatusEntity);
+        getClientUtil().waitForControllerSerivcesEnabled("root");
+        String controllerStatus = getNifiClient().getControllerServicesClient().getControllerService(fakeServiceEntity.getId()).getStatus().getRunStatus();
+        String processorStatus = getNifiClient().getProcessorClient().getProcessor(fakeProcessorEntity.getId()).getStatus().getRunStatus();
+
+        assertEquals("ENABLED", controllerStatus);
+        assertEquals("Stopped", processorStatus);
+    }
+
+    @Test
+    public void testMatchingDynamicPropertyControllerService() throws NiFiClientException, IOException {
+        final ControllerServiceEntity fakeServiceEntity = getClientUtil().createControllerService("FakeControllerService1");
+        final ProcessorEntity fakeProcessorEntity = getClientUtil().createProcessor("FakeDynamicPropertiesProcessor");
+        fakeProcessorEntity.getComponent().getConfig().setProperties(Collections.singletonMap("FCS.fakeControllerService", fakeServiceEntity.getId()));
+        getNifiClient().getProcessorClient().updateProcessor(fakeProcessorEntity);
+        final ControllerServiceRunStatusEntity runStatusEntity = new ControllerServiceRunStatusEntity();
+        runStatusEntity.setState("ENABLED");
+        runStatusEntity.setRevision(fakeServiceEntity.getRevision());
+        getNifiClient().getControllerServicesClient().activateControllerService(fakeServiceEntity.getId(), runStatusEntity);
+        getClientUtil().waitForControllerSerivcesEnabled("root");
+        String controllerStatus = getNifiClient().getControllerServicesClient().getControllerService(fakeServiceEntity.getId()).getStatus().getRunStatus();
+        String processorStatus = getNifiClient().getProcessorClient().getProcessor(fakeProcessorEntity.getId()).getStatus().getRunStatus();
+
+        assertEquals("ENABLED", controllerStatus);
+        assertEquals("Stopped", processorStatus);
+    }
+
+    @Test
+    public void testNonMatchingControllerService() throws NiFiClientException, IOException {
+        final ControllerServiceEntity fakeServiceEntity = getClientUtil().createControllerService(
+                NiFiSystemIT.TEST_CS_PACKAGE + ".FakeControllerService2",
+                "root",
+                NiFiSystemIT.NIFI_GROUP_ID,
+                "nifi-system-test-extensions2-nar",
+                getNiFiVersion());
+        final ProcessorEntity fakeProcessorEntity = getClientUtil().createProcessor("FakeProcessor");
+        fakeProcessorEntity.getComponent().getConfig().setProperties(Collections.singletonMap("Fake Service", fakeServiceEntity.getId()));
+        getNifiClient().getProcessorClient().updateProcessor(fakeProcessorEntity);
+        final ControllerServiceRunStatusEntity runStatusEntity = new ControllerServiceRunStatusEntity();
+        runStatusEntity.setState("ENABLED");
+        runStatusEntity.setRevision(fakeServiceEntity.getRevision());
+        getNifiClient().getControllerServicesClient().activateControllerService(fakeServiceEntity.getId(), runStatusEntity);
+        getClientUtil().waitForControllerSerivcesEnabled("root");
+        String controllerStatus = getNifiClient().getControllerServicesClient().getControllerService(fakeServiceEntity.getId()).getStatus().getRunStatus();
+        String processorStatus = getNifiClient().getProcessorClient().getProcessor(fakeProcessorEntity.getId()).getStatus().getRunStatus();
+
+        assertEquals("ENABLED", controllerStatus);
+        assertEquals("Invalid", processorStatus);
+    }
+
+    @Test
+    public void testNonMatchingDynamicPropertyControllerService() throws NiFiClientException, IOException {
+        final ControllerServiceEntity fakeServiceEntity = getClientUtil().createControllerService(
+                NiFiSystemIT.TEST_CS_PACKAGE + ".FakeControllerService2",
+                "root",
+                NiFiSystemIT.NIFI_GROUP_ID,
+                "nifi-system-test-extensions2-nar",
+                getNiFiVersion());
+        final ProcessorEntity fakeProcessorEntity = getClientUtil().createProcessor("FakeDynamicPropertiesProcessor");
+        fakeProcessorEntity.getComponent().getConfig().setProperties(Collections.singletonMap("FCS.fakeControllerService", fakeServiceEntity.getId()));
+        getNifiClient().getProcessorClient().updateProcessor(fakeProcessorEntity);
+        final ControllerServiceRunStatusEntity runStatusEntity = new ControllerServiceRunStatusEntity();
+        runStatusEntity.setState("ENABLED");
+        runStatusEntity.setRevision(fakeServiceEntity.getRevision());
+        getNifiClient().getControllerServicesClient().activateControllerService(fakeServiceEntity.getId(), runStatusEntity);
+        getClientUtil().waitForControllerSerivcesEnabled("root");
+        String controllerStatus = getNifiClient().getControllerServicesClient().getControllerService(fakeServiceEntity.getId()).getStatus().getRunStatus();
+        String processorStatus = getNifiClient().getProcessorClient().getProcessor(fakeProcessorEntity.getId()).getStatus().getRunStatus();
+
+        assertEquals("ENABLED", controllerStatus);
+        assertEquals("Invalid", processorStatus);
+    }
+
+    @Test
+    public void testMatchingGenericControllerService() throws NiFiClientException, IOException {
+        final ControllerServiceEntity fakeServiceEntity = getClientUtil().createControllerService("FakeControllerService1");
+        final ProcessorEntity fakeProcessorEntity = getClientUtil().createProcessor(
+                NiFiSystemIT.TEST_PROCESSORS_PACKAGE + ".FakeGenericProcessor",
+                "root",
+                NiFiSystemIT.NIFI_GROUP_ID,
+                "nifi-system-test-extensions2-nar",
+                getNiFiVersion());
+        fakeProcessorEntity.getComponent().getConfig().setProperties(Collections.singletonMap("Fake Service", fakeServiceEntity.getId()));
+        getNifiClient().getProcessorClient().updateProcessor(fakeProcessorEntity);
+        final ControllerServiceRunStatusEntity runStatusEntity = new ControllerServiceRunStatusEntity();
+        runStatusEntity.setState("ENABLED");
+        runStatusEntity.setRevision(fakeServiceEntity.getRevision());
+        getNifiClient().getControllerServicesClient().activateControllerService(fakeServiceEntity.getId(), runStatusEntity);
+        getClientUtil().waitForControllerSerivcesEnabled("root");
+        String controllerStatus = getNifiClient().getControllerServicesClient().getControllerService(fakeServiceEntity.getId()).getStatus().getRunStatus();
+        String processorStatus = getNifiClient().getProcessorClient().getProcessor(fakeProcessorEntity.getId()).getStatus().getRunStatus();
+
+        assertEquals("ENABLED", controllerStatus);
+        assertEquals("Stopped", processorStatus);
+    }
+
+    @Test
+    public void testMatchingGenericDynamicPropertyControllerService() throws NiFiClientException, IOException {
+        final ControllerServiceEntity fakeServiceEntity = getClientUtil().createControllerService("FakeControllerService1");
+        final ProcessorEntity fakeProcessorEntity = getClientUtil().createProcessor("FakeDynamicPropertiesProcessor");
+        fakeProcessorEntity.getComponent().getConfig().setProperties(Collections.singletonMap("CS.fakeControllerService", fakeServiceEntity.getId()));
+        getNifiClient().getProcessorClient().updateProcessor(fakeProcessorEntity);
+        final ControllerServiceRunStatusEntity runStatusEntity = new ControllerServiceRunStatusEntity();
+        runStatusEntity.setState("ENABLED");
+        runStatusEntity.setRevision(fakeServiceEntity.getRevision());
+        getNifiClient().getControllerServicesClient().activateControllerService(fakeServiceEntity.getId(), runStatusEntity);
+        getClientUtil().waitForControllerSerivcesEnabled("root");
+        String controllerStatus = getNifiClient().getControllerServicesClient().getControllerService(fakeServiceEntity.getId()).getStatus().getRunStatus();
+        String processorStatus = getNifiClient().getProcessorClient().getProcessor(fakeProcessorEntity.getId()).getStatus().getRunStatus();
+
+        assertEquals("ENABLED", controllerStatus);
+        assertEquals("Stopped", processorStatus);
+    }
+}
diff --git a/nifi-system-tests/pom.xml b/nifi-system-tests/pom.xml
index dba2c3c..a457111 100644
--- a/nifi-system-tests/pom.xml
+++ b/nifi-system-tests/pom.xml
@@ -27,6 +27,7 @@
 
     <modules>
         <module>nifi-system-test-extensions-bundle</module>
+        <module>nifi-system-test-extensions2-bundle</module>
         <module>nifi-system-test-suite</module>
     </modules>