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

exceptionfactory 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 5073c71e40 NIFI-14425 Added validate and verify in TestRunner (#9841)
5073c71e40 is described below

commit 5073c71e40175787ebd93da45b55d3ae00a70c2e
Author: Pierre Villard <[email protected]>
AuthorDate: Fri Apr 4 04:09:19 2025 +0200

    NIFI-14425 Added validate and verify in TestRunner (#9841)
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../nifi/util/StandardProcessorTestRunner.java     | 47 ++++++++++++++++++++--
 .../main/java/org/apache/nifi/util/TestRunner.java | 31 ++++++++++++++
 2 files changed, 74 insertions(+), 4 deletions(-)

diff --git 
a/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java 
b/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
index 824ad90cf8..482da4b425 100644
--- 
a/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
+++ 
b/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
@@ -28,12 +28,14 @@ import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.annotation.lifecycle.OnUnscheduled;
 import org.apache.nifi.annotation.notification.OnPrimaryNodeStateChange;
 import org.apache.nifi.annotation.notification.PrimaryNodeState;
+import org.apache.nifi.components.ConfigVerificationResult;
 import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.components.state.StateManager;
 import org.apache.nifi.controller.ControllerService;
+import org.apache.nifi.controller.VerifiableControllerService;
 import org.apache.nifi.controller.queue.QueueSize;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.flowfile.attributes.CoreAttributes;
@@ -41,6 +43,7 @@ import org.apache.nifi.kerberos.KerberosContext;
 import org.apache.nifi.processor.ProcessSessionFactory;
 import org.apache.nifi.processor.Processor;
 import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.processor.VerifiableProcessor;
 import org.apache.nifi.provenance.ProvenanceEventRecord;
 import org.apache.nifi.provenance.ProvenanceEventType;
 import org.apache.nifi.registry.EnvironmentVariables;
@@ -415,6 +418,20 @@ public class StandardProcessorTestRunner implements 
TestRunner {
         context.assertValid();
     }
 
+    @Override
+    public Collection<ValidationResult> validate() {
+        return context.validate();
+    }
+
+    @Override
+    public List<ConfigVerificationResult> verify(final Map<String, String> 
variables) {
+        if (processor instanceof VerifiableProcessor vProcessor) {
+            return vProcessor.verify(context, logger, variables);
+        } else {
+            throw new IllegalStateException("The Processor does not implement 
the VerifiableProcessor interface");
+        }
+    }
+
     @Override
     public boolean isValid() {
         return context.isValid();
@@ -706,18 +723,40 @@ public class StandardProcessorTestRunner implements 
TestRunner {
 
     @Override
     public void assertValid(final ControllerService service) {
+        final Collection<ValidationResult> results = validate(service);
+        for (final ValidationResult result : results) {
+            if (!result.isValid()) {
+                Assertions.fail("Expected Controller Service to be valid but 
it is invalid due to: " + result);
+            }
+        }
+    }
+
+    @Override
+    public Collection<ValidationResult> validate(final ControllerService 
service) {
         final StateManager serviceStateManager = 
controllerServiceStateManagers.get(service.getIdentifier());
         if (serviceStateManager == null) {
             throw new IllegalStateException("Controller Service has not been 
added to this TestRunner via the #addControllerService method");
         }
 
         final ValidationContext validationContext = new 
MockValidationContext(context, 
serviceStateManager).getControllerServiceValidationContext(service);
-        final Collection<ValidationResult> results = 
context.getControllerService(service.getIdentifier()).validate(validationContext);
+        return 
context.getControllerService(service.getIdentifier()).validate(validationContext);
+    }
 
-        for (final ValidationResult result : results) {
-            if (!result.isValid()) {
-                Assertions.fail("Expected Controller Service to be valid but 
it is invalid due to: " + result);
+    @Override
+    public List<ConfigVerificationResult> verify(final ControllerService 
service, final Map<String, String> variables) {
+        if (service instanceof VerifiableControllerService vService) {
+            final StateManager serviceStateManager = 
controllerServiceStateManagers.get(service.getIdentifier());
+            if (serviceStateManager == null) {
+                throw new IllegalStateException("Controller Service has not 
been added to this TestRunner via the #addControllerService method");
             }
+
+            final ControllerServiceConfiguration configuration = 
context.getConfiguration(service.getIdentifier());
+            final MockConfigurationContext configContext = new 
MockConfigurationContext(service, configuration.getProperties(), context, 
environmentVariables);
+            configContext.setValidateExpressions(validateExpressionUsage);
+
+            return vService.verify(configContext, 
getControllerServiceLogger(service.getIdentifier()), variables);
+        } else {
+            throw new IllegalStateException("The Controller Service does not 
implement the VerifiableControllerService interface");
         }
     }
 
diff --git a/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java 
b/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java
index 60b237a958..9232432252 100644
--- a/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java
+++ b/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.util;
 
+import org.apache.nifi.components.ConfigVerificationResult;
 import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationResult;
@@ -38,6 +39,7 @@ import org.apache.nifi.state.MockStateManager;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Path;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -396,6 +398,19 @@ public interface TestRunner {
      */
     void assertValid();
 
+    /**
+     * Validates the currently configured set of properties/annotation data
+     * @return a Collection of ValidationResult
+     */
+    Collection<ValidationResult> validate();
+
+    /**
+     * Verifies the currently configured set of properties/annotation data
+     * @param variables the variables to use for verification
+     * @return a Collection of ConfigVerificationResult
+     */
+    List<ConfigVerificationResult> verify(Map<String, String> variables);
+
     boolean isValid();
 
     /**
@@ -846,6 +861,22 @@ public interface TestRunner {
      */
     void assertValid(ControllerService service);
 
+    /**
+     * Validates the currently configured set of properties/annotation data for
+     * the given Controller Service.
+     * @param service the service to validate
+     * @return a Collection of ValidationResult
+     */
+    Collection<ValidationResult> validate(ControllerService service);
+
+    /**
+     * Verifies the currently configured set of properties/annotation data for
+     * the given Controller Service.
+     * @param variables the variables to use for verification
+     * @return a Collection of ConfigVerificationResult
+     */
+    List<ConfigVerificationResult> verify(ControllerService service, 
Map<String, String> variables);
+
     /**
      * Assert that the currently configured set of properties/annotation data
      * are NOT valid for the given Controller Service.

Reply via email to