You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by al...@apache.org on 2017/01/04 00:15:42 UTC
nifi git commit: NIFI-3269 Added call to onPropertyModified when
updating controller services in StandardProcessorTestRunner. Added unit test
to demonstrate change.
Repository: nifi
Updated Branches:
refs/heads/master 2c0f1c348 -> 41189b055
NIFI-3269 Added call to onPropertyModified when updating controller services in StandardProcessorTestRunner.
Added unit test to demonstrate change.
This closes #1374.
Signed-off-by: Andy LoPresto <al...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/41189b05
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/41189b05
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/41189b05
Branch: refs/heads/master
Commit: 41189b055f3f23010db5b1f410adc55d052805f2
Parents: 2c0f1c3
Author: Pierre Villard <pi...@gmail.com>
Authored: Fri Dec 30 12:36:11 2016 +0100
Committer: Andy LoPresto <al...@apache.org>
Committed: Tue Jan 3 15:31:15 2017 -0800
----------------------------------------------------------------------
.../nifi/util/StandardProcessorTestRunner.java | 5 ++
.../util/TestStandardProcessorTestRunner.java | 86 +++++++++++++++++---
2 files changed, 81 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/41189b05/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
----------------------------------------------------------------------
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 7c0cc0f..451eea9 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
@@ -754,9 +754,14 @@ public class StandardProcessorTestRunner implements TestRunner {
final ValidationContext validationContext = new MockValidationContext(context, serviceStateManager, variableRegistry).getControllerServiceValidationContext(service);
final ValidationResult validationResult = property.validate(value, validationContext);
+ final String oldValue = updatedProps.get(property);
updatedProps.put(property, value);
configuration.setProperties(updatedProps);
+ if ((value == null && oldValue != null) || (value != null && !value.equals(oldValue))) {
+ service.onPropertyModified(property, oldValue, value);
+ }
+
return validationResult;
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/41189b05/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
----------------------------------------------------------------------
diff --git a/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java b/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
index c5776d9..db8a74e 100644
--- a/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
+++ b/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
@@ -17,16 +17,24 @@
package org.apache.nifi.util;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
-
import org.apache.nifi.annotation.lifecycle.OnStopped;
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.controller.AbstractControllerService;
+import org.apache.nifi.controller.ControllerService;
import org.apache.nifi.flowfile.FlowFile;
import org.apache.nifi.processor.AbstractProcessor;
import org.apache.nifi.processor.ProcessContext;
@@ -34,6 +42,7 @@ 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 org.apache.nifi.reporting.InitializationException;
import org.junit.Test;
public class TestStandardProcessorTestRunner {
@@ -70,7 +79,7 @@ public class TestStandardProcessorTestRunner {
runner.assertAllFlowFilesTransferred(GoodProcessor.REL_SUCCESS, 1);
runner.assertAllConditionsMet("success",
- mff -> mff.isAttributeEqual("GROUP_ATTRIBUTE_KEY", "1") && mff.isContentEqual("1,hello\n1,good-bye")
+ mff -> mff.isAttributeEqual("GROUP_ATTRIBUTE_KEY", "1") && mff.isContentEqual("1,hello\n1,good-bye")
);
}
@@ -167,6 +176,37 @@ public class TestStandardProcessorTestRunner {
assertNull(runner.getVariableValue("hello"));
}
+ @Test
+ public void testControllerServiceUpdateShouldCallOnSetProperty() {
+ // Arrange
+ final ControllerService testService = new SimpleTestService();
+ final AddAttributeProcessor proc = new AddAttributeProcessor();
+ final TestRunner runner = TestRunners.newTestRunner(proc);
+ final String serviceIdentifier = "test";
+ final String pdName = "name";
+ final String pdValue = "exampleName";
+ try {
+ runner.addControllerService(serviceIdentifier, testService);
+ } catch (InitializationException e) {
+ fail(e.getMessage());
+ }
+
+ assertFalse("onPropertyModified has been called", ((SimpleTestService) testService).isOpmCalled());
+
+ // Act
+ ValidationResult vr = runner.setProperty(testService, pdName, pdValue);
+
+ // Assert
+ assertTrue(vr.isValid());
+
+ ControllerServiceConfiguration csConf = ((MockProcessContext) runner.getProcessContext()).getConfiguration(serviceIdentifier);
+ PropertyDescriptor propertyDescriptor = testService.getPropertyDescriptor(pdName);
+ String retrievedPDValue = csConf.getProperties().get(propertyDescriptor);
+
+ assertEquals(pdValue, retrievedPDValue);
+ assertTrue("onPropertyModified has not been called", ((SimpleTestService) testService).isOpmCalled());
+ }
+
private static class ProcessorWithOnStop extends AbstractProcessor {
private int callsWithContext = 0;
@@ -220,7 +260,7 @@ public class TestStandardProcessorTestRunner {
@Override
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
FlowFile ff = session.create();
- if(counter % 2 == 0) {
+ if (counter % 2 == 0) {
ff = session.putAttribute(ff, KEY, "value");
session.transfer(ff, REL_SUCCESS);
} else {
@@ -233,14 +273,14 @@ public class TestStandardProcessorTestRunner {
private static class GoodProcessor extends AbstractProcessor {
public static final Relationship REL_SUCCESS = new Relationship.Builder()
- .name("success")
- .description("Successfully created FlowFile from ...")
- .build();
+ .name("success")
+ .description("Successfully created FlowFile from ...")
+ .build();
public static final Relationship REL_FAILURE = new Relationship.Builder()
- .name("failure")
- .description("... execution failed. Incoming FlowFile will be penalized and routed to this relationship")
- .build();
+ .name("failure")
+ .description("... execution failed. Incoming FlowFile will be penalized and routed to this relationship")
+ .build();
private final Set<Relationship> relationships;
@@ -259,9 +299,35 @@ public class TestStandardProcessorTestRunner {
@Override
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
- for( FlowFile incoming : session.get(20)) {
+ for (FlowFile incoming : session.get(20)) {
session.transfer(incoming, REL_SUCCESS);
}
}
}
+
+ private static class SimpleTestService extends AbstractControllerService {
+ private final String PD_NAME = "name";
+ private PropertyDescriptor namePropertyDescriptor = new PropertyDescriptor.Builder()
+ .name(PD_NAME)
+ .displayName("Controller Service Name")
+ .required(false)
+ .sensitive(false)
+ .allowableValues("exampleName", "anotherExampleName")
+ .build();
+
+ private boolean opmCalled = false;
+
+ protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+ return Arrays.asList(namePropertyDescriptor);
+ }
+
+ public void onPropertyModified(final PropertyDescriptor descriptor, final String oldValue, final String newValue) {
+ getLogger().info("onPropertyModified called for PD {} with old value {} and new value {}", new Object[]{descriptor.getName(), oldValue, newValue});
+ opmCalled = true;
+ }
+
+ public boolean isOpmCalled() {
+ return opmCalled;
+ }
+ }
}