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.